点击地面后,附加脚本的游戏对象会在一瞬间而不是几秒钟内移动



我试图编写一个脚本,允许游戏对象附加的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;
}
}

}

当我点击地面时,我预计游戏对象会移动几秒钟。

删除for:

void ClickMove()
{
if (MoveController)
{
characterController.SimpleMove(offsetVec * Time.deltaTime * speed);
MoveController = false;
}    
}

如果你想让运动更长,你只需要改变速度(使其变慢(或矢量(使其更大(。