본문 바로가기
Unity/소스코드

객체 자동 이동

by 세에레_freewing 2023. 3. 6.
반응형
public class Enemy : MonoBehaviour {
	public Transform target;
	public Vector3 direction;
	public float velocity;
	public float default_velocity;
	public float accelaration;
	public Vector3 default_direction;

	void Start () {
                // 자동으로 움직일 방향 벡터
		default_direction.x = Random.Range (-1.0f, 1.0f);
		default_direction.y = Random.Range (-1.0f, 1.0f);
                // 가속도 지정 (추후 힘과 질량, 거리 등 계산해서 수정할 것)
		accelaration = 0.1f;
		default_velocity = 0.1f;
	}
	
	// Update is called once per frame
	void Update () {
                // Player의 현재 위치를 받아오는 Object
		target = GameObject.Find ("Player").transform;
                // Player와 객체 간의 거리 계산
		float distance = Vector3.Distance (target.position, transform.position);

		if (distance <= 10.0f) {
			MoveToTarget ();
                        // 일정 거리안에 있다가 다시 멀어졌을 때, 일정거리안에 있었던 player의 방향으로 움직임
			default_direction = direction;
		}
                // 일정거리 밖에 있을 시, 속도 초기화하고 해당 방향으로 무빙 
		else {
			velocity = 0.0f;
			this.transform.position = new Vector3 (transform.position.x + (default_direction.x * default_velocity),
			                                       transform.position.y + (default_direction.y * default_velocity),
			                                       transform.position.z);
		}
	}

	public void MoveToTarget () {
                // Player의 위치와 이 객체의 위치를 빼고 단위 벡터화 한다.
		direction = (target.position - transform.position).normalized;
                // 초가 아닌 한 프레임으로 가속도 계산하여 속도 증가
		velocity =  (velocity + accelaration * Time.deltaTime);
                // 해당 방향으로 무빙
		this.transform.position = new Vector3 (transform.position.x + (direction.x * velocity),
		                                       transform.position.y + (direction.y * velocity),
           				                       transform.position.z);

	}
}

 

출처 : https://pabian.wordpress.com/2015/01/19/%EA%B0%9D%EC%B2%B4%EB%93%A4-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%9B%80%EC%A7%81%EC%9D%B4%EA%B2%8C-%ED%95%98%EA%B8%B0/

반응형