學(xué)習(xí)Unity(1)基本概念和操作

對象與資源的區(qū)別與聯(lián)系

資源(asset)就是可以在我們的項目中使用的文件亦渗,包括圖像、視頻汁尺、腳本文件法精、預(yù)制文件等,它們的存在不依賴于Unity痴突。

ProjectWindow中顯示Asset

資源通過文件夾的形式來組織搂蜓,資源會按照文件類型分類放到不同的文件夾。

對象(Object)是Unity創(chuàng)建的實例辽装,你可以在inspector窗口中調(diào)整它們的屬性帮碰。其中游戲?qū)ο螅℅ameObject),出現(xiàn)在場景中的所有物體都是GameObject拾积,GameObject按照一定的層次結(jié)構(gòu)組織起來殉挽,顯示在Hierarchy窗口中。

Hierarchy存放GameObject

對象通過層次結(jié)構(gòu)來組織拓巧,通過整體-部分的關(guān)系構(gòu)成層次結(jié)構(gòu)此再。

Asset與Object的聯(lián)系:
對象可以通過資源來保存起來,資源可以用來創(chuàng)建對象實例玲销,一個資源可以創(chuàng)建多個對象。


MonoBehaviour

MonoBehaviour是每一個腳本對象的基類摘符,它有一些方法可以覆蓋贤斜,這些方法會在運行的特定時間被調(diào)用,我們通過在這些方法中打印一句話來看看它們的執(zhí)行順序如何:

代碼.png

運行結(jié)果:

啟動.png
每一幀.png
結(jié)束.png

我們驗證了這張圖:

MonoBehaviour

GameObject逛裤,Transform瘩绒,Component 三者之間的關(guān)系

GameObject是場景中所有實體的基類,Component通過掛載到GameObject來改變它的屬性(裝飾模式)带族,Transform是一種Component 锁荔,通過掛載到GameObject來控制其位置、角度蝙砌、大小阳堕、層次關(guān)系。MonoBehaviour(腳本)也是一種Component择克,它也可以掛載到GameObject上恬总。

GameObject-UML.png


對象的基本操作

要控制對象和對象森林(Hierarchy)的結(jié)構(gòu),我們要創(chuàng)建Script并將其掛載到對象上肚邢,然后在Script中改變GameObject的Component的屬性(改變了Component的屬性也就改變了GameObjectR佳摺)拭卿。

獲取在這個對象上的部件:

void Start () {
    Rigidbody rb = GetComponent<Rigidbody>();
    
    // Add a force to the Rigidbody.
    rb.AddForce(Vector3.up * 10f);
}

創(chuàng)建對象:public static GameObject CreatePrimitive(PrimitiveType type);
克隆對象:Object.Instantiate()

public GameObject enemy;

void Start() {
    for (int i = 0; i < 5; i++) {
        Instantiate(enemy);
    }
}

查找對象:public static GameObject Find(string name);

要獲取其他GameObject,也可以通過在腳本中創(chuàng)建一個public變量:

public GameObject prefab;

然后將你要獲取的GameObject從Hierarchy窗口(或Project窗口)拖動到Inspector窗口的對應(yīng)空位贱纠,然后你就可以在腳本中使用playerTransform了峻厚。

通過標(biāo)簽查找單個對象:public static GameObject FindWithTag(string tag)
通過標(biāo)簽查找多個對象:public static GameObject[] FindGameObjectsWithTag(string tag)
添加子對象:

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.name = "a cube";
cube.transform.position=new Vector3(0,Random.Range(0,5),0);
cube.transform.parent=this.transform;

遍歷對象樹:

foreach (Transform child in transform) {
    DoSomething(child);
}

另外也可以通過Transform的方法。

清除所有子對象:

foreach (Transform child in transform) {
    GameObject.Destroy(child);
}

更多的方法見GameObject文檔


預(yù)設(shè)與對象克隆

預(yù)設(shè)(prefab)是一個對象的快照或模板谆焊,可以用于快速生成相同的對象惠桃,比如子彈、敵人等等懊渡。修改預(yù)設(shè)以后刽射,通過該預(yù)設(shè)生成的對象也會發(fā)生變化。

預(yù)設(shè)與克隆的聯(lián)系與區(qū)別:

預(yù)設(shè)與克隆都能創(chuàng)建出相同的對象剃执。預(yù)設(shè)創(chuàng)建出的對象與源預(yù)設(shè)依然有聯(lián)系誓禁,后者的更改會影響到前者。但是克隆出的對象與源對象不再有聯(lián)系肾档。


組合模式

一個對象可以由多個對象組成摹恰,而組合出的對象依然與正常的對象沒有什么不同,操作組合對象與操作單一的對象的方式?jīng)]什么不同怒见,這就是組合模式(可以理解為1+1 == 1)俗慈。
組合模式允許你將對象組合成樹形結(jié)構(gòu)來表現(xiàn)“部分-整體”的層次結(jié)構(gòu),使得對象使用者以一致的方式處理單個對象以及對象的組合遣耍。(這個好處我們將會在學(xué)習(xí)Unity(7)體會到)

