void Start() { //法線初期化 normalVector = new Vector3[variables.poleSum * (variables.trapezoidDivisionNum + 1), 1]; normalBasicVec = new Vector3[variables.poleSum * (variables.trapezoidDivisionNum + 1), 1]; if (myParent == null || !variables.isCircleSystem) { createSorce = GameObject.Find("central").GetComponent <createTrapezoidPole>(); //現在のTextSetの段数を取得 poleSum = variables.poleSum; } else { createSorce = myParent.GetComponent <createTrapezoidPole>(); //自分の親の名前から該当TextSetの行からアイテム数を取得 //Debug.Log(myParent.name); myNum = int.Parse(myParent.name.Substring(9)); poleSum = systemScript.GetTextSetItemNum(myNum); } //メッシュ作成 Mesh mesh = new Mesh(); //メッシュリセット mesh.Clear(); //メッシュへの頂点情報の追加 int PPVindex; if (myParent == null) { PPVindex = 0; } else { PPVindex = myNum; } mesh.vertices = variables.polygonalPillarVertex[PPVindex]; //テキストの位置 int sum; for (sum = 0, textPosition = Vector3.zero; sum < poleSum * (variables.trapezoidDivisionNum + 1); sum++) { if (myParent == null || !variables.isCircleSystem) { textPosition += variables.polygonalPillarVertex[0][sum * 8]; } else { textPosition += variables.polygonalPillarVertex[myNum][sum * 8]; } } textPosition /= sum; //メッシュへの面情報の追加 SetFace(); //Debug.Log("mesh : "+mesh.vertices.Length+" face : "+face[face.Length-1]+" poly : "+ variables.polygonalPillarVertex.GetLength(0)); mesh.triangles = face; //メッシュフィルター追加 MeshFilter mesh_filter = new MeshFilter(); mesh_filter = this.gameObject.AddComponent <MeshFilter>(); //メッシュアタッチ mesh_filter.mesh = mesh; //レンダラー追加 + マテリアルアタッチ meshRenderer = this.gameObject.AddComponent <MeshRenderer>(); meshRenderer.material = variables.material_PolygonalPillar; //コライダーアタッチ meshCollider = this.gameObject.AddComponent <MeshCollider>(); meshCollider.sharedMesh = mesh; meshCollider.convex = true; meshCollider.isTrigger = true; //NormalMapの再計算 mesh_filter.mesh.RecalculateNormals(); if (!variables.isOnXR) { //当たり判定用 Event Trigger //イベントトリガーのアタッチと初期化 EventTrigger currentTrigger = this.gameObject.AddComponent <EventTrigger>(); currentTrigger.triggers = new List <EventTrigger.Entry>(); //イベントトリガーのトリガーイベント作成 EventTrigger.Entry entry1 = new EventTrigger.Entry(); entry1.eventID = EventTriggerType.PointerEnter; entry1.callback.AddListener((x) => OnMouseEnterOwnMade()); //ラムダ式の右側は追加するメソッド currentTrigger.triggers.Add(entry1); //イベントトリガーのトリガーイベント作成 EventTrigger.Entry entry2 = new EventTrigger.Entry(); entry2.eventID = EventTriggerType.PointerExit; entry2.callback.AddListener((x) => OnMouseExitOwnMade()); currentTrigger.triggers.Add(entry2); } //テキスト表示 make3Dtext(); //クリエイト元を親にする transform.parent = createSorce.gameObject.transform; //親の余計なスクリプトの削除フラグを立てる createSorce.IsReadyToDestroy(true); }
private void Awake() { createSorce = GameObject.Find("central").GetComponent <createTrapezoidPole>(); systemScript = GameObject.Find("central").GetComponent <centralSystem>(); }
void Start() { //stage情報初期化 stage = variables.stage; //法線初期化 normalVector = new Vector3[variables.trapezoidDivisionNum + 1, 6]; normalBasicVec = new Vector3[variables.trapezoidDivisionNum + 1, 6]; if (myParent == null) { createSorce = GameObject.Find("central").GetComponent <createTrapezoidPole>(); //現在のTextSetの段数を取得 poleSum = variables.poleSum; } else { createSorce = myParent.GetComponent <createTrapezoidPole>(); //自分の親の名前から該当TextSetの行からアイテム数を取得 //Debug.Log(myParent.name.Substring(9)); poleSum = GameObject.Find("central").GetComponent <centralSystem>().GetTextSetItemNum(int.Parse(myParent.name.Substring(9))); } systemScript = GameObject.Find("central").GetComponent <centralSystem>(); //自分の番号を名前から取得し初期化 poleNum = int.Parse(transform.name) - 1; //LineVertex初期化 最初の面4頂点+中間面4頂点+最後の面4頂点 LineVertex = new Vector3[4 + variables.trapezoidDivisionNum * 4 + 4]; //格納先も初期化 lineVertecies = new Vector3[8 + 4 * variables.trapezoidDivisionNum + 8]; // CombineMeshes()する時に使う配列 始端と終端も含めるので+3 CombineInstance[] combineInstanceAry = new CombineInstance[variables.trapezoidDivisionNum + 3]; //メッシュ作成 for (DivisionNum = 0; DivisionNum <= variables.trapezoidDivisionNum; DivisionNum++) { //頂点計算 CalcVertices(); if (DivisionNum == 0) { //最初の一枚だけ別計算 //メッシュ作成 Mesh meshFirst = new Mesh(); //メッシュリセット meshFirst.Clear(); //メッシュへの頂点情報の追加 meshFirst.vertices = StartVertex; //メッシュへの面情報の追加 meshFirst.triangles = EndFace; // 合成するMesh(同じMeshを円形に並べたMesh) combineInstanceAry[0].mesh = meshFirst; combineInstanceAry[0].transform = Matrix4x4.Translate(transform.position); } Mesh mesh = new Mesh(); //メッシュリセット mesh.Clear(); //メッシュへの頂点情報の追加 mesh.vertices = SideVertex; //メッシュへの面情報の追加 mesh.triangles = SideFace; //合成するMesh(同じMeshを円形に並べたMesh) combineInstanceAry[DivisionNum + 1].mesh = mesh; combineInstanceAry[DivisionNum + 1].transform = Matrix4x4.Translate(transform.position); if (DivisionNum == variables.trapezoidDivisionNum) { //最後の一枚だけ別計算 //メッシュ作成 Mesh meshLast = new Mesh(); //メッシュリセット meshLast.Clear(); //メッシュへの頂点情報の追加 meshLast.vertices = EndVertex; //メッシュへの面情報の追加 meshLast.triangles = EndFace; // 合成するMesh(同じMeshを円形に並べたMesh) combineInstanceAry[DivisionNum + 2].mesh = meshLast; combineInstanceAry[DivisionNum + 2].transform = Matrix4x4.Translate(transform.position); } } //合成した(する)メッシュ Mesh combinedMesh = new Mesh(); combinedMesh.name = transform.name; combinedMesh.CombineMeshes(combineInstanceAry); //内向き法線の計算 culcNormal(combinedMesh.vertices); //メッシュフィルター追加 MeshFilter mesh_filter = new MeshFilter(); mesh_filter = this.gameObject.AddComponent <MeshFilter>(); //メッシュアタッチ mesh_filter.mesh = combinedMesh; //レンダラー追加 + マテリアルアタッチ meshRenderer = this.gameObject.AddComponent <MeshRenderer>(); meshRenderer.material = variables.material_TrapezoidPole_Normal; //コライダーアタッチ meshCollider = this.gameObject.AddComponent <MeshCollider>(); meshCollider.sharedMesh = mesh_filter.mesh; meshCollider.convex = true; meshCollider.isTrigger = true; //NormalMapの再計算 mesh_filter.mesh.RecalculateNormals(); //XRじゃないなら if (!variables.isOnXR) { //暫定当たり判定用Event Trigger //イベントトリガーのアタッチと初期化 EventTrigger currentTrigger = this.gameObject.AddComponent <EventTrigger>(); currentTrigger.triggers = new List <EventTrigger.Entry>(); //侵入イベント用 //侵入時に色を変える //イベントトリガーのトリガーイベント作成 EventTrigger.Entry entry1 = new EventTrigger.Entry(); entry1.eventID = EventTriggerType.PointerEnter; entry1.callback.AddListener((x) => OnMouseEnterOwnMade()); //ラムダ式の右側は追加するメソッド //トリガーイベントのアタッチ currentTrigger.triggers.Add(entry1); //侵入終了時に色を戻す EventTrigger.Entry entry2 = new EventTrigger.Entry(); entry2.eventID = EventTriggerType.PointerExit; entry2.callback.AddListener((x) => OnMouseExitOwnMade()); currentTrigger.triggers.Add(entry2); } //テキスト表示 make3Dtext(); //縁取り lineRenderer = this.gameObject.AddComponent <LineRenderer>(); //ローカルで描画 lineRenderer.useWorldSpace = false; //頂点数 lineRenderer.positionCount = lineVertecies.Length; //幅 lineRenderer.startWidth = variables.lineRendererWidth; //順番の格納 SetLineVertecies(); lineRenderer.SetPositions(lineVertecies); //線の折れる部分の丸み具合 lineRenderer.numCornerVertices = 20; //線の端の丸み具合 lineRenderer.numCapVertices = 20; //線の色 lineRenderer.material = variables.material_LineRenderer; //影を発生させない lineRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; //影の影響を受けない lineRenderer.receiveShadows = false; //クリエイト元を親にする transform.parent = createSorce.gameObject.transform; }