unity遊戲程式設計(02) 應用2d圖片物件

18
電子工程系 電腦遊戲設計組 Unity遊戲程式設計(02) 應用2D圖片物件 吳錫修 Nov 11, 2016

Upload: -

Post on 14-Jan-2017

175 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Unity遊戲程式設計(02) 應用2D圖片物件

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

Unity遊戲程式設計(02) 應用2D圖片物件

吳錫修

Nov 11, 2016

Page 2: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

Sprite可以是單張圖片或由⼀組相關圖片所組成

Sprite物件支援碰撞偵測與觸發事件

角色碰觸陷阱,中毒失血,為了能加入碰撞偵測與程式控制,角色與陷阱就必須使用Sprite

Sprite物件 1/3

Wu, ShyiShiou Dept. of E.E., NKUT2

sprite 1 sprite 2

Page 3: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

匯入Sprite圖片素材

由Assets快顯功能表Create/Folder,新增Sprite資料夾

將圖片素材拖曳到Assets/Sprite資料夾

由屬性編輯器 (inspector) 檢查圖片素材的貼圖類型 (Texture Type)設定值是否為Sprite (2D and UI)

Sprite物件 2/3

Wu, ShyiShiou Dept. of E.E., NKUT3

Page 4: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

建立Sprite元件

從Assets/Sprite資料夾將圖片素材拖曳到場景

變更元件名稱

程式腳本是以元件名稱來存取元件,要注意名稱是否⼀致

由Hierarchy或Inspector窗格修改元件名稱

Sprite物件 3/3

4 Wu, ShyiShiou Dept. of E.E., NKUT

Page 5: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

程式腳本是指當發生某些情況 (事件) 時,元件該做什麼?

遊戲引擎會定時執行遊戲專案程式腳本

https://docs.unity3d.com/Manual/ExecutionOrder.html

C# Script檔預設腳本程式碼如下:

using UnityEngine;using System.Collections;public class ScriptFilename : MonoBehaviour {

// Use this for initializationvoid Start () {

}

// Update is called once per framevoid Update () {

}}

程式腳本

5 Wu, ShyiShiou Dept. of E.E., NKUT

Page 6: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

建立⼀個2D專案

將按鈕圖片素材拖曳(匯入)到Assets/Sprite資料夾

設計動態按鈕 1/12

6 Wu, ShyiShiou Dept. of E.E., NKUT

start_active (按下滑鼠時)

start_hover (滑鼠在按鈕上時)

start_normal (一般情況)

end_active (按下滑鼠時)

end_hover (滑鼠在按鈕上時)

end_normal (一般情況)

Page 7: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

建立開始遊戲按鈕

將「start_normal」素材加到場景

將「start_normal 」元件名稱改為StartGame

建立結束遊戲按鈕

將「end_normal」素材加到場景

將「end_normal」元件名稱改為EndGame

設計動態按鈕 2/12

7 Wu, ShyiShiou Dept. of E.E., NKUT

Page 8: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

建立程式腳本

在Assets下新增Script資料夾

Script資料夾快顯功能表Create/C# Script,並命名為UI_Control

在類別開頭宣告Sprite陣列及SpriteRenderer

public class UI_Control : MonoBehaviour {public Sprite[] SpriteTexture = new Sprite[3];private SpriteRenderer Sprite_Renderer;// Use this for initializationvoid Start () {

}...

}

設計動態按鈕 3/12

8 Wu, ShyiShiou Dept. of E.E., NKUT

Page 9: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

撰寫OnMouseDown事件函式public class UI_Control : MonoBehaviour {

...// Update is called once per framevoid Update () {

}void OnMouseDown(){

if(gameObject.name == "StartGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[2];

}else if(gameObject.name == "EndGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[2];

}}

}

設計動態按鈕 4/12

9 Wu, ShyiShiou Dept. of E.E., NKUT

Page 10: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

撰寫OnMouseUp事件函式public class UI_Control : MonoBehaviour {

...// Update is called once per framevoid Update () {

}void OnMouseUp(){

if(gameObject.name == "StartGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[1];

}else if(gameObject.name == "EndGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[1];

}}

}

設計動態按鈕 5/12

10 Wu, ShyiShiou Dept. of E.E., NKUT

Page 11: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

撰寫OnMouseEnter事件函式public class UI_Control : MonoBehaviour {

...// Update is called once per framevoid Update () {

}void OnMouseEnter(){

if(gameObject.name == "StartGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[1];

}else if(gameObject.name == "EndGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[1];

}}

}

設計動態按鈕 6/12

11 Wu, ShyiShiou Dept. of E.E., NKUT

Page 12: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

撰寫OnMouseExit事件函式public class UI_Control : MonoBehaviour {

...// Update is called once per framevoid Update () {

}void OnMouseExit(){

if(gameObject.name == "StartGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[0];

}else if(gameObject.name == "EndGame"){

Sprite_Renderer = gameObject.GetComponent<SpriteRenderer>();Sprite_Renderer.sprite = SpriteTexture[0];

}}

}

設計動態按鈕 7/12

12 Wu, ShyiShiou Dept. of E.E., NKUT

Page 13: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

設定元件與程式之關連

將UI_Control程式腳本拖曳到Hiearachy之StartGame及EndGame元件上

由Inspector窗格檢視元件屬性,會多了⼀個UI_Control(Script)屬性欄;且程式腳本中的public變數會自動產生對應的資料欄

設計動態按鈕 8/12

13 Wu, ShyiShiou Dept. of E.E., NKUT

Page 14: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

設定陣列內容

由Inspector窗格檢視StartGame元件屬性,展開SpriteTexture,分別將圖檔拖曳到Element 1、Element 2、Element 3欄中

設計動態按鈕 9/12

14 Wu, ShyiShiou Dept. of E.E., NKUT

Page 15: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

同樣方式,設定EndGame元件之SpriteTexture屬性

設計動態按鈕 10/12

15 Wu, ShyiShiou Dept. of E.E., NKUT

Page 16: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

加入2D碰撞偵測

選取StartGame元件

點擊功能表Component/Physics 2D/ Box Collider 2D,或由Inspector窗格點擊「Add Component」按鈕

設計動態按鈕 11/12

16 Wu, ShyiShiou Dept. of E.E., NKUT

Page 17: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

選取EndGame元件

點擊功能表命令Component/Physics 2D/Box Collider 2D,或由Inspector窗格點擊「Add Component」按鈕

測試

按下執行按鈕,使用滑鼠操作按鈕,檢驗是否符合程式腳本設計動作

設計動態按鈕 12/12

17 Wu, ShyiShiou Dept. of E.E., NKUT

Page 18: Unity遊戲程式設計(02) 應用2D圖片物件

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

新建2D專案,並以學號-1做為專案名稱及場景名稱

下載button.rar素材製作動態按鈕

實作練習

18