unity 목표물 방향으로 바라보면서 따라가기 followTarget, LootAt Target

1. 설정(태그 방식으로 안해도 됨 hierarchy name명으로 해도 됨.)




2. 오브젝트 설정

메인 오브젝트

작은 오브젝트

3. C#코드 test와 SmallCube

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class test : MonoBehaviour {
    
    int countSmallCube;
 
    private void Start()
    {
        countSmallCube = 0;
    }
 
    private void OnTriggerEnter(Collider col)
    {
        if (col.tag == "SmallCube")
        {
            countSmallCube++;
            // 1번째만 메인 오브젝트를 따라가고 다음부터 작은 오브젝트만 따라가게 string 타켓네임을 바꾼다.
            if (countSmallCube > 1) col.GetComponent<SmallCube>()._targetName = "SmallCube" + (countSmallCube - 1).ToString();
            
            // 오브젝트의 태그명을 바꿈
            col.gameObject.tag = "SmallCube" + countSmallCube.ToString();
 
            col.GetComponent<SmallCube>().TargetFind();
            col.GetComponent<SmallCube>()._touch = true;
        }
    }
}
 
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class SmallCube : MonoBehaviour {
 
    public string _targetName = "Cube";
    Transform _target;
    public bool _touch = false;
    private float dampSpeed = 3;  // 따라가는 속도
 
 
    // Update is called once per frame
    void Update () {
        if (_touch == true) FollowTarget();
    }
 
    public void TargetFind()
    {
        // 타겟 string을 바꿈
        _target = GameObject.FindGameObjectWithTag(_targetName).GetComponent<Transform>();
    }
 
    void FollowTarget()
    {
        // Gets a vector that points from the player's position to the target's.
        var heading = _target.position - this.transform.position;
 
        // 거리가 멀어지면 실행
        if (heading.sqrMagnitude > 1)
        {
            // Target is within range.
            transform.position = Vector3.Lerp(transform.position, _target.position, Time.deltaTime * dampSpeed);
            
        }
        // 방향을 봄
        transform.LookAt(_target);
    }
}
 
cs






댓글