[Record] Draw a Cube with Unity3D via Creat an object,get Mesh,set Mesh and Render Mesh

来源:互联网 发布:秋水南风 捏脸数据成男 编辑:程序博客网 时间:2024/06/17 14:54

Tools: Unity3D (5.5),VS2015, C#
Test environment: Hololens (UWP)
Some code come from WEB,Thanks for the beginner!

//code in Draw,script for camera:using UnityEngine;using System.Collections;[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]public class Test3D : MonoBehaviour{    public GameObject mMesh;    // Use this for initialization    void Start()    {      RenderMesh();    }       public void RenderMesh()    {        /*Gameobject->Mesh->Material->Texture->Render->rotate*/        GameObject m_mesh = new GameObject();        m_mesh.name = "createMesh_TEST";        Mesh me = m_mesh.AddComponent<MeshFilter>().mesh;       Material material = new Material(Shader.Find("Diffuse"));        material.color = Color.gray  ;     m_mesh.AddComponent<MeshRenderer>().material = material;     m_mesh.GetComponent<MeshRenderer>().material.mainTexture = (Texture)Resources.Load("background");        me.Clear();        me.vertices = new Vector3[]        {            new Vector3(0, 0, 0),            new Vector3(0, 0, 1),            new Vector3(1, 0, 1),            new Vector3(1, 0, 0),            //top            new Vector3(0, 0, 1),            new Vector3(0, 1, 1),            new Vector3(1, 1, 1),            new Vector3(1, 0, 1),            //back            new Vector3(0, 1, 1),            new Vector3(0, 1, 0),            new Vector3(1, 1, 0),            new Vector3(1, 1, 1),            //bottom            new Vector3(0, 1, 0),            new Vector3(0, 0, 0),            new Vector3(1, 0, 0),            new Vector3(1, 1, 0),            //left            new Vector3(0, 1, 0),            new Vector3(0, 1, 1),            new Vector3(0, 0, 1),            new Vector3(0, 0, 0),            //right            new Vector3(1, 0, 0),            new Vector3(1, 0, 1),            new Vector3(1, 1, 1),            new Vector3(1, 1, 0),         };        Vector3[] normals = new Vector3[me.vertices.Length];        for (int i = 0; i < normals.Length; i++)        {            if (i < 4)                normals[i] = Vector3.forward;            if (i >= 4 && i < 8)                normals[i] = Vector3.up;            if (i >= 8 && i < 12)                normals[i] = Vector3.back;            if (i >= 12 && i < 16)                normals[i] = Vector3.down;            if (i >= 16 && i < 20)                normals[i] = Vector3.left;            if (i >= 20 && i < 24)                normals[i] = Vector3.right;        }        me.normals = normals;        //triangles is important        me.triangles = new int[]        {             0,2,1,              0,3,2,              4,6,5,              4,7,6,              8,10,9,              8,11,10,              12,14,13,              12,15,14,              16,18,17,              16,19,18,              20,22,21,              20,23,22        };        Vector2[] uvs = new Vector2[me.vertices.Length];        for (int i = 0; i < uvs.Length; i += 4)        {            uvs[i] = new Vector2(0, 0);            uvs[i + 1] = new Vector2(0, 1);            uvs[i + 2] = new Vector2(1, 1);            uvs[i + 3] = new Vector2(1, 0);         }         me.uv = uvs;        me.RecalculateBounds();        me.RecalculateNormals();        m_mesh.AddComponent<rotate >();        GameObject.Find("createMesh_JQM").SendMessage("scale");    }    void Update()    {        GameObject.Find("createMesh_TEST").SendMessage("rotater");    }}//Code in rotate ,for nothing using System.Collections;using System.Collections.Generic;using UnityEngine;public class rotate : MonoBehaviour {    // Use this for initialization    void Start () {        GetComponent<Rigidbody>();    }    // Update is called once per frame    void Update () {        }    public void rotater()    {        transform.Rotate(Vector3.right * Time.deltaTime*10f);    }    public void scale()    {        transform.localScale = new Vector3(0.5f,0.5f,0.5f);    }}

Tips:
1.Creat an object,get mesh,set mesh,render mesh and move it!
That is a very important path for custom model which beyond .OBJ,.FBX,.Unity ,ect;
and there is also a shortcut for the path Drawmesh:Graphics(for Unity Pro only).

2.Draw a triangle in unclockwise! Otherwise you will see through into the cube; and get wrong texture fixed.

3.Use Asset.Resources.Load(“”) to get your picture which used for texture and convert to class Texture like :
(Texture)Resources.Load(“background”);

4.If you have a model,you would get the Vertexs,triangels,normals,UV,UV2,and textures; first two are important!

5.I think I can give every gameobject I draw a script to control it,like this:
m_mesh.AddComponent< rotate >();
GameObject.Find(“createMesh_JQM”).SendMessage(“scale”);

That`s all.

0 0