頂点カラーシェーダーのテスト用にメッシュオブジェクトを用意します。
ちょうど1年前に六角柱を作りましたが、やはり最も頂点数の少ない三角柱から作ろうと思います。
simplestar-tech.hatenablog.com
もう既に書式は習っているので、知っていることを利用してコードに起こしてみます。
詳しい解説が欲しい方はこちらが参考になりますよ。
qiita.com
カタカタ…
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(MeshRenderer))] [RequireComponent(typeof(MeshFilter))] public class Prism : MonoBehaviour { [SerializeField] private Material _mat; const float root3 = 1.732051f; // Use this for initialization void Start() { var mesh = new Mesh(); Vector3[] positions = new Vector3[] { // top new Vector3 (0f, 1f, 0f), new Vector3 (1f, 1f, -root3), new Vector3 (-1f, 1f, -root3), // bottom new Vector3 (0f, 0f, 0f), new Vector3 (-1f, 0f, -root3), new Vector3 (1f, 0f, -root3), }; int[] vertIndices = new int[] { 0, 1, 2, 3, 4, 5, 0, 2, 4, 4, 3, 0, 2, 1, 5, 5, 4, 2, 1, 0, 3, 3, 5, 1 }; Vector3[] vertices = new Vector3[vertIndices.Length]; for (int i = 0; i < vertIndices.Length; i++) { vertices[i] = positions[vertIndices[i]]; } mesh.vertices = vertices; int[] triangles = new int[mesh.vertices.Length]; for (int i = 0; i < mesh.vertices.Length; i++) { triangles[i] = i; } mesh.triangles = triangles; Vector2[] uvSources = new Vector2[] { // 天 new Vector2 (.25f, 0.5f), new Vector2 (0.5f, 0.0f), new Vector2 (0.0f, 0.0f), // 底 new Vector2 (.75f, 0.0f), new Vector2 (0.5f, 0.5f), new Vector2 (1.0f, 0.5f), // side R new Vector2 (0.0f, 1.0f), new Vector2 (.33f, 1.0f), new Vector2 (.33f, 0.5f), new Vector2 (.33f, 0.5f), new Vector2 (0.0f, 0.5f), new Vector2 (0.0f, 1.0f), // side G new Vector2 (.33f, 1.0f), new Vector2 (.66f, 1.0f), new Vector2 (.66f, 0.5f), new Vector2 (.66f, 0.5f), new Vector2 (.33f, 0.5f), new Vector2 (.33f, 1.0f), // side B new Vector2 (.66f, 1.0f), new Vector2 (1.0f, 1.0f), new Vector2 (1.0f, 0.5f), new Vector2 (1.0f, 0.5f), new Vector2 (.66f, 0.5f), new Vector2 (.66f, 1.0f) }; Vector2[] uvs = new Vector2[uvSources.Length]; for (int i = 0; i < uvSources.Length; i++) { uvs[i] = uvSources[i]; } mesh.uv = uvs; mesh.RecalculateNormals(); var filter = GetComponent<MeshFilter>(); filter.sharedMesh = mesh; var renderer = GetComponent<MeshRenderer>(); renderer.material = _mat; } // Update is called once per frame void Update() { } }
ジャン!
思いついていることがいくつかあるので、次の記事で試していきます。