###実現したいこと:オブジェクトのアニメの向きと、視界を表すコライダーを同じ方向に回転させたい
public class SerachSightRotate : MonoBehaviour { Mob_Anime_Setting mobAnime; void Start() { mobAnime = transform.root.gameObject.GetComponent<Mob_Anime_Setting>(); } void FixedUpdate() { { /* transformを取得 */ Transform myTransform = this.transform; /* ワールド座標を基準に、回転を取得 */ Vector3 worldAngle = myTransform.eulerAngles; if (mobAnime.nowMode == mobAnime.upAnime) {worldAngle.z = 180; } else if (mobAnime.nowMode == mobAnime.downAnime) { worldAngle.z = -180; } else if (mobAnime.nowMode == mobAnime.rightAnime) { worldAngle.z = 90; } else if (mobAnime.nowMode == mobAnime.leftAnime) { worldAngle.z = -90; } /*アニメ表示状態の向きに応じて、 ワールド座標を基準に、 *z軸を軸に回転を設定した角度に変更*/ myTransform.eulerAngles = worldAngle; /*回転角度を設定*/ } } }
以上のスクリプトを子オブジェクトにアタッチしたのですが、うまく機能しません。
デフォルトでは親オブジェクトの向きと同じく下を向いているコライダーが、プレイ開始と同時になぜか上向きになってしまい、以後、親の向きがどちらへ変わってもコライダは上を向いたままで変わりません(コライダーは扇形の視界を表現するようなものです)。worldAngle.zに代入する数値を変えてみてもコライダが上にいってしまうのは変わらず、因果関係がよくわかりません。
方向自体は親オブジェクトにアタッチされた別クラスで定義と検出がされており、このクラス内では「mobAnime.nowMode 」としてあります。
Fixedupdate内のif条件自体までは、後処理にDebug.Logを使い、ただしく反応しているのを確認しました。
条件分け後の処理内容の記述は、ネットで色々と調べたのですが回転は色んなやり方があるらしくて難しく、拾ってきたコードの中で最もシンプルそうなものを応用したのですが、理解が足りないだけにここが間違っているような気がします。
どうおかしいのかわかる方がいらっしゃいましたら、ご教示をおねがいいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。