加速度计停止动画运动查询

时间:2017-01-19 07:41:32

标签: c# animation unity3d accelerometer unity5

我有一个名为AccelerometerMovement的脚本,它负责玩家的加速计控制。玩家只是移动正确,所以我只是采用Input.acceleration.x组件。

脚本如下:

public class AccelerometerMovement : MonoBehaviour {
    private bool isandroid;

    private float AccelerometerStoreValue;

    private robotController theRobo;

    // Use this for initialization
    void Start () {
        theRobo = FindObjectOfType<robotController> ();


        #if UNITY_ANDROID
        isandroid=true;
        #else
        isandroid=false;
        #endif
    }

    // Update is called once per frame
    void Update () {
        if (isandroid) {
            //android specific code
            Accelerometer();


        } else {
            //any other platform specific code

        }
    }

    void Accelerometer(){
        AccelerometerStoreValue = Input.acceleration.x;
        if (AccelerometerStoreValue > 0.1f) {
            //right
            theRobo.moveRight();

        } else if (AccelerometerStoreValue < -0.1f) {
            //left
            theRobo.moveLeft();

        }
    }
}

正如您可以根据左右看到的那样..正在从另一个脚本调用 moveLeft() moveRight(),这是实际的播放器控制器脚本。

实际功能所在的另一个脚本:

// after Update()
public void jump(){
        if (grounded) {
            myRigidBody.velocity = new Vector2 (myRigidBody.velocity.x, jumpHeight);
            doubleJump = false;

        }

        if(!doubleJump&&!grounded){

            myRigidBody.velocity = new Vector2 (myRigidBody.velocity.x, jumpHeight);
            doubleJump = true;
        }
    }

    public void moveLeft(){



        myRigidBody.velocity = new Vector2 (-moveSpeed, myRigidBody.velocity.y);
        robotMove = true;
        lastMove = myRigidBody.velocity.x;
        anim.SetFloat ("MoveX", -moveSpeed);
        anim.SetFloat ("LastMoveX", lastMove);
        anim.SetBool ("RobotMoving", robotMove);


    }

    public void moveRight(){



        myRigidBody.velocity = new Vector2 (moveSpeed, myRigidBody.velocity.y);
        robotMove = true;
        lastMove = myRigidBody.velocity.x;
        anim.SetFloat ("MoveX", moveSpeed);
        anim.SetFloat ("LastMoveX", lastMove);
        anim.SetBool ("RobotMoving", robotMove);



    }
    public void stop(){

        robotMove = false;

        anim.SetBool ("RobotMoving", robotMove);

    }

现在,当我检查实际设备上的控件时控件工作正常,但有一个问题!

问题在于,当玩家开始移动动画的动画开始时,但当它停止时空闲动画(或停止动画)不开始,即使仍然是玩家运动动画一直在继续。

现在我无法理解如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

上面的Stop()函数处于休眠状态。我们需要通过添加一个额外的条件来调用它:

 else if (AccelerometerStoreValue > 0.01f && AccelerometerStoreValue < 0.09f || AccelerometerStoreValue < -0.01f && AccelerometerStoreValue > -0.09f) {
            theRobo.stop ();
        }

这些值将依旧处理设备,并将空闲动画设置为有效!将上面的代码放在Accelerometer()函数中的第二个 else if 之后。