我是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,所有对象都已分配。
答案 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();
}
}
}
上面的代码片段未经过测试。因此,如果需要,可以进行一些调整。