Unity C#vector 2运动问题

时间:2016-05-01 10:04:09

标签: c# unity3d game-physics

我用vector 2和Rigidbody.velocity制作一个移动脚本。我希望我的游戏对象移动到某个x位置,然后返回到初始位置,所有这一切都在连续移动。我实现了第一部分,它在达到某一点时向后移动,但后退运动永远不会停止:

public float spawnPos;
public float currentPos;
public float constantSpeed = 3;
public float speed = 0;
KeyInput scriptBeholderKI;
Rigidbody2D squadRigidBody;

//Comprovation of spawnposition and KeyInput
//Script adquisition
void Start () {

    spawnPos = transform.position.x;
    scriptBeholderKI = gameObject.GetComponent <KeyInput> ();
    squadRigidBody = gameObject.GetComponent <Rigidbody2D> ();

}

void FixedUpdate () {

    //Movement
    squadRigidBody.velocity = new Vector2 (constantSpeed + speed , 0);

    //key inputs
    if (Input.GetKeyDown (scriptBeholderKI.forward)) {   

        StopAllCoroutines ();
        StartCoroutine (RightMovement(0f));
    }

    if (Input.GetKeyDown (scriptBeholderKI.backwards)) {

        StopAllCoroutines ();
        StartCoroutine (LeftMovement (0f));
    }
}

//Speed values (Right, Left)
IEnumerator RightMovement (float Rloop) {

    while (transform.position.x < constantSpeed * Time.time + spawnPos + 14) {

        speed = 10f;
        yield return new WaitForSeconds (Rloop);
    }

    if (transform.position.x> constantSpeed * Time.time + spawnPos + 14) {

        StopAllCoroutines ();
        StartCoroutine (LeftMovement (0f));
    }
}

IEnumerator LeftMovement (float Lloop) {

    while (transform.position.x > constantSpeed * Time.time + spawnPos) {

        speed = -7f;
        yield return new WaitForSeconds (Lloop);
    }
}

如果您还看到任何可以改进的内容,请记下c:

编辑:

当我按下前进输入时,我的游戏对象移动直到它到达某个点,当我按下bacdow时,它会移动到左边不间断。

同样的问题是我希望我的目标移动到游戏对象的常数,这就是我使用Time.time的原因。我对输入的动作更恰当地说是加速度。自游戏开始以来,我希望我的目标始终与游戏对象保持相同的距离。至少右边的最大值是我想要的......

而且我也试图删除所有协同程序阻止而没有任何阻止,但我的意图是能够随时取消移动(但我删除了RightMovement协程中的那个。但它不是。毕竟是必要的)

最后一件事:我改变了#34; FixedUpdate&#34; for&#34;更新&#34;因为它给了我输入回复的问题,我不知道它是否相关,但以防万一。

1 个答案:

答案 0 :(得分:0)

我认为你误解了Time.time变量。就像yes在评论中提到的那样

  

Time.time是自游戏开始以来的秒数

这意味着,随着时间的推移,你的目标将会缓慢但肯定会移开。

而不是Time.time,您可以使用Time.deltaTime

  

Time.deltaTime是完成最后一帧所用的时间(以秒为单位)

这通常用于移动。

  

当你与Time.deltaTime相乘时,你基本上表达了:如果乘法是10,我希望每秒移动10米而不是每帧10米。

Unity docs: Time.deltaTime