我一直在为我的播放器的移动而烦恼,因为它的移动是基于用时间框架更新它的世界位置。使用Update或FixedUpdate没有任何改变。
自此,我设置了另一个运动,这涉及到我的代码中的很多变化,这次是基于速度(* Time.DelaTime),Update使我的播放器在保持鼠标按钮向下时移动得更快,但FixedUpdate解决了这个问题,无论我只是点击或保持鼠标向下,我的播放器保持同样的速度。
代码。
void FixedUpdate()
{
if(Input.GetMouseButton(0))
{
Vector3 target = GetMouseWorldPosition();
transform.position = Vector3.MoveTowards(transform.position, target , speed * Time.deltaTime);
祝您好运,玩得开心:)
由于您已经在使用Coroutine,您可以使用 yield return new WaitForSeconds (1)
而不是 yield return null
.你可以调整这个数字来设置步骤之间的等待时间。不要为了达到什么计时的目的而故意拖慢你的CPU。还有不要乱用固定更新时间,这是为了物理模拟。
改为 yield return new WaitForSeconds (Input.GetMouseButton(0)?.5f:1);
因此,如果按住鼠标键,它等待的时间会更短。
if(pathfinding==null || grid=null){
...(do random movement)
}else{
...(do pathfinding movement)
}
如果你不想要传送,你需要自己写过渡。
Vector3 oldPos = transform.position;
Vector3 newPos = nodeWaypoint;
float time = 0;
while(time<1){
yield return null;
time +=Time.deltaTime;
transform.position = Vector3.Lerp(oldPos,newPos,time);
}
或者直接用 DoTween
但是TBH,你的编码是相当有问题的。它将继续进行路径搜索,并在玩家保持点击时调用UpdatePosition。