実現したいこと
・UnityのMeshから得たvertices(ポリゴンの頂点情報)にGameObjectの回転を適用させたい
前提
Cubeの頂点からRayを打ち続けるようにしたいです。
Meshから得た頂点はGameObjectを回転(スケーリングも)させてもその頂点座標が変化しないので、GameObjectの回転情報は適用されていないことがわかります。
回転行列でどうにか計算するのかな...とか思い、調べながらやってはいたのですが、イマイチ理解に及んでおらず初心者なもので自力で解決が出来ていません。
どなたかご教授いただければと思います。
該当のソースコード
Unity_C#Script
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SCR_VerticesRaycast : MonoBehaviour 6{ 7 MeshFilter m_mFilter; 8 Mesh m_mesh; 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 m_mFilter = GetComponent<MeshFilter>();//MeshFilterを取得しておいて 14 m_mesh = m_mFilter.sharedMesh;//Meshを取得して 15 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 var vertices = m_mesh.vertices;//取得したMeshの頂点情報を取ってきて 22 List<Vector3> calcPoint = new List<Vector3>();//transformを適用させた頂点座標のリスト 23 24 foreach (var point in vertices) 25 { 26 var p = point; 27 28 /*ここで、 vertices に transform.rotation を適用させたい*/ 29 var rot = transform.rotation; 30 p = Quaternion.Euler(rot.x, rot.y, rot.z) * p; 31 32 //transform.Scaleの適用 33 p.x *= transform.localScale.x; 34 p.y *= transform.localScale.y; 35 p.z *= transform.localScale.z; 36 37 //transform.positionの適用 38 p += transform.position; 39 40 calcPoint.Add(p); 41 } 42 43 int i = 0; 44 foreach (var point in calcPoint) { 45 Debug.Log( i++ + " : " + point); 46 47 Debug.DrawRay(point, transform.forward, Color.blue); 48 } 49 } 50}
試したこと
参照サイトの「X:0度、Y:30度、Z:0度の移動ポジションを求める」より、クオータニオンを使って回転後の座標を取得するアルゴリズムを自分なりに試した(ソースコード 29,30行目)のですが、うまくできませんでした。
クオータニオンの扱いが悪いのか、そもそも頓珍漢なことをしているのか...

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。