###前提・実現したいこと
今、回転をしているかどうかを判別し
【回転している】=歩きモーション
【回転していない】=待ち状態
と、動作させたいです。
初心者用の本を2冊ほど読んだだけなのでこれしかやり方がわかりません。
他に最善策がアレばそちらでも一向に構いません。
###発生している問題・エラーメッセージ
そもそも書き方がわかりません。
一応やろうと思っているのは、コルーチン起動時に今の角度を取得して、ターゲットへの回転を行う時に
今の角度と、同じでなければ歩きモーションを出すというのをやろうと思っています。
###該当のソースコード
IEnumerator NpcNormalKaiten() { nowExecCoroutine = true; moveResaet(); //Quaternion→Vector3 Quaternion changeLook = transform.position; Quaternion nowLook = Quaternion.Inverse(target.rotation); //ローカル座標をワールド座標に置き換える transform.TransformDirection(changeLook); transform.TransformDirection(nowLook); //ターゲットへ旋回 Rigidbody.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation (targetP.transform.position - transform.position), Time.deltaTime * 10f); Debug.Log("向きたい角度" + changeLook); Debug.Log("今の角度" + nowLook); if (nowLook == changeLook) { animator.SetBool("Idle", true); } else { animator.SetBool("Walk", true); } yield return null; nowExecCoroutine = false; }
###試したこと
Debug.Log(Rigidbody.rotation);で回転しようとしている角度を調べて
transform.localEulerAngles.xで現在の角度を取得して、回転時の角度を取得した者の、ひとつがオイラー角、もう一つがVector4だったので、無理だった。
オイラー角をVector4に変換しようと思って参考サイトをみたものの
http://kan-kikuchi.hatenablog.com/entry/UnityTips4
書いてることが理解できずに無理だった。
ワールド座標とローカル座標の問題かと思って調べたけど、これも不明。
座標ではなくて、角度を取得しなければいけないのに、それもできません。
###補足情報(言語/FW/ツール等のバージョンなど)
【環境】
Unity5.6.1f1 personal
win10
MicrosoftVisualStudio
上記が作成環境になっております。
2日程、この問題にハマっており変な文章になっているかもしれません。解決方法がおわかりの方ぜひよろしくお願いいたします。
他に補足情報等必要であればなんでも言ってください。
###追記
C#
1 IEnumerator NpcNormalKaiten() 2 { 3 nowExecCoroutine = true; 4 5 //全てのアニメーションをリセット 6 moveResaet(); 7 8 //初期値からいくつ回転したのかを調べる 9 //float angle = Quaternion.Angle(transform.rotation, target.rotation); 10 11 //今見ている方向 12 float nowLook = transform.localEulerAngles.x; 13 //ターゲットの方向 14 float targetLook = target.transform.localEulerAngles.x; 15 //次に見る方向 16 float nextLook = nowLook - targetLook; 17 18 //ターゲットへ旋回 19 rb.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation 20 (targetP.transform.position - transform.position), Time.deltaTime * 10f); 21 //見るだけなので動かない 22 rb.velocity = Vector3.zero; 23 24 if (nextLook >= 340f) 25 { 26 animator.SetBool("Idle", true); 27 } 28 else 29 { 30 animator.SetBool("Walk", true); 31 } 32 yield return null; 33 34 nowExecCoroutine = false; 35 }
数字の取得方法がわからなかったので、教えてもらったとおりに角度を取得。
完全に見たい方向に向いてるときが359fだったので、20fほど余裕を持たせて、それ以上だったら振り向きモーションを動作するようにしました。
今回は、もう疲れに疲れ切って、質問に書いたコードが、途中も途中でムチャクチャだったので、回答していただいた方には、本当に申し訳ないと思っております。すいませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 13:08