困っていること
ikosami氏の「Unityでマウスカーソル位置のメッシュを変形させる方法」
https://www.grass-moss.com/blog/mesh_edit2 という面白いコードが有ったので
自身のプロジェクトに導入してみることにしました。
※以下、当コードを「MeshEdit.cs」と表記します。
「MeshEdit.cs」
Blenderで作成したメッシュ
ここで実装中に一つ躓いたことがあります。
Unity上で作成した「Plane」メッシュに対して
「MeshEdit.cs」は問題なく動作するのですが…、
同じようにBlender上で作成したPlaneを模った3Dモデルをインポートした時、
「MeshEdit.cs」が動作しませんでした。
モデル側に不具合があるのかと思ったのですが、
その他コードをインポートしたモデルにアタッチした場合、そのコードは動作するので
「MeshEdit.cs」側に問題があるのかと思います。。
しかし「MeshEdit.cs」のコード上の不具合の有無は、
恥ずかしながら私では見当がつきませんでした。
もしよろしければコード上にそれらの不具合を発生さえる原因があるとすれば
ご教授頂ければ幸いです。どうぞよろしくお願いいたします。
■「MeshEdit」サンプルコード
C#
1using UnityEngine; 2 3public class MeshEdit : MonoBehaviour 4{ 5 6 MeshFilter meshFilter; 7 MeshCollider meshCollider; 8 9 //変形する範囲 マウス位置から、どこまでの距離が変形するか 10 float editDistance = 2f; 11 12 private void Start() 13 { 14 meshFilter = GetComponent<MeshFilter>(); 15 meshCollider = GetComponent<MeshCollider>(); 16 } 17 18 private void Update() 19 { 20 //カメラからレイを飛ばす 21 22 23 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 24 RaycastHit hit; 25 26 if (Physics.Raycast(ray, out hit)) 27 { 28 Edit(hit.point); 29 } 30 } 31 32 private void Edit(Vector3 editPoint) 33 { 34 35 Vector3[] vertices = meshFilter.mesh.vertices; 36 for (int i = 0; i < vertices.Length; i++) 37 { 38 var worldPosition = vertices[i] + transform.position; 39 40 var distance = Vector3.Distance(worldPosition, editPoint); 41 if (distance < editDistance) 42 { 43 vertices[i] += new Vector3(0, 0.1f * (editDistance - distance), 0); 44 } 45 46 } 47 meshFilter.mesh.vertices = vertices; 48 49 //MeshColliderにメッシュ情報を入れる 50 meshCollider.sharedMesh = meshFilter.mesh; 51 } 52}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。