こんにちは。ヤマヤタケシです。
久しぶりのUnityネタです。
春ですし、Unityで三角形のメッシュをワイヤーフレーム表示したくなったりするじゃないですか?
そんなわけで、ググりました。
ばっちりそういう記事を発見!
【Unity】Meshをワイヤーフレーム表示する
このコード、ほぼワンライナーでカッコイイ!
using UnityEngine; using System.Collections; public class Cube : MonoBehaviour { // Use this for initialization void Start () { MeshFilter mf = GetComponent<MeshFilter>(); mf.mesh.SetIndices(mf.mesh.GetIndices(0),MeshTopology.LineStrip,0); } }
しかし、結果がイマイチでした。
ほとんどの場所は問題なかったのですが、一部、意図しないところが繋がったりしちゃいました。
原因を分析しました。
三角形のインデックスをそのままLineStripにしてるからですね。
GetIndices(0)が返す配列は、(0,1,2)(2,3,4)のように3個で1つの三角形になっています。
三角形ポリゴン情報をワイヤーにするときは、(0,1)(1,2)(2,0)にします。
そんなコードはこちらです!
// // Wire表示にする // using UnityEngine; using System.Collections; public class WireModel : MonoBehaviour { Mesh mesh; // Use this for initialization void Start() { mesh = GetComponent<MeshFilter>().mesh; var triangleList = mesh.GetIndices(0); var triangleNum = triangleList.Length / 3; var lineList = new int[triangleNum * 6]; for (var n = 0; n < triangleNum ; ++n) { var t = n * 3; var l = n * 6; lineList[l+0] = triangleList[t+0]; lineList[l+1] = triangleList[t+1]; lineList[l+2] = triangleList[t+1]; lineList[l+3] = triangleList[t+2]; lineList[l+4] = triangleList[t+2]; lineList[l+5] = triangleList[t+0]; } mesh.SetIndices(lineList, MeshTopology.Lines, 0); } }
そんじゃまた。