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

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值