実現したいこと
自オブジェクトの向きに等速直線運動で動かす。
発生した問題
オブジェクトが真っ直ぐ進まない角度がある。
コード
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class 砲弾PS : MonoBehaviour 6{ 7 int tf = 0; 8 public float k = 0; 9 public float moveSpeed = 16f; 10 float kz = 0; 11 float xx = 0; 12 float zz = 1; 13 float si(float ki, int kf) 14 { 15 float a_1 = ki - kf; 16 float a_2 = a_1 * -1f; 17 float a_3 = 1.11111111f * a_2; 18 float a_4 = a_3 / 100; 19 return a_4; 20 } 21 void Start() 22 { 23 tf = 0; 24 Transform my2Transform = GetComponent<Transform>(); 25 26 Quaternion qi = transform.rotation; 27 k = transform.rotation.eulerAngles.y; 28 if (k == 0) { zz = 1; } 29 else 30 { 31 if (k < 90 && k > 0) 32 { 33 kz = si(k, 90); 34 zz = kz; 35 xx = 1 - kz; 36 if (k < 45) 37 { 38 if (k <= 22.5) 39 { 40 xx = xx+ k * (xx * 0.004809f); 41 zz = zz+ k * (zz * -0.004809f); 42 } 43 else { float kp = -k + 45; 44 xx = xx; //+ k * (xx * 0.004809f); 45 zz = zz; //+ k * (zz * -0.004809f); 46 } 47 } 48 } 49 50 else 51 { 52 if (k == 90) 53 { 54 xx = 1; zz = 0; 55 } 56 57 if (k < 180 && k > 90) ; 58 { 59 kz = si(k, 90); 60 xx = zz + kz; 61 zz = kz; 62 } 63 if (k == 180 || k == -180) { zz = -1; } 64 65 if (k < 0 && -90 < k) 66 { 67 kz = si(k, -90); 68 xx = -1 - kz; 69 zz = -kz; 70 71 } 72 if (k == -90) { xx = -1; zz = 0; } 73 } 74 } 75 } 76 77 void Update() 78 { 79 80 } 81 82 void FixedUpdate() 83 { 84 85 if (tf <= 99) 86 { 87 Vector3 pos = transform.position; 88 pos.z = pos.z + zz * -moveSpeed; 89 pos.x = pos.x + xx * -moveSpeed; 90 transform.position = pos; 91 tf++; 92 93 } 94 //else { Destroy(gameObject); } 95 } 96 97}
試したこと
360の中の45で割れる角度-22.5に近づくたびずれが大きくなる。(0~90度でしか試してない)
c#
1if (k <= 22.5) 2 { 3 xx = xx+ k * (xx * 0.004809f); 4 zz = zz+ k * (zz * -0.004809f); 5 } 6
のようなコードを加えると11.5に近づくたびずれが多くなる。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/24 17:55
2019/02/24 18:13 編集
退会済みユーザー
2019/02/24 19:08