Unity3D C# - `Input.GetMouseButton(0)`的速度问题[已解决]。

问题描述 投票:0回答:1

我一直在为我的播放器的移动而烦恼,因为它的移动是基于用时间框架更新它的世界位置。使用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);

祝您好运,玩得开心:)

c# unity3d
1个回答
1
投票

问题1

由于您已经在使用Coroutine,您可以使用 yield return new WaitForSeconds (1) 而不是 yield return null.你可以调整这个数字来设置步骤之间的等待时间。不要为了达到什么计时的目的而故意拖慢你的CPU。还有不要乱用固定更新时间,这是为了物理模拟。

问题二

改为 yield return new WaitForSeconds (Input.GetMouseButton(0)?.5f:1);因此,如果按住鼠标键,它等待的时间会更短。

问题3

if(pathfinding==null || grid=null){
...(do random movement)
}else{
...(do pathfinding movement)
}

编辑1

如果你不想要传送,你需要自己写过渡。

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。

© www.soinside.com 2019 - 2024. All rights reserved.