본문 바로가기

IT이야기/unity,c#

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

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

 

 

 

 

2. 오브젝트 설정

 

메인 오브젝트

 

작은 오브젝트

 

3. C#코드 test와 SmallCube


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;

        }

    }

}

 

 

 

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);

    }

}

 

 

해당 소스의 기능 들을 이용하면 다양하게 응용할 수 있어서 가져옴.

 

해당 소스는 꼬리물기 게임의 예제이다.