Я попытался написать скрипт, который позволял бы прикрепленному к игровому объекту компоненту CharacterController перемещаться к точке щелчка в течение нескольких секунд после нажатия на землю. Но когда Unity находился в игровом состоянии, я обнаружил, что объект только перемещаетсядля вспышки после щелчка. И когда я отлаживал точку останова, я обнаружил, что таймер параметра контроля времени рассчитывал правильно.
Версия Unity - 5.5.6 и используется C # для программирования.
void Start()
{
characterController = this.GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
Click();
ClickMove();
}
void Click()
{
RaycastHit hitInfo;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hitInfo, 100))
{
//当射线碰撞到plane并且鼠标左键按下时
if (hitInfo.transform.tag == "Terrain" && Input.GetMouseButtonDown(0))//注意判断条件使用了标签
{
//让cube方向朝向点击位置
transform.LookAt(hitInfo.point);
offsetVec = hitInfo.point - transform.position;
offsetVec = offsetVec / offsetVec.magnitude;
MoveController = true;
}
}
//向量的magnitude表示这个向量的长度,当cube离我们点击位置小于1的时候才停止移动,这个数值可以自己调节
}
void ClickMove()
{
if (MoveController)
{
for (timer = 3.0f; timer >= 0; timer -= Time.deltaTime)
{
characterController.SimpleMove(offsetVec * Time.deltaTime * speed);
}
MoveController = false;
}
}
}
Я ожидаю, что игровой объект будет двигаться несколько секунд, когда я нажимаю на землю.