Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
 private void Awake()
 {
     createSorce  = GameObject.Find("central").GetComponent <createTrapezoidPole>();
     systemScript = GameObject.Find("central").GetComponent <centralSystem>();
 }
Exemplo n.º 3
0
    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;
    }