Unity3D和Flash一樣,甚至可以說是和C#一樣,拖完元件,再寫一系列的腳本,完成程式設計,甚至可以說,就是帶程式設計腳本的3DSMAX。那麼如何完成最基本的物體、材質的設定、物體位移與旋轉呢?下面用一個簡單的Unity3D說明這個問題,如下圖所示:

在一個面闆上面有一個可以控制的立方體與不可以控制的球體和立方體各2個,然後可以控制立方體的位移與旋轉。概念的東西就不寫了,具體步驟如下。
一、場景設定
1、如下圖所示,在GameObject裡面,選擇需要的東西,在場景一拖就可以建立相應的物體了。
除了預設自帶的錄影機和光源,我們要設定3個立方體,2個球,1個地面。
在設定的時候,還可以像畫圖、Flash、C#那樣用CTRL+C、CTRL+V複制、粘貼物體。
2、之後,點選任意一個物體,再右邊的Inspector就可以設定相應的屬性。這和C#設定控件的基本控件,和Flash設定資源的屬性不就是同一個意思嗎?
不過由于在3D界面不像2D那樣好控制元件的位置,基本上我們是需要在Inspector界面的Transform項,直接輸入坐标控制物體的位置。
如下圖所示(在沒有設定材質之前,這些東西應該都是白色的),預設情況下,Y是上下方向,XZ是平面的縱橫,這就是公認的三維笛卡兒坐标系設定,沒什麼好說的。
各個元件的坐标Position,旋轉Rotation和縮放Scale如下圖所示。Position指坐标,物體中心點所處的位置,是以如果物體要放在Plane上面,則要處于Y軸0.5的位置,Rotation指的是物體繞哪一軸旋轉的角度,Scale則是機關物體的XYZ軸半徑沿此軸拓寬的多少。
理論上,剛才GameObject中所有機關的立體靠各種坐标偏移,角度偏移與形變能表示三維世界的所有東西,就像二維世界的所有東西,是由點、直線、曲線所組成。
3、物體設定好之後,我們則要給各個物體上色,也就是給各個物體貼上材質。這裡不要有windows自帶顔色版的慣性思維,“顔色”也就是材質,不是說有就有,直接能在Inspector中設定的,是需要我們自己建立的,具體如下:
以上隻是設定簡單的純色材質。材質的設定在3D領域同樣是一種學問,就像如何用HTML+CSS的顔色配搭弄好一個網頁一樣。
這裡設定材質,隻是基本的入門,未來這個方面肯定可以深究一番。
現在遊戲美工缺,高收入也就是因為如此,材質可以說是2D美工的3D版。
言歸正傳,如圖設定黑色材質給予地闆,藍色材質給予預設為不能動的實體,紅色材質設定給我們中間的主角。
4、至此,場景終于布置完畢,如下圖所示,選擇各個物體(2個球體、3個立方體),【Component】->【Physics】->【Rigidbody】,将所有物體設定為剛體,用于真實的實體碰撞之後,則可以進行腳本的編寫。
二、腳本編寫
顯然按鈕是通過腳本建立的。
如何建立腳本在《【Unity3D】Helloworld》(點選打開連結)說過了,這裡就不再贅述了。
給予如下的腳本給中間的紅色立方體。
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;//重新開始遊戲,切換場景SceneManager.LoadScene("Scene1");需要。
using UnityEngine;
public class script : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//初始化變換方法。
public Transform transform;
void Awake()
{
transform = this.GetComponent<Transform>();
}
float moveSpeed = 20;//物體移動速度
void OnGUI()//OnGUI用于畫面繪制
{
//這裡的rect就是指在左上角坐标(10,10)這個100x30像素的區域位置。
if (GUI.Button(new Rect(10, 10, 100, 30), "向左旋轉30度"))//GUI.Button用于建立按鈕
{
transform.Rotate(-Vector3.up * 30);//30就是指30度
}
if (GUI.Button(new Rect(110, 10, 100, 30), "向右旋轉30度"))
{
transform.Rotate(Vector3.up * 30);
}
if (GUI.Button(new Rect(210, 10, 100, 30), "重新開始"))
{
SceneManager.LoadScene("Scene1");//Application下的方法已經被辨別過期
}
if (GUI.Button(new Rect(10, 50, 100, 30), "向上移動"))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (GUI.Button(new Rect(110, 50, 100, 30), "向下移動"))
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);//Time.deltaTime指一幀時間,這樣據說可以平滑視覺差
}
if (GUI.Button(new Rect(210, 50, 100, 30), "向左移動"))
{
transform.Translate(-Vector3.right * moveSpeed * Time.deltaTime);
}
if (GUI.Button(new Rect(310, 50, 100, 30), "向右移動"))
{
transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
}
GUI.Label(new Rect(10, 100, 400, 30), "模型位置" + transform.position);//transform.position可以擷取模型位置
}
}
具體請看注釋。
Unity3D裡面沒有向後移動和像左移動,統一用負的.forward和負的.right實作。
Vector3直接可以使用,無須初始化,一般是指給賦予腳本的對象。
SceneManager.LoadScene("Scene1");在Unity3D内部調試時候,燈光會因場景重置變暗,但釋出成exe之後不會有這樣的問題。