Unity學習筆記 - Roguelike Tutorial(上)

// Unity學習筆記(零基礎入坑),自用的同時也許也能幫助別人

// 初學者,沒太多編程基礎,所以難免可能會有寫錯的地方,請見諒

//詳細教程視頻都有,筆記只記重點

官網教程鏈接:http://unity3d.com/cn/learn/tutorials/projects/2d-roguelike-tutorial/project-introduction?playlist=17150

這個中文版的教程講的也很詳細:http://tieba.baidu.com/p/4335701141

我本來是兩個配合著看的,不過兩個版本的腳本寫法不大一樣,后面就以官網教程為主了。

一、創建主角和敵人的動畫


如何創建幀動畫?

直接選中所有幀拖到物體上(或直接拖到 Hierarchy),會自動生成動畫和動畫控制器。

每個Object對應一個動畫控制器(Animation Controller),里面包含多個動畫。

分別把閑置動畫、攻擊動畫和受傷動畫的幀拖上去,生成各自的動畫文件。

同類角色控制器的共用

在AnimatorController目錄下,Creative-->Animator Override Controller創建一個控制器的重寫副本(本例為Enemy2),將原版控制器(Enemy1)拖入controller項中。再將Enemy2的閑置和攻擊動畫拖入對應項中,完成重寫。

這一步的總流程:

1.創建player,將主角的3種動畫拖到player上

2.將生成的動畫文件和動畫控制器文件放到對應目錄下(Assets-Animation-Animations&AnimatorControllers)

3.打開主角動畫控制器,修改閑置動畫(Idle)的速度為0.5

4.player物體拖入prefabs,刪除場景中的

(player加box collider、rigidbody)

5.同上創建enemy1及動畫,并拖入prefabs

(enemy1加box collider、rigidbody)

6.場景中的enemy1直接改成enemy2,拖入enemy2的動畫,但在控制器中刪除這兩個動畫

7.用上文方法,創建控制器enemy1的重寫enemy2,并將剛才創建的enemy2的動畫拖入對應項

完成!

2016.07.31


二、創建地面、障礙物和道具


地板、墻、道具,拖入場景由sprite轉為Game Objects,配置SortingLayer、Collider、tag、Layer,拖入prefabs轉為預制件。


三、用于生成地圖的地圖管理器


這可以算是一個關卡生成器。

目標是什么?

- 自動生成地板、圍墻(為什么不手動擺?1.省事 2.有隨機變化):位置固定、內容隨機

- 自動生成障礙墻、道具、敵人:位置隨機、內容隨機、數量隨機,但都有限制,并且敵人數量隨關卡增加

- 順便把出口exit也給生成了:不需要隨機

實現目標的思路?

內容隨機:從物體組中隨機選取即可(objectArray[Random.Range(0, objectArray.Length)])

位置隨機:將位置轉化為一個Vector3的List,從中隨機選取即可

? ? ? ? ? ? ? ? 常用list.Add(); ? list.RemoveAt(); ? list.Count; ? list[]

數量隨機:在設定好的最大最小值之間隨機選取即可

需特殊處理的:對于敵人的數量,以level為變量通過函數計算即可

? ? ? ? ? ? ? ? ? ? ? 使用list.RemoveAt()來避免,在一個位置上重復放東西

//這樣寫完感覺其實so easy啊 :目

具體怎么操作?

最終這個腳本包含了5個函數,只有最終的SetScenes是public的,其余都是內部使用。

沒有使用Start和Update,所以唯一的運行條件就是SetScenes被調用(交給GameManager了)。

void InitialiseList()? ? //函數1,地圖坐標列表初始化函數,用于放障礙、道具、敵人

void BoardSetup()? //函數2,鋪地板、圍墻

Vector3 RandomPosition() //函數3,自動選取放障礙、道具、敵人的隨機位置,調用函數1中的變量

void LayoutObjectAtRandom(GameObject[] tileArray, int minimum, int maxmum) //函數4,擺放障礙、道具、敵人,調用函數3

public void SetupScene(int level) //函數5,完成關卡場景的布置,調用函數1、2、4

這一步搞了個類,感覺其實沒有也可以的
函數1
函數2
函數3、4
函數5

補充材料:

coding中關于類、對象、屬性、方法的概念:

http://liuyuru.iteye.com/blog/806705

關于List

List存放的是單一的數據類型的數據(ArrayList可以存放不同類型的數據

本例創建了一個Vector3的list(gridPosition),(x,y)從(1,1)到(6,6),可從中隨機選取格子放置障礙、道具或敵人。

教程中的坐標零點選的是圍墻內左下角

2016.08.06 凌晨 沒有編程基礎學起來會慢一些,但是這種不斷學東西的感覺很好


四、游戲控制器 —— Game Manager


加上Game Manager之后,就可以測試地圖生成器的效果了。

以level 3為例,Awake里獲取到Board Manager,然后運行下SetupScene就已經可以測地圖生成的效果了:(Inspector中要把變量對應的prefabs拖進去)

效果如下,因為是從(-1,-1)點開始擺的所以偏的

調下鏡頭位置和背景色

之后要做的,是保證Game Manager是一個單例(singleton),即只會存在一個instance。因為之后Game Manager會被做成prefab。我目前的理解是,全局使用的物體會需要使用這種單例模式,因為在被調用時有產生多個的可能性。(此處理解不到位,待學習)

返回unity,把Game Manager拖入prefabs,并刪掉場景中的。

做一個Loader來加載Game Manager的實例。

如果當前沒有GameManager類的實例,則創建。

Loader掛在Main Camera上,Game Manager拖入變量gameManager中。

---說明----

1. 全局靜態變量

public static GameManager instance = null; ?

靜態變量屬于類本身而不是類的實例。全局靜態變量可在任何時候被任何腳本調用。

所以即使在Game Manager未被實例化時,Loader也可以調用instance!

This means that we can now access the public functions and variables of our game manager from any script in our game.

關于靜態變量:

靜態變量屬于靜態存儲方式,其存儲空間為內存中的靜態數據區(在 靜態存儲區內分配存儲單元),該區域中的數據在整個程序的運行期間一直占用這些存儲空間(在程序整個運行期間都不釋放),也可以認為是其內存地址不變,直 到整個程序運行結束(相反,而auto自動變量,即動態局部變量,屬于動態存儲類別,占動態存儲空間,函數調用結束后即釋放)。靜態變量雖在程序的整個執行過程中始終存在,但是在它作用域之外不能使用。

http://www.cnblogs.com/dongzhiquan/archive/2009/07/21/1994792.html

2. 單例模式

if (instance == null) ? ? ? ?

? ? instance = this;

else if (instance != this)

? ? Destroy(gameObject);

如果GameManager類的實例instance為空,則把當前GameManager類的實例(當前物體)賦予instance,如果instance不是當前這個實例,就銷毀當前這個物體(當前這個實例)。

如果現在生成了一個GameManager的實例a,靜態變量instance則被賦予實例a,這時又生成了一個GameManager的實例b,這時在實例b中,instance就不等于this(this是實例b),于是實例b就會被銷毀。

關于單例:

http://www.cnblogs.com/gameprogram/archive/2012/10/24/2736856.html

http://www.360doc.com/content/15/0418/20/12109864_464203821.shtml


3.DontDestroyOnLoad

DontDestroyOnLoad means that when we?load a new scene, normally all of the?game objects in the hierarchy will be destroyed.?Because we want to use the GameManager to?keep track of the score between scenes?we don't want it to be destroyed at that point.?And so we're going to use DontDestroyOnLoad?to make sure that it will persist between scenes.

---

為什么需要單例模式?

為什么要用一個Loader來調用Game Manager?

這些都還不太懂

2016.08.07 @@ 朦朧地理解了全局靜態變量和單例模式,GOOD!

傳送門:Unity學習筆記 - Roguelike Tutorial(中)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,786評論 18 139
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,325評論 11 349
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,154評論 4 61
  • vhjhhuisnwbbjjsjbbdbjsjj
    仇志軒閱讀 121評論 0 5
  • 選擇你的開場白,讓你的顧客停留 第一句話這么說:“你好,歡迎光臨XXX專柜!” 把你的品牌說出來,因為顧客可能是在...
    木南開閱讀 2,370評論 0 1