現状・改善したいこと
タイトル通り、オブジェクトをfloat*Time.deltaTimeで反復動作で左右に動かしているのですが、
恐らく、floatの仕様のせいで若干の誤差が発生し、その分が徐々に積み重なってズレが生じています。
このズレをなくしたいのですが、入力値にMathf.Clampで制限をかけたり、
ネットで調べて出てきたfloatをMathf.Roundで*100した値を切り捨てたのち、/100する
という方法も試してみたのですが、うまくいきませんでした。
他にも、反復のタイミングをずらしてみたり、色々試しましたが、思うようにいかなかった為
質問させていただきました。
制限の方法や、もしくは別の方法で動かすなどでも構いません、回答お待ちしております。
現状の様子
分かりやすくするために、掛け率を0.01から0.1にしています
該当のソースコード
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MoveCursors : MonoBehaviour 6{ 7 private Vector3 Pos; 8 float x; 9 float y; 10 void Start() 11 { 12 Pos = transform.position; 13 x = 0; 14 y = 0; 15 } 16 17 void Update() 18 { 19 this.transform.rotation = Quaternion.Euler(0, 0, 0); 20 21 if(y == 0) 22 { 23 x += 0.1f *Time.deltaTime; 24 Pos.x += x; 25 transform.position = Pos; 26 Debug.Log("+ : " + x); 27 28 if(x >= 0.01) 29 { 30 y = 1; 31 } 32 } 33 34 if(y == 1) 35 { 36 x -= 0.1f *Time.deltaTime; 37 Pos.x -= x; 38 transform.position = Pos; 39 Debug.Log("- : " + x); 40 41 if(x <= -0.01) 42 { 43 y = 0; 44 } 45 } 46 } 47} 48
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/20 07:45
2019/09/20 08:20
2019/09/20 09:04
2019/09/20 09:07