我用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;因为它给了我输入回复的问题,我不知道它是否相关,但以防万一。
答案 0 :(得分:0)
我认为你误解了Time.time
变量。就像yes在评论中提到的那样
Time.time
是自游戏开始以来的秒数。
这意味着,随着时间的推移,你的目标将会缓慢但肯定会移开。
而不是Time.time
,您可以使用Time.deltaTime
Time.deltaTime
是完成最后一帧所用的时间(以秒为单位)
这通常用于移动。
当你与
Time.deltaTime
相乘时,你基本上表达了:如果乘法是10,我希望每秒移动10米而不是每帧10米。