【Unity】Meshをワイヤーフレーム表示する(改)

こんにちは。ヤマヤタケシです。

久しぶりの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);

    }

}

そんじゃまた。

コメントを残す