強火で進め

このブログではプログラム関連の記事を中心に書いてます。

自前でPanelオブジェクトを作成する

Unity標準で作成出来るパネル(板ポリゴン)はかなりポリゴンが多かったりします。

この様に沢山のポリゴンが使われていますがパネルを作る場合には最小で三角ポリゴン2つで可能です。それで問題無い場合は負荷軽減の面からその様なパネルが欲しくなります。

3DCGツールで作成して持って来ても良いですがEditor拡張でも対応可能ですのでちょっと拡張プログラムを作ってみました。

プログラム

こちらのプログラムのファイルを Editor フォルダに格納して下さい。メニューから「Create Object」→「Panel」と選択するとパネルが作成出来ます。

(2012/08/30 追記)
以下のプログラムは Prefab 化した時に問題が有ります。修正版を書きましたのでこちらを参照下さい。
(追記ここまで)

【CreatePanel.cs】

using UnityEditor;
using UnityEngine;
using System.Collections;

public class CreatePanel : MonoBehaviour {

    [MenuItem ("Create Object/Panel")]
    static void Create () {
		GameObject newGameobject = new GameObject("CustomPanel");
		
		MeshRenderer meshRenderer = newGameobject.AddComponent<MeshRenderer>();
		meshRenderer.material = new Material(Shader.Find("Diffuse"));
		//meshRenderer.sharedMaterial.mainTexture = 
		//	(Texture)AssetDatabase.LoadAssetAtPath("Assets/test.png", typeof(Texture2D));
			
		MeshFilter meshFilter = newGameobject.AddComponent<MeshFilter>();
		
		meshFilter.mesh = new Mesh();
		Mesh mesh = meshFilter.sharedMesh;
		mesh.name = "CustomPanel";
		
		mesh.vertices = new Vector3[]{
			new Vector3(-0.5f,  0.5f, 0.0f),
			new Vector3( 0.5f,  0.5f, 0.0f),
			new Vector3( 0.5f, -0.5f, 0.0f),
			new Vector3(-0.5f, -0.5f, 0.0f)
		};
		mesh.triangles = new int[]{
			0, 1, 2,
			2, 3, 0
		};
		mesh.uv = new Vector2[]{
			new Vector2(0.0f, 1.0f),
			new Vector2(1.0f, 1.0f),
			new Vector2(1.0f, 0.0f),
			new Vector2(0.0f, 0.0f)
		};
		
		mesh.RecalculateNormals();	// 法線の再計算
		mesh.RecalculateBounds();	// バウンディングボリュームの再計算
		mesh.Optimize();
	}
}