Unity常用的基本功能單元實踐統整_移動旋轉_時間紀錄_遊戲物件元件存取_存取其他遊戲物件

首先場景準備好
簡單乾淨的 單純一個地面 及 一個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

去指定特定物件下的屬性  做修改


以上是這次簡單的介紹






留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題