Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unity LAB 2D UFO Tutorial

Similar presentations


Presentation on theme: "Unity LAB 2D UFO Tutorial"— Presentation transcript:

1 Unity LAB 2D UFO Tutorial
2018/10/2

2 課程須知 此份投影片的內容皆用windows的unity製作 如mac有操作上的不同導致遇到問題請隨時呼叫旁邊的助教

3 課程目標 對於unity介面有基礎認識 完成一非常簡單的2D小遊戲

4 建立Unity的2D檔案

5 UnityEditor 介面 Hierarchy:場景內所有「物件」的「結構」 Scene:顯示場景內物件的位置
Game:顯示遊戲畫面(通常是從camara往外看的樣子) Asset Store:顧名思義,買asset(各種遊戲素材、plugin)的地方( Project:該專案底下所有的檔案都在這,顯示的PATH:你的專案位置/Assets Console:用來顯示debug、Error、user defined的訊息 Inspector:顯示「選取物件」的屬性

6 UnityEditor 介面 這些Tab可以自由移動位置 如果有Tab被你移到不見了 右上角有選單可以歸位或其他調整→→↓

7 匯入素材 匯入第二週上課用的 UFO_Sprites
去課程網頁載 Import也可以直接從檔案總管(資料夾)把檔案拖進Editor介面的Project Tab

8 畫面大概長這樣

9 Camera 點擊camera物件以後會顯示inspector

10 Camera Projection 範例我們先用Orthographic Camera Size調到16

11 先點project tab裡面隨便一張圖片 看看inspector的texture type是不是
Sprite(2D and UI) 不是就自己改一下 將UFO跟背景拖到Scene裡 座標放(0,0,0)

12 2D貼圖的圖層 Edit→Project Settings→Tags and Layers inspector tab那邊
點開Sorting Layers 建立Background和Player圖層 先建Background再建立Player 做到這邊有可能會發現背景圖把UFO蓋住,是因為現在兩張圖片的預設圖層優先度是相同的,unity無法判斷兩個優先度完全相同的貼圖相疊時該怎麼放

13 加入script 兩種方法 1.在project tab有create→C# Script 2.在你選定的物件屬性直接加入script
也可以直接在project欄右鍵create 2.在你選定的物件屬性直接加入script 先在UFO上面加一個move的script

14 move.cs using System.Collections; using System.Collections.Generic;
using UnityEngine; public class move : MonoBehaviour { public float speed=10; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.W)) { transform.position += new Vector3(0, speed * Time.deltaTime, 0); if (Input.GetKey(KeyCode.S)) { transform.position += new Vector3(0, -speed * Time.deltaTime, 0); if (Input.GetKey(KeyCode.A)) transform.position += new Vector3(-speed * Time.deltaTime, 0, 0); if (Input.GetKey(KeyCode.D)) transform.position += new Vector3(speed * Time.deltaTime, 0, 0);

15 剛剛的move.cs內的移動模式比較像是讓物件移動位置(不符合物理的感覺)
所以先把UFO component中的move.cs刪掉,待會用符合物理的模式讓UFO移動

16 讓UFO增加物理特性 點擊物件後 inspector→AddComponent 搜尋”collider”(中文翻碰撞器)
選取適合的collider(circle) Collider 的radius調2.1 AddComponent→Rigidbody2D (剛體) Rigidbody2D的 Gravity Scale先調到0

17 UFOController.cs 使用力量去推動UFO的移動 UFO會產生加速度跟慣性 using System.Collections;
using System.Collections.Generic; using UnityEngine; public class UFOController : MonoBehaviour { public float forceValue=2f; Rigidbody2D rbody2D; // Use this for initialization void Start () { rbody2D = this.GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update () { Vector2 force2D = Vector2.zero; if (Input.GetKey(KeyCode.W)) { force2D.y += forceValue; if (Input.GetKey(KeyCode.S)) force2D.y -= forceValue; if (Input.GetKey(KeyCode.A)) force2D.x -= forceValue; if (Input.GetKey(KeyCode.D)) force2D.x += forceValue; rbody2D.AddForce(force2D);

18 遊戲邊界 點選Background物件 加上四個BoxCollider2D Run!

19 加上金塊 放金塊到scene中 (金塊呢?) sorting layer加上“Pickup”
現在圖層優先度: Pickup>Player>Background 金塊的sorting layler改成Pickup 金塊附一新腳本”pickupController.cs”

20 pickupController.cs 以Z軸為軸心旋轉 public float rotateAngle=45f;
this.transform.Rotate(new Vector3(0,0,rotateAngle*Time.deltaTime));

21 讓UFO撿金塊 將金塊加上CircleCollider2D->Radius約0.9 勾上is trigger
將UFOController.cs加入一個函式 接著就可以將UFO移到金塊處讓金塊消失 void OnTriggerEnter2D(Collider2D other) { Destroy(other.gameObject); } 勾上is trigger的collider(碰撞器) 中文會稱之為觸發器 勾選了is trigger的金幣會從「可以被撞到」變成「不會被撞到」,但是跟其他物體接觸時會傳出一個trigger signal

22 紀錄分數-UI Game Tab的比例調成4:3 上方工具欄GameObject→UI→Text 產生的同時會自動建立一個Canvas
點Canvas,將Canvas Scalar(Script) UI Scale Mode換成 Scale with Screen Size

23 Text的設定 Rect Transform 座標圖:以canvas的何處作為基準點,會影響右側的pos XYZ
Pivot:以Text的何處作為基準點,也會影響右側的pos XYZ,單位為Text的大小 Rotation、Scale:同一般物件

24 分數與遊戲的連結 在hierarchy建立一個空物件(CreateEmpty)命名為GameManager
在GameManager加上一script 「gameManager.cs」

25 gameManager.cs 回editor將剛剛建立的Text拉到gameManager的script的scoreText上
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class gameManager : MonoBehaviour { public Text scoreText; int score; // Use this for initialization void Start () { score = 0; } // Update is called once per frame void Update () { public void addScore(int n){ score += n; scoreText.text = "score: " + score;

26 UFOController.cs修改 在OnTriggerEnter2D函數中 加入這行內容
GameObject.Find("GameManager").GetComponent<gameManager>().addScore(100); 意思是指 在hierarchy(scene)找到一個名叫GameManager的物件 並獲得該物件的gameManager 元素 去使用addScore這個函數

27 RUN! 叫你的UFO去撞金塊 if(金塊有消失&&UI的分數有增加) { Debug.Log(“你這兩小時功德圓滿了(?)”);
} else { Debug.Log(“請舉手”); } 2D UFO Tutorial的小遊戲就到這結束 可以見到講義36頁

28 Unity的概念講解

29 Script-基本函式

30 Awake VS Start Awake: Start:
遊戲開始後(play鍵以後),每一個物件在其active的那一刻就會執行這個函式(有些物件可能一開始不是active的,在其轉變成active狀態的時候會立即執行awake) Start: 物件在其active「後」,遊戲進行的下一偵(frame)前會呼叫此函式

31 Update VS FixedUpdate Update: FixedUpdate:
在遊戲進行的每一偵會執行一次(執行的次數受到電腦實際的速度影響) FixedUpdate: 固定的時間會執行一次,時間可以在Edit→Project settings→Time →Fixed Timestep做更動

32 Collision(碰撞)與Trigger(觸發)
碰撞:兩個物件產生物理碰撞,會觸發OnCollisionEnter/Stay/Exit函數 觸發:取消所有物理碰撞,兩物件接觸時會觸發OnTriggerEnter/Stay/Exit 換言之兩物件接觸時一定不可能同時觸發Collision和Trigger signal 參考來源:

33 Collision(碰撞)與Trigger(觸發)
六種碰撞器的分別 左半邊代表collider在接觸時會產生碰撞訊號 右半邊Trigger代表在collider的屬性中勾選了is trigger,使得該碰撞器不會發生碰撞,而會被穿過,被其他物件接觸時產生觸發訊號 Collider Rigidbody Collider Kinematic Rigidbody Collider Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider

34 名詞 Rigidbody:允許物理運算。Ex:受力(重力、阻力、慣性)和速度。 (add component->Rigidbody) Kinematic: 不使用物理運算,但可對其他剛體進行物理運算。 (Rigidbody->click ‘Is Kinematic’) 備忘有reference連結 有興趣自己看>_O Reference:

35 宣告 public、static Random←寫遊戲肯定會用到 int a; //a只會在該腳本被使用、修改
public int a;//a可以在editor的介面中直接使用與修改 public type function(type argv…){}//可在其他類別取用 public static a;//假設宣告a的腳本為abc.cs,a可以在其他腳本中寫 abc.a 來使用與修改 Random←寫遊戲肯定會用到 float a=Random.value; //between 0~1 float a=random.Range(1.0f , 3.0f); Float型態的變數後面的 f 是必須的 EX: float a=2.5//error | float a=2.5f //OK

36 prefab 用於生成固定性質的固定物件 將場景中的某一物件拖曳至Project欄位
被你拖曳到project的物件會變得藍藍的,代表他成為了prefab,之後你對該物件的修改,可以透過inspector欄位上方的prefab row進行設置 往後可以直接將帶有固定屬性的物件直接拉入場景 EX:前面金幣拉進場景會加入一個腳本和collider屬性,如果你拉了10個金幣就要做10次一樣的動作,所以我們需要prefab來省下9次重複的步驟 拉prefab進場景看看吧

37

38 Script-the most important
寫程式基本上不太可能所有method都會 不會的、不確定的都可以去上面查


Download ppt "Unity LAB 2D UFO Tutorial"

Similar presentations


Ads by Google