进入碰撞后将游戏对象移动到另一个对象。 Unity C#

时间:2016-02-13 10:45:18

标签: c# unity3d unity5

我是C#和Unity3D的初学者,所以我的问题可能很奇怪,但请不要评判我。我很难弄清楚错误是什么以及它为什么不起作用。

我在游戏中有一个幽灵,当我靠近它时,它必须远离我。我已经围绕鬼创建了碰撞,并将此脚本添加到它:

   using UnityEngine;
   using System.Collections;

public class MaidTriggeris : MonoBehaviour {
    public GameObject light;
    public GameObject sing;
    public GameObject ghost;
    public float speed;
    public GameObject target;


    // Use this for initialization
    void Start () {
        light.SetActive(true);
    }

    // Update is called once per frame
    void OnTriggerEnter(){
        light.SetActive (false);
        DestroyObject (sing);
        float step = speed * Time.deltaTime;
        ghost.transform.position = Vector3.MoveTowards(ghost.transform.position, target.transform.position, step);
    }
}

无论如何,当我在碰撞盒中移动时,一切都有效(它会摧毁游戏对象"唱出"并将光线设置为" false"),但它永远不会移动游戏对象' s"鬼"定位到另一个对象" target"。我的速度设置为5,所有对象都已分配。

1 个答案:

答案 0 :(得分:1)

嗯,您只执行Vector3.MoveTowards一次,因此ghost只移动了一步。您需要的是在某些条件下Update中的任何标记的帮助下在Coroutine中执行此操作。等,

using UnityEngine;
using System.Collections;

public class MaidTriggeris : MonoBehaviour {
    public GameObject light;
    public GameObject sing;
    public GameObject ghost;
    public float speed;
    public GameObject target;


    // Use this for initialization
    void Start () {
        light.SetActive(true);
    }

    // Update is called once per frame
    void OnTriggerEnter(){
        light.SetActive (false);
        DestroyObject (sing);
        StartCoroutine("MoveGhost");            
    }

    IEnumerator MoveGhost(){
        while(Vector3.Distance(ghost.transform.position, target.transform.position) > 1.0f) // Change this value accordingly 
            {
                float step = speed * Time.deltaTime;
                ghost.transform.position = Vector3.MoveTowards(ghost.transform.position, target.transform.position, step);
                yield return new WaitForEndOfFrame();
            }
    }
}

上面的代码片段未经过测试。因此,如果需要,可以进行一些调整。