• 自定义网格面片(省的去三维软件创建)


    //EDITOR CLASS TO CREATE QUAD MESH WITH SPECIFIED ANCHOR
    //Created by Alan Thorn on 23.01.2013
    //------------------------------------------------
    using UnityEngine;
    using UnityEditor;
    using System.IO;
    //------------------------------------------------
    //Run from unity editor. This class should be placed in Editor folder
    public class CreateQuad : ScriptableWizard
    {
        //Anchor point for created quad
        public enum AnchorPoint
        {
            TopLeft,
            TopMiddle,
            TopRight,
            RightMiddle,
            BottomRight,
            BottomMiddle,
            BottomLeft,
            LeftMiddle,
            Center,
            Custom
        }
        
        //Name of Quad Asset
        public string MeshName = "Quad";
        
        //Game Object Name
        public string GameObjectName = "Plane_Object";
        
        //Name of asset folder to contain quad asset when created
        public string AssetFolder = "Assets";
        
        //Width of quad in world units (pixels)
        public float Width = 1.0f;
        
        //Height of quad in world units (pixels)
        public float Height = 1.0f;
        
        //Position of Anchor
        public AnchorPoint Anchor = AnchorPoint.Center;
        
        //Horz Position of Anchor on Plane
        public float AnchorX = 0.5f;
        
        //Vert Position of Anchor on Plane
        public float AnchorY = 0.5f;
        //------------------------------------------------
        [MenuItem("GameObject/Create Other/Custom Plane")]
        static void CreateWizard()
        {
            ScriptableWizard.DisplayWizard("Create Plane",typeof(CreateQuad));
        }
        
        //------------------------------------------------
        //Function called when window is created
        void OnEnable()
        {
            //Call selection change to load asset path from selected, if any
            OnSelectionChange();
        }
        //------------------------------------------------
        //Called 10 times per second
        void OnInspectorUpdate()
        {
            switch(Anchor)
            {
                //Anchor is set to top-left
                case AnchorPoint.TopLeft:
                    AnchorX = 0.0f * Width;
                    AnchorY = 1.0f * Height;
                break;
                
                //Anchor is set to top-middle
                case AnchorPoint.TopMiddle:
                    AnchorX = 0.5f * Width;
                    AnchorY = 1.0f * Height;
                break;
                
                //Anchor is set to top-right
                case AnchorPoint.TopRight:
                    AnchorX = 1.0f * Width;
                    AnchorY = 1.0f * Height;
                break;
                
                //Anchor is set to right-middle
                case AnchorPoint.RightMiddle:
                    AnchorX = 1.0f * Width;
                    AnchorY = 0.5f * Height;
                break;
                
                //Anchor is set to Bottom-Right
                case AnchorPoint.BottomRight:
                    AnchorX = 1.0f * Width;
                    AnchorY = 0.0f * Height;
                break;
                
                //Anchor is set to Bottom-Middle
                case AnchorPoint.BottomMiddle:
                    AnchorX = 0.5f * Width;
                    AnchorY = 0.0f * Height;
                break;
                
                //Anchor is set to Bottom-Left
                case AnchorPoint.BottomLeft:
                    AnchorX = 0.0f * Width;
                    AnchorY = 0.0f * Height;
                break;
                
                //Anchor is set to Left-Middle
                case AnchorPoint.LeftMiddle:
                    AnchorX = 0.0f * Width;
                    AnchorY = 0.5f * Height;
                break;
                
                //Anchor is set to center
                case AnchorPoint.Center:
                    AnchorX = 0.5f * Width;
                    AnchorY = 0.5f * Height;
                break;
                
                case AnchorPoint.Custom:
                default:
                break;
            }
        }
        //------------------------------------------------
        //Function called when window is updated
        void OnSelectionChange()
        {
            //Check user selection in editor - check for folder selection
            if (Selection.objects != null && Selection.objects.Length == 1)
            {
                //Get path from selected asset
                AssetFolder = Path.GetDirectoryName(AssetDatabase.GetAssetPath(Selection.objects[0]));
            }
        }
        //------------------------------------------------
        //Function to create quad mesh
        void OnWizardCreate()
        {        
            //Create Vertices
            Vector3[] Vertices = new Vector3[4];
            
            //Create UVs
            Vector2[] UVs = new Vector2[4];
            
            //Two triangles of quad
            int[] Triangles = new int[6];
            
            //Assign vertices based on pivot
            
            //Bottom-left
            Vertices[0].x = -AnchorX;
            Vertices[0].y = -AnchorY;
            
            //Bottom-right
            Vertices[1].x = Vertices[0].x+Width;
            Vertices[1].y = Vertices[0].y;
                
            //Top-left
            Vertices[2].x = Vertices[0].x;
            Vertices[2].y = Vertices[0].y+Height;
            
            //Top-right
            Vertices[3].x = Vertices[0].x+Width;
            Vertices[3].y = Vertices[0].y+Height;
            
            //Assign UVs
            //Bottom-left
            UVs[0].x=0.0f;
            UVs[0].y=0.0f;
            
            //Bottom-right
            UVs[1].x=1.0f;
            UVs[1].y=0.0f;
            
            //Top-left
            UVs[2].x=0.0f;
            UVs[2].y=1.0f;
            
            //Top-right
            UVs[3].x=1.0f;
            UVs[3].y=1.0f;
            
            //Assign triangles
            Triangles[0]=3;
            Triangles[1]=1;
            Triangles[2]=2;
            
            Triangles[3]=2;
            Triangles[4]=1;
            Triangles[5]=0;
            
            //Generate mesh
            Mesh mesh = new Mesh();
            mesh.name = MeshName;
            mesh.vertices = Vertices;
            mesh.uv = UVs;
            mesh.triangles = Triangles;
            mesh.RecalculateNormals();
            
            //Create asset in database
            AssetDatabase.CreateAsset(mesh, AssetDatabase.GenerateUniqueAssetPath(AssetFolder + "/" + MeshName) + ".asset");
            AssetDatabase.SaveAssets();
            
            //Create plane game object
            GameObject plane = new GameObject(GameObjectName);
            MeshFilter meshFilter = (MeshFilter)plane.AddComponent(typeof(MeshFilter));
            plane.AddComponent(typeof(MeshRenderer));
            
            //Assign mesh to mesh filter
            meshFilter.sharedMesh = mesh;
            mesh.RecalculateBounds();
            
            //Add a box collider component
            plane.AddComponent(typeof(BoxCollider));
        }
        
        //------------------------------------------------
    }
  • 相关阅读:
    最常用和最难用的控件--ListView(Android第一行代码)
    LayoutInflater的使用
    JAVA的网络编程【转】
    Android 程序调试
    android Log日志使用
    Android Animation
    实现ImageView宽度填满屏幕
    Android ViewPager使用详解
    对另一个布局文件里的Button按钮进行监听
    如何在一个Activity里使用另一个xml布局文件
  • 原文地址:https://www.cnblogs.com/123ing/p/4039065.html
Copyright © 2020-2023  润新知