Unity常用的基本功能單元實踐統整_移動旋轉_時間紀錄_遊戲物件元件存取_存取其他遊戲物件
首先場景準備好
簡單又乾淨的 單純一個地面 及 一個Cube
建立四份C#腳本
各自類別名稱(檔案名)
================================================================
TranslateScript
RotateScript
TimeRecordRotate
TimeRecordTranslate
================================================================
觀察
TranslateScript
功能單元. Translate
Tips: 預設是根據 每一個頁面更新1單位效果(每頁1單位--->超快一下子就超出畫面)
Tips:太快可用
this.transform.Translate (0,0,0.001f);//沿著Z軸移動一個單位長
觀察
TimeRecordTranslate
是根據 每一秒更新1單位效果(會有固定節奏運動較易控制)
--->不使用 遊戲畫面撥放速率
觀察
RotateScript
功能單元. Rotate
觀察
TimeRecordRotate
Tips: 在Unity 中
移動和旋轉 方法其實預設有第四個參數的多載寫法
為選擇隸屬之空間種類
Space 列舉型態共可
預設(未設定)為 Space.Self 相對於本身軸去做旋轉移動
Space.World 相對於世界座標系統做旋轉移動
遊戲物件元件存取
元件名稱(屬性檢視器顯示) 變數名稱(指令腳本稿上)
Transform transform
Render renderer
Light light
Collider collider
Rigidbody rigidbody
Camera camera
Animation animation
========================================================
Unity中我們可以透過
GetComponent 方法獲得
遊戲物件上的所自帶的屬性參數都可在
屬性檢視器中檢視
我們用 此方法取得 Cube遊戲物件中的 Transform元件
並執行當中的Method Translate()
相同的概念我們也可以透過
GetComponent方法去獲得程式腳本檔案元件喔!!!!!
附加在遊戲物件上的任何東西 都可算是 一個元件(Component)
假設我們寫好了一個腳本叫做
HelloUnity的檔案
裡面有 SayHello方法
我們要在NewBehavior 程式腳本檔案中去調用
那就必須注意在該方法前加入 public 存取修飾子
不然其他類別中視無法呼叫到的
緊接著通通都拉至對應的遊戲物件上後
就能呼叫了
存取其他遊戲物件
抓取父親物件底下的兒子物件
於程式中可以透過 Transform 元件去找到
比方說我目前場景有
一個頭的父物件
兩隻手的子物件
這裡就會遇到
如何得知物件層級間關係
我們想讓這個機器人的手臂可以旋轉(舉手)
那目前你會覺得軸心怪怪的
是自我的中心點來整體旋轉
若我們要模擬舉手
可能就需要特別在幫他
去做定義新的Empty物件來
當作手臂的肩膀軸心座標位置的參考
這邊要小心
在外部跟在內部當子物件時候的座標位置
是不一樣的!!!!
在外部
是以 世界座標位置 來做為旋轉軸心位置的!!!!
X:-0.61
Y:3.52
Z:1.727
在內部
是以 相對於父物件座標位置 來做為旋轉軸心位置的!!!!
X:-0.137
Y:0.385
Z:-0.203
當我們知道此位置的正確座標位置後
可使用Unity 另一個旋轉方法
第1參數:圍繞point該點位置去做旋轉(以哪個點位置作為旋轉點)
第2參數:沿著哪個軸方向做旋轉
第3參數:旋轉度數
換言之,就是按照多少度在世界坐標的某位置軸旋轉物體。
效果
程式碼
這裡如果不想乖乖打 那個繁瑣的點座標
那可以透過
GameObject.Find("物件名").XXX
去指定特定物件下的屬性 做修改
以上是這次簡單的介紹
簡單又乾淨的 單純一個地面 及 一個Cube
建立四份C#腳本
各自類別名稱(檔案名)
================================================================
TranslateScript
RotateScript
TimeRecordRotate
TimeRecordTranslate
================================================================
觀察
TranslateScript
功能單元. Translate
Tips: 預設是根據 每一個頁面更新1單位效果(每頁1單位--->超快一下子就超出畫面)
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; using System.Collections; public class TranslateScript : MonoBehaviour { // Update is called once per frame void Update () { this.transform.Translate (0,0,1);//沿著Z軸移動一個單位長 } } |
Tips:太快可用
this.transform.Translate (0,0,0.001f);//沿著Z軸移動一個單位長
觀察
TimeRecordTranslate
是根據 每一秒更新1單位效果(會有固定節奏運動較易控制)
--->不使用 遊戲畫面撥放速率
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; using System.Collections; public class TimeRecordTranslate : MonoBehaviour { // Update is called once per frame void Update () { this.transform.Translate (0,0,1*Time.deltaTime); } } |
觀察
RotateScript
功能單元. Rotate
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; using System.Collections; public class RotateScript : MonoBehaviour { // Update is called once per frame void Update () { this.transform.Rotate (20,0,0);//繞X軸旋轉20度 } } |
觀察
TimeRecordRotate
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; using System.Collections; public class TimeRecordRotate : MonoBehaviour { // Update is called once per frame void Update () { this.transform.Rotate (10*Time.deltaTime , 0,0);//繞X軸均勻轉 } } |
Tips: 在Unity 中
移動和旋轉 方法其實預設有第四個參數的多載寫法
為選擇隸屬之空間種類
Space 列舉型態共可
預設(未設定)為 Space.Self 相對於本身軸去做旋轉移動
Space.World 相對於世界座標系統做旋轉移動
遊戲物件元件存取
元件名稱(屬性檢視器顯示) 變數名稱(指令腳本稿上)
Transform transform
Render renderer
Light light
Collider collider
Rigidbody rigidbody
Camera camera
Animation animation
========================================================
Unity中我們可以透過
GetComponent 方法獲得
遊戲物件上的所自帶的屬性參數都可在
屬性檢視器中檢視
我們用 此方法取得 Cube遊戲物件中的 Transform元件
並執行當中的Method Translate()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | using UnityEngine; using System.Collections; public class NewBehavior : MonoBehaviour { // Update is called once per frame void Update () { //沿著X軸一個單位長 //寫法1 //transform.Translate (1,0,0); //寫法2 GetComponent<Transform> ().Translate (1, 0, 0); } } |
相同的概念我們也可以透過
GetComponent方法去獲得程式腳本檔案元件喔!!!!!
附加在遊戲物件上的任何東西 都可算是 一個元件(Component)
假設我們寫好了一個腳本叫做
HelloUnity的檔案
裡面有 SayHello方法
我們要在NewBehavior 程式腳本檔案中去調用
那就必須注意在該方法前加入 public 存取修飾子
不然其他類別中視無法呼叫到的
緊接著通通都拉至對應的遊戲物件上後
就能呼叫了
存取其他遊戲物件
於程式中可以透過 Transform 元件去找到
比方說我目前場景有
一個頭的父物件
兩隻手的子物件
這裡就會遇到
如何得知物件層級間關係
我們想讓這個機器人的手臂可以旋轉(舉手)
那目前你會覺得軸心怪怪的
是自我的中心點來整體旋轉
若我們要模擬舉手
可能就需要特別在幫他
去做定義新的Empty物件來
當作手臂的肩膀軸心座標位置的參考
這邊要小心
在外部跟在內部當子物件時候的座標位置
是不一樣的!!!!
在外部
是以 世界座標位置 來做為旋轉軸心位置的!!!!
X:-0.61
Y:3.52
Z:1.727
在內部
是以 相對於父物件座標位置 來做為旋轉軸心位置的!!!!
X:-0.137
Y:0.385
Z:-0.203
當我們知道此位置的正確座標位置後
可使用Unity 另一個旋轉方法
第1參數:圍繞point該點位置去做旋轉(以哪個點位置作為旋轉點)
第2參數:沿著哪個軸方向做旋轉
第3參數:旋轉度數
換言之,就是按照多少度在世界坐標的某位置軸旋轉物體。
效果
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using UnityEngine; using System.Collections; public class NewBehavior : MonoBehaviour { // Update is called once per frame void Update () { //transform.Find("HandL").Rotate(0,0,20*Time.deltaTime); //test1. 父物件Head會跟著一起旋轉 transform.RotateAround (GameObject.Find("ShoulderBearing").transform.position , new Vector3(0,0,1), 20*Time.deltaTime ); //test2. //transform.RotateAround (GameObject.Find("ShoulderBearingChild").transform.position , // new Vector3(0,0,1), // 20*Time.deltaTime ); } //HelloUnity helloUnity = GetComponent<HelloUnity> (); //helloUnity.SayHello (); //沿著X軸一個單位長 //寫法1 //transform.Translate (1,0,0); //寫法2 //GetComponent<Transform> ().Translate (1, 0, 0); } |
這裡如果不想乖乖打 那個繁瑣的點座標
那可以透過
GameObject.Find("物件名").XXX
去指定特定物件下的屬性 做修改
以上是這次簡單的介紹
留言
張貼留言