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.