注意看代碼的注釋塊
如何獲得其它物件的 Transform
我們先按下述代碼用 Transform 方法創(chuàng)建一個(gè) emptyTform ,使得該對(duì)象能夠獲得其他物件 Transform 的機(jī)會(huì)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EP20_01_Transform : MonoBehaviour
{
public Transform emptyTform;//emptyTform為自命名
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
保存代碼后,再將想要獲取 Transform 值的物件直接拖拽到這里
我們嘗試通過(guò) Transform 獲取一下這個(gè)對(duì)象的名字,在 start 里加上語(yǔ)句
void Start()
{
Debug.Log(emptyTform.name);
}
保存后去啟動(dòng)unity,成功打?。?br>
同理我們?cè)僭?start 里加上語(yǔ)句
Debug.Log(emptyTform.position);
保存后調(diào)用,也成功地調(diào)用出了這個(gè)對(duì)象的位置
關(guān)于第二個(gè)旋轉(zhuǎn)角度 rotation 我們有兩種常見(jiàn)的表示方法,同樣將這兩句代碼按順序?qū)懭?start
Debug.Log(emptyTform.rotation);//表示旋轉(zhuǎn)角度 - 4位數(shù)
Debug.Log(emptyTform.eulerAngles);//表示旋轉(zhuǎn)角度 - 3位數(shù)
然后縮放 scale 的輸出同理,僅一種,不演示了
Debug.Log(emptyTform.localScale);//表示縮放
通過(guò) Transform 調(diào)用子類(lèi)
child拼太快,都錯(cuò)了,諒解…
關(guān)于子類(lèi)物體的 Transform 調(diào)用,就不需要將其拖進(jìn)該對(duì)象 Transform 方法中
這里在 start 語(yǔ)句中寫(xiě)入語(yǔ)句,嘗試調(diào)用子類(lèi)的名字
Debug.Log(transform.GetChild(0).name);//0表示索引,即子類(lèi)的第n-1個(gè)//這里調(diào)用一下子類(lèi)的名字
成功,同理 GetChild(索引) 的方法同樣適用于其他子類(lèi)對(duì)象的調(diào)用
調(diào)用子類(lèi)還有第二種方法,在 start 語(yǔ)句中寫(xiě)入語(yǔ)句(ctrl + D 復(fù)制)
Debug.Log(transform.Find("chlid (3)").name);//第二種找子類(lèi)的方法
這里需要注意的是字符串的查找十分嚴(yán)格,必須與子類(lèi)對(duì)象名一模一樣才能查找到,否則報(bào)錯(cuò)
保存后調(diào)試,成功
不僅如此,我們還可以通過(guò)子對(duì)象去調(diào)用父類(lèi)對(duì)象
Debug.Log(transform.Find("chlid (3)").parent);//找父類(lèi)對(duì)象
注意點(diǎn)跟上面一樣,不過(guò)多贅述
補(bǔ)充一點(diǎn): Transform 還可以調(diào)用對(duì)象的組件,而且可以進(jìn)行更改
我們?cè)?chlid (2) 里創(chuàng)建上 新組件 SpriteRenderer
通過(guò)語(yǔ)句
transform.Find("chlid (2)").GetComponent<SpriteRenderer>().flipY = true;
成功
通過(guò) V3 結(jié)構(gòu)體改變對(duì)象位置
相當(dāng)于自定義一個(gè)向量,比如下面的代碼,我們將鼠標(biāo)放在 Vector3 上點(diǎn)擊 F12 可以轉(zhuǎn)到反匯編,發(fā)現(xiàn) Vector3 是有三個(gè)值,分別賦值
Vector3 vector3 = new Vector3();
vector3.x = 1;
vector3.y = 2;
vector3.z = 3;
Debug.Log(vector3);
成功打印出來(lái)我們自定義的向量值
但是這種自定義一個(gè)變量的方法肯定是無(wú)用的,但是我們可以通過(guò)向量來(lái)改變這個(gè)對(duì)象的位置
Debug.Log(transform.position);//打印原先對(duì)象的位置
transform.position = new Vector3(0,0,0);
Debug.Log(transform.position);//打印改變后的位置
為了使這種變化更直觀,我們?cè)诖a的開(kāi)頭為這個(gè)對(duì)象 EP20_01_Transform 創(chuàng)建一個(gè)新的 Transform
public Transform cubeTform;
建立一個(gè)新對(duì)象 cube 拖拽進(jìn) EP20_01_Transform 的新的 Transform 中
并在 Update 中加入如下代碼
cubeTform.position = cubeTform.position + new Vector3(0,0,0.1f);
//每一幀這個(gè)對(duì)象的z坐標(biāo)加1(向后)
//等價(jià)于 cubeTform.position += new Vector3(0,0,0.1);
Debug.Log(cubeTform.position);//打印每幀改變后的位置
因?yàn)檫\(yùn)動(dòng)不方便以靜圖的形式表示,所以這里我們打印每一幀的位置,如果你有一同操作,也能夠發(fā)現(xiàn)這里的立方體以肉眼可見(jiàn)的速度迅速向后退去
如果你覺(jué)得運(yùn)行速度太快,不想以幀為單位,換為秒的話(huà),只需要在V3結(jié)構(gòu)體后乘上 Time.deltaTime
cubeTform.position = cubeTform.position + new Vector3(0, 0, 0.1f) * Time.deltaTime;
//每一秒這個(gè)對(duì)象的z坐標(biāo)加1(向后)
這是改變位置,同理我們可以通過(guò)V3結(jié)構(gòu)體對(duì)對(duì)象進(jìn)行角度的變化或者縮放文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-853038.html
cubeTform.eulerAngles += new Vector3(0, 90, 0) * Time.deltaTime;//變換角度
cubeTform.localScale += new Vector3(1f, 0, 0) * Time.deltaTime;//縮放
這串代碼寫(xiě)入后,這個(gè)立方體會(huì)不斷一邊旋轉(zhuǎn)一邊縮放文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-853038.html
到了這里,關(guān)于【unity】【C#】變換組件 Transform 和 V3結(jié)構(gòu)體的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!