您的位置:首页 > 移动开发 > Unity3D

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

2017-04-11 17:33 309 查看
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,1
4000
7,
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d
相关文章推荐