我試圖讓我的物件在移動 1 個單位時改變方向,所以我將它的剛體.速度設定為 0.25,并設定一個每 4 秒改變一次方向的協程。但我注意到它有一些小的不準確(例如移動 0.998 時改變方向),運行一段時間后會累積很多。
現在我知道最好的方法可能是在這種情況下直接更改 transform.position ,但是有人可以告訴我為什么我以前的方法有這些不準確之處嗎?
編輯:
為了添加一些背景關系,我試圖復制一個傳統的蛇游戲,但運動平穩(而不是在網格之間跳躍)。很難解釋如何只能在蛇到達整個單位時改變方向,所以我只是說在原始帖子中每 4 秒改變一次方向。這是代碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SnakeHead : MonoBehaviour
{
private Rigidbody2D rigidBody;
private Vector2 currDir;
[SerializeField] private float speed;
void Start()
{
rigidBody = gameObject.GetComponent<Rigidbody2D>();
currDir = Snake.Instance.GetDir();
StartCoroutine(Move());
}
IEnumerator Move()
{
while (GameManager.gameIsRunning)
{
currDir = Snake.Instance.GetDir();
rigidBody.velocity = currDir * speed;
yield return new WaitForSeconds(1 / speed);
}
}
}
請注意,我在統一編輯器視窗中將速度設定為 0.25。
我知道直接改變 transform.position 是不好的做法,但是我看了幾個教程,他們都在蛇的運動上做到了。有誰知道是否有更好的方法?
uj5u.com熱心網友回復:
很難讓你在 4 秒后完全改變方向。使用WaitForSeconds(4)不會完全等待4秒,而是會等待至少 4 秒,正如評論中正確提到的那樣。這在很大程度上取決于引擎檢查協程的頻率。
正如您已經提到的,執行一些明確的操作可能是一個好主意。要么“手動”移動它(不是通過物理模擬),要么定期將位置設定為已知值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533270.html
標籤:unity3d协程