另外一個好處是闺阱,實現(xiàn)了組合模式以后,我們就可以忽略“部分”的存在了舵变,我們只需要告訴“整體”要做什么酣溃,然后“整體”就會讓每一個“部分”做好自己的事情。
讓我們從組合模式的角度來看待電腦開機纪隙。如果說電腦是一個“整體”赊豌,那其中的CPU、內(nèi)存等硬件就是“部分”绵咱。當(dāng)我們想要開機的時候碘饼,我們需要告訴CPU、內(nèi)存要怎么啟動起來嗎悲伶?不用艾恼,我們只需要按開機按鈕,告訴電腦這個“整體”:我要開機拢切。然后電腦就會讓CPU蒂萎、內(nèi)存等硬件做自己的事情,最終把電腦啟動起來淮椰。

我們通過BroadcastMessage來讓“整體”發(fā)送消息給“部分”:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class ComputerScript : MonoBehaviour {

    // Use this for initialization
    void Start () {
        PushPowerButton();
    }

    void PushPowerButton() {
        print ("PowerButton of computer is pushed at "+time);
        gameObject.BroadcastMessage("Boot", System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); 
    }
}

System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")返回當(dāng)前時間的string五慈,這個它會作為以下每一個Boot的參數(shù)纳寂。

CPU收到消息以后執(zhí)行自己的代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CPUscript : MonoBehaviour {

    void Boot(string time) {
        print ("CPU is running. Boot time: "+ time);
    }
}

內(nèi)存收到消息以后執(zhí)行自己的代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MemoryScript : MonoBehaviour {

    void Boot(string time) {
        print ("Memory is running. Boot time: "+ time);
    }
}

詳細(xì)內(nèi)容請參考官方教程官方API文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泻拦,隨后出現(xiàn)的幾起案子毙芜,更是在濱河造成了極大的恐慌,老刑警劉巖争拐,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腋粥,死亡現(xiàn)場離奇詭異,居然都是意外死亡架曹,警方通過查閱死者的電腦和手機隘冲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绑雄,“玉大人展辞,你說我怎么就攤上這事⊥蛭” “怎么了罗珍?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脚粟。 經(jīng)常有香客問我覆旱,道長,這世上最難降的妖魔是什么核无? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任扣唱,我火速辦了婚禮,結(jié)果婚禮上团南,老公的妹妹穿的比我還像新娘画舌。我一直安慰自己,他們只是感情好已慢,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霹购,像睡著了一般佑惠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齐疙,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天膜楷,我揣著相機與錄音,去河邊找鬼贞奋。 笑死赌厅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轿塔。 我是一名探鬼主播特愿,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼仲墨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揍障?” 一聲冷哼從身側(cè)響起目养,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毒嫡,沒想到半個月后癌蚁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡兜畸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年努释,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咬摇。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡伐蒂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菲嘴,到底是詐尸還是另有隱情饿自,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布龄坪,位于F島的核電站昭雌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏健田。R本人自食惡果不足惜烛卧,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妓局。 院中可真熱鬧总放,春花似錦、人聲如沸好爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽存炮。三九已至炬搭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間穆桂,已是汗流浹背宫盔。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留享完,地道東北人灼芭。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像般又,于是被迫代替她去往敵國和親彼绷。 傳聞我的和親對象是個殘疾皇子巍佑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)苛预,斷路器句狼,智...
    卡卡羅2017閱讀 134,701評論 18 139
  • 111. [動畫系統(tǒng)]如何將其他類型的動畫轉(zhuǎn)換成關(guān)鍵幀動畫? 動畫->點緩存->關(guān)鍵幀 112. [動畫]Unit...
    胤醚貔貅閱讀 13,053評論 3 90
  • 1 場景問題# 1.1 商品類別樹## 考慮這樣一個實際的應(yīng)用:管理商品類別樹热某。 在實現(xiàn)跟商品有關(guān)的應(yīng)用系統(tǒng)的時候...
    七寸知架構(gòu)閱讀 6,021評論 10 59
  • 小時候生活在農(nóng)村腻菇,見過各種各樣的草,如:薰衣草昔馋,含羞草筹吐,狗尾巴草,車前草秘遏,有名字的丘薛,沒名字的,可謂種類繁多邦危。然而洋侨,...
    左同超閱讀 5,341評論 0 1
  • 文/漣漪 本文為職場充電寶創(chuàng)始人阿何微課"零基礎(chǔ)入門公眾號運營與推廣"的聽課筆記。對于公眾號運營小白還是蠻有用的倦蚪。...
    漣漪成長記閱讀 868評論 3 11