前提・実現したいこと
unityでスクリプトを使ってたくさんのメッシュがある直方体を作りたい。
このサイトのソースを参考にして6角柱から左図のような直方体を作ることができたのですが、これをさらに手書きの下図のように細かくメッシュを入れたいと考えています
しかし直方体の点をfor文で生成した後、それらをつなげるところでエラーがでるのですがどのように変えればうまく動きますか?
6角柱のメッシュ
:http://simplestar-tech.hatenablog.com/entry/2017/10/08/162753
発生している問題・エラーメッセージ
for文のなかで作ったはずのpositionsを参照できない。
C#
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(MeshRenderer))] [RequireComponent(typeof(MeshFilter))] public class kaku : MonoBehaviour { [SerializeField] private Material _mat; // Use this for initialization void Start() { var mesh = new Mesh(); float root3 = Mathf.Sqrt(3f); Vector3[] positions = new Vector3[] { //天板 new Vector3 (0f, 1f, 0f), new Vector3 (0f, 1f, 1f), new Vector3 (1f, 1f, 1f), new Vector3 (1f, 1f, 0f), //new Vector3 (0f, 1f, -2f), //new Vector3 (-root3, 1f, -1f), //new Vector3 (-root3, 1f, 1f), new Vector3 (0f, -1f, 0f), new Vector3 (0f, -1f, 1f), new Vector3 (1f, -1f, 1f), new Vector3 (1f, -1f, 0f), // new Vector3 (0f, -1f, -2f), //new Vector3 (-root3, -1f, -1f), //new Vector3 (-root3, -1f, 1f), }; mesh.vertices = new Vector3[] { // 天板 positions[0], positions[ 1], positions[ 2], positions[ 0], positions[ 2], positions[ 3], //positions[ 0], positions[ 3], positions[ 4], positions[ 0], positions[ 4], positions[ 5], positions[ 0], positions[ 5], positions[ 6], positions[ 0], positions[ 6], positions[ 1], // 底板 positions[4], positions[ 7], positions[ 6], positions[ 4], positions[6], positions[ 5], //positions[ 7], positions[11], positions[10], positions[ 7], positions[12], positions[11], positions[ 7], positions[13], positions[12], positions[ 7], positions[ 8], positions[13], // 側面 positions[1], positions[ 5], positions[ 2], positions[2], positions[ 6], positions[ 3], positions[3], positions[7], positions[ 0], positions[0], positions[4], positions[ 1], // positions[5], positions[12], positions[ 6], // positions[6], positions[13], positions[ 1], // 側面2 positions[1], positions[4], positions[ 5], positions[2], positions[ 5], positions[ 6], positions[3], positions[ 6], positions[7], positions[0], positions[7], positions[4], // positions[5], positions[11], positions[12], // positions[6], positions[12], positions[13] }; int[] triangles = new int[mesh.vertices.Length]; for (int i = 0; i < mesh.vertices.Length; i++) { triangles[i] = i; } mesh.triangles = triangles; mesh.RecalculateNormals(); var filter = GetComponent<MeshFilter>(); filter.sharedMesh = mesh; var renderer = GetComponent<MeshRenderer>(); renderer.material = _mat; } // Update is called once per frame void Update() { } } ↑これがソースを参考にして作成できた直方体 -------------------------------------------------------------- ↓これがエラーが出るソースコード メッシュがたくさんある直方体のコード (エラーがでたので、ポリゴンを書く部分はノータッチです。) using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(MeshRenderer))] [RequireComponent(typeof(MeshFilter))] public class manymesh: MonoBehaviour { [SerializeField] private Material _mat; // Use this for initialization void Start() { var mesh = new Mesh(); float root3 = Mathf.Sqrt(3f); for (int a = 0; a < 10; a++) { Vector3[] positions = new Vector3[] { new Vector3(0f, 1f+a, 0f), new Vector3(0f, 1f+a, 1f), new Vector3(1f, 1f+a, 1f), new Vector3(1f, 1f+a, 0f), }; } mesh.vertices = new Vector3[] { // 天板 positions[0], positions[ 1], positions[ 2], positions[ 0], positions[ 2], positions[ 3], // 底板 positions[4], positions[ 7], positions[ 6], positions[ 4], positions[6], positions[ 5], // 側面 positions[1], positions[ 5], positions[ 2], positions[2], positions[ 6], positions[ 3], positions[3], positions[7], positions[ 0], positions[0], positions[4], positions[ 1], // 側面2 positions[1], positions[4], positions[ 5], positions[2], positions[ 5], positions[ 6], positions[3], positions[ 6], positions[7], positions[0], positions[7], positions[4], }; int[] triangles = new int[mesh.vertices.Length]; for (int i = 0; i < mesh.vertices.Length; i++) { triangles[i] = i; } mesh.triangles = triangles; mesh.RecalculateNormals(); var filter = GetComponent<MeshFilter>(); filter.sharedMesh = mesh; var renderer = GetComponent<MeshRenderer>(); renderer.material = _mat; } // Update is called once per frame void Update() { } }
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/09 01:07
2018/09/09 03:19
2018/09/09 09:12
2018/09/09 09:49
2018/09/11 05:48