본문 바로가기

Game/Unity

[unity3d] homing

homing example


using UnityEngine;
using System.Collections;

public class Homing : MonoBehaviour
{
    // gameobject
    public GameObject effect;
    // component
    public Vector3 target;
    private Vector3 prevPos;
    private Vector3 startPos;
    private Transform trans;
    // variable
    public float speed = 5f;
    private float time;
    private float timer = 0.0f;
    private float xPow;
    private float yPow;
    private float zPow;

    void Start ()
    {
        xPow = Random.Range (0.4f3.0f);
        yPow = Random.Range (0.4f3.0f);
        zPow = Random.Range (0.4f3.0f);

        trans = transform;
        prevPos = trans.position;
        startPos = transform.position;
        time = (target - trans.position).magnitude / speed;
    }

    void Update ()
    {
        Vector3 v3 = startPos;
        v3.x = Mathf.Lerp (v3.xtarget.xMathf.Pow (timer/timexPow));
        v3.y = Mathf.Lerp (v3.ytarget.yMathf.Pow (timer/timeyPow));
        v3.z = Mathf.Lerp (v3.ztarget.zMathf.Pow (timer/timezPow));
        trans.position = v3;
        timer += Time.deltaTime;

        if (trans.position != prevPos) {
            trans.rotation = Quaternion.LookRotation (trans.position - prevPos);
        }

        prevPos = trans.position;

        if (transform.position == target) {
            StartCoroutine (EDestory ());
        }
    }

    private IEnumerator EDestory ()
    {
        yield return new WaitForSeconds (0.2f);
        Destroy (gameObject);
    }
}