が、私は0.0001fのように本当に遅い速度を使用する場合、このコードはさえ 最も高い位置に瞬時にオブジェクトを移動させます。
あなたは全く待っていません。あなたの変数がどれほど低いかに関わらず、whileループはできるだけ早く実行されます。コルーチン関数でこれを実行してから、キーワードyield return null
で待ってください。その後、
IEnumerator LiftObj(GameObject Obj)
{
float origianlPos = Obj.transform.position.y;
while (Obj.transform.position.y < origianlPos + liftOffset)
{
Obj.transform.position += Vector3.up * 0.0001f;
float newPos = Obj.transform.position.y;
newPos = Mathf.Clamp(newPos, newPos, newPos + liftOffset);
Obj.transform.position += Vector3.up * 0.0001f;
yield return null;
}
Debug.Log("Done Moving Up!");
}
とそれを動かす:あなたはTime.delta
が欠落しているため
StartCoroutine(LiftObj(myGameObject));
期待どおりに動作することをしてもわからないので、動きがスムーズではないかもしれません。 4
秒でVector3(0, 5, 0)
に現在myGameObject
位置から
IEnumerator LiftObj(GameObject playerToMove, Vector3 toPoint, float byTime)
{
Vector3 fromPoint = playerToMove.transform.position;
float counter = 0;
while (counter < byTime)
{
counter += Time.deltaTime;
playerToMove.transform.position = Vector3.Lerp(fromPoint, toPoint, counter/byTime);
yield return null;
}
}
移動:あなたがしたいすべてが一つの位置からの移動は、別の残業にある場合は、以下のサンプルコードを使用
StartCoroutine(LiftObj(myGameObject, new Vector3(0, 5, 0), 4));
明らかにヘルプを求めているのは、私がC#またはUnityの専門家ではないということです。あなたが私よりも優れたコードを提案しているということを指摘するのではなく、はるかに良いでしょう。 – CarloCupp