SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
電子工程系車用電子與資訊組
Roll a Ball遊戲
吳錫修
wu.shyishiou@gmail.com
Revised on March 7, 2019
應用內建3D物件的⼀款簡單滾球遊戲,
學習使用3D遊戲物件,程式腳本,預
製物件,動態碰撞器與靜態動態碰撞
器處理
Makeeachdaycount
 https://unity3d.com/pt/learn/tutorials/s/roll-ball-tutorial
線上教學
2
Makeeachdaycount
 新增3D專案
 選單命令File> New Project…
 專案名稱Roll a Ball
 在Assets下建立子資料夾
 _Scenes
 Materials
 Prefabs
 Scripts
 儲存預設場景
 MiniGame.unity
專案設定
3
Makeeachdaycount
 選單命令GameObject> 3D Object> Plane,命名為Ground
 重置Transform
 Scale(X, Y, Z) = (2, 1, 2)
 Gizmos選單
 取消勾選Show Grid
 在Materials資料夾下新增Material,命名為Background
 設定反照率Main MapsAlbedo(R, G, B, A) = (0, 32, 64, 255)
 拖曳Background材質到Ground物件上
 選取Directional Light
 Rotation(X, Y, Z) = (50, 60, 0)
建立場景
4
Makeeachdaycount
 選單命令GameObject> 3D Object> Sphere,命名為Player
 重置Transform屬性
 Position(X, Y, Z) = (0, 0.5, 0)
 在Player加入Rigidbody元件
建立玩家物件 1/3
5
Makeeachdaycount
 在Player加入PlayerController程式腳本
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
private Rigidbody rb;
void Start () {
rb = GetComponent<Rigidbody>();
}
void FixedUpdate () {
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rb.AddForce (movement * speed);
}
}
 測試遊戲,可使用方向鍵操作Player
玩家控制 1/7
6
Makeeachdaycount
 讓攝影機跟隨Player移動
 選取Main Camera
 Position(X, Y, Z) = (0, 10, -10 )
 Rotation(X, Y, Z) = (45, 0, 0 )
攝影機控制 1/2
7
Makeeachdaycount
 在Main Camera加入CameraController程式腳本
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
public GameObject player;
private Vector3 offset;
void Start () {
offset = transform.position - player.transform.position;
}
void LateUpdate () {
transform.position = player.transform.position + offset;
}
}
 拖曳Player到Camera Controller之Player欄
 測試遊戲,攝影機可定距跟隨Player移動
攝影機控制 2/2
8
Makeeachdaycount
 選單命令GameObject> Create Empty,命名為Walls
 選單命令GameObject> 3D Object> Cube,命名為West Wall
 重置Transform
 拖曳West Wall成為Walls的子物件
 Position(X, Y, Z) = (-10, 0, 0)
 Scale(X, Y, Z) = (0.5, 2, 20.5)
 Ctrl-D複製West Wall,命名為East Wall
 Position(X, Y, Z) = (10, 0, 0)
 Scale(X, Y, Z) = (0.5, 2, 20.5)
建立遊戲邊界 1/2
9
Makeeachdaycount
 Ctrl-D複製West Wall,命名為North Wall
 Position(X, Y, Z) = (0, 0, 10)
 Scale(X, Y, Z) = (20.5, 2, 0.5)
 Ctrl-D複製North Wall,命名為South Wall
 Position(X, Y, Z) = (0, 0, -10)
 Scale(X, Y, Z) = (20.5, 2, 0.5)
 測試遊戲,Player不會滾出邊界
建立遊戲邊界 2/2
10
Makeeachdaycount
 選單命令GameObject> 3D Object> Cube,命名為Pick UP
 Position(X, Y, Z) = (0, 0.5, 0)
 Rotation(X, Y, Z) = (45, 45, 45)
 Scale(X, Y, Z) = (0.5, 0.5, 0.5)
 在Pick UP加入Rotator程式腳本,讓Pick UP物件自轉
using UnityEngine;
using System.Collections;
public class Rotator : MonoBehaviour {
void Update () {
transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
}
}
加入道具物件 1/3
11
Makeeachdaycount
 拖曳Pick UP到Prefabs資料夾,做成預製物件
 選單命令GameObject> Create Empty,命名為Pick UPs
 拖曳Pick UP成為Pick UPs的子物件
 切換到X-Z視角
 使用世界座標模式
 複製11個Pick UP圍成圓圏
加入道具物件 2/3
12
Makeeachdaycount
 在Materials資料夾下新增Material,命名為Pick UP
 設定反照率Main MapsAlbedo(R, G, B, A) = (255, 255, 0, 255)
 拖曳Pick UP材質球到Pick UP物件上
 更新預製物件
加入道具物件 3/3
13
Makeeachdaycount
 修改PlayerController程式腳本
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
...
void OnTriggerEnter(Collider other) {
if (other.gameObject.CompareTag ("Pick Up")) {
other.gameObject.SetActive (false);
}
}
}
收集道具 1/4
14
Makeeachdaycount
 點選Pick UP預製物件
 Tag = Pick Up
 Box Collider
 勾選Is Trigger
 測試遊戲,Pick UP物件被Player碰到時就會
消失
收集道具 2/4
15
Makeeachdaycount
 探討潛藏問題
 Unity將任何帶有碰撞器和剛體的物件歸類為動態物件。而具有碰撞器但沒
有物理剛體的物件歸類為靜態物件
 為了性能最佳化,Unity會計算場景中所有靜態碰撞器的材積,並將此資訊
保存在快取中,這樣可以節省每幀重新計算靜態碰撞資訊的時間。但當靜
態物件移動、旋轉或縮放時,Unity就會重新計算並更新靜態碰撞器快取,
重新計算作業較耗費資源。至於動態碰撞器,我們可以根據需要隨時移動、
旋轉或縮放,Unity不會記錄任何碰撞器材積
 目前Pick UP物件具有Box Collider,但沒有剛體。Rotator程式腳本會使
Pick UP物件旋轉,所以Unity每幀會重新計算我們的靜態碰撞器快取。解
決方案是為Pick UP物件添加剛體,使Pick UP成為動態物件
收集道具 3/4
16
Makeeachdaycount
 在Pick UP預製物件加入Rigidbody元件
 勾選Is Kinematic
 測試遊戲
收集道具 4/4
17
Makeeachdaycount
 選單命令GameObject> UI> Text,命名為Count Text
 Anchor Presets = top, left (同時按Shift + Alt)
 Pos(X, Y) = (10, -10)
 Text = Count Text
 Color = white
 選單命令GameObject> UI> Text,命名為Win Text
 Pos(X, Y) = (0, 75)
 Text = Win Text
 Color = white
 Character/Font Size = 24
 Paragraph/Alignment = center, middle
顯示分數 1/4
18
Makeeachdaycount
 修改PlayerController程式腳本
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
public Text countText;
public Text winText;
private Rigidbody rb;
private int count;
void Start () {
rb = GetComponent<Rigidbody>();
count = 0;
SetCountText ();
winText.text = "";
}
顯示分數 2/4
19
Makeeachdaycount
void OnTriggerEnter(Collider other) {
if (other.gameObject.CompareTag ("Pick Up")) {
other.gameObject.SetActive (false);
count = count + 1;
SetCountText ();
}
}
void SetCountText () {
countText.text = "Count: " + count.ToString ();
if (count >= 12) {
winText.text = "You Win!";
}
}
...
}
顯示分數 3/4
20
Makeeachdaycount
 拖曳Count Text到PlayerController之Count Text欄
 拖曳Win Text到PlayerController之Win Text欄
 測試遊戲,每收集⼀個Pick UP物件,分數加1;收集全部Pick UP物件
後,顯示"You Win!"
顯示分數 4/4
21
Makeeachdaycount
 選單命令File> Build Settings
 確認輸出之遊戲平台 (Platform)
 拖曳_ScenesMiniGame到Scenes In Build
 點擊Build
封裝遊戲
22

Contenu connexe

Tendances

Unity遊戲程式設計(11) 創建遊戲地形
Unity遊戲程式設計(11) 創建遊戲地形Unity遊戲程式設計(11) 創建遊戲地形
Unity遊戲程式設計(11) 創建遊戲地形吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 3D物件與光源設定
Unity遊戲程式設計 - 3D物件與光源設定 Unity遊戲程式設計 - 3D物件與光源設定
Unity遊戲程式設計 - 3D物件與光源設定 吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 應用Sprite物件
Unity遊戲程式設計 - 應用Sprite物件Unity遊戲程式設計 - 應用Sprite物件
Unity遊戲程式設計 - 應用Sprite物件吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計(12)第三人稱角色控制器
Unity遊戲程式設計(12)第三人稱角色控制器Unity遊戲程式設計(12)第三人稱角色控制器
Unity遊戲程式設計(12)第三人稱角色控制器吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 2D 物理關節應用
Unity遊戲程式設計 - 2D 物理關節應用Unity遊戲程式設計 - 2D 物理關節應用
Unity遊戲程式設計 - 2D 物理關節應用吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 2D粒子特效應用
Unity遊戲程式設計 - 2D粒子特效應用Unity遊戲程式設計 - 2D粒子特效應用
Unity遊戲程式設計 - 2D粒子特效應用吳錫修 (ShyiShiou Wu)
 
Unity遊戲設計- 2D動畫製作及應用
Unity遊戲設計-  2D動畫製作及應用Unity遊戲設計-  2D動畫製作及應用
Unity遊戲設計- 2D動畫製作及應用吳錫修 (ShyiShiou Wu)
 
component based html5 game engine
component based html5 game enginecomponent based html5 game engine
component based html5 game enginehbbalfred
 
Unity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理IIUnity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理II吳錫修 (ShyiShiou Wu)
 
Neural Turing Machine Tutorial
Neural Turing Machine TutorialNeural Turing Machine Tutorial
Neural Turing Machine TutorialMark Chang
 

Tendances (19)

Unity遊戲程式設計(11) 創建遊戲地形
Unity遊戲程式設計(11) 創建遊戲地形Unity遊戲程式設計(11) 創建遊戲地形
Unity遊戲程式設計(11) 創建遊戲地形
 
Vuforia AR影片程式設計
Vuforia AR影片程式設計 Vuforia AR影片程式設計
Vuforia AR影片程式設計
 
Unity遊戲程式設計 - 3D物件與光源設定
Unity遊戲程式設計 - 3D物件與光源設定 Unity遊戲程式設計 - 3D物件與光源設定
Unity遊戲程式設計 - 3D物件與光源設定
 
Unity遊戲設計- Unity基礎指引
Unity遊戲設計- Unity基礎指引Unity遊戲設計- Unity基礎指引
Unity遊戲設計- Unity基礎指引
 
Vuforia AR 同時追踨多張辨識圖
Vuforia AR同時追踨多張辨識圖Vuforia AR同時追踨多張辨識圖
Vuforia AR 同時追踨多張辨識圖
 
Unity遊戲程式設計 - 應用Sprite物件
Unity遊戲程式設計 - 應用Sprite物件Unity遊戲程式設計 - 應用Sprite物件
Unity遊戲程式設計 - 應用Sprite物件
 
Unity遊戲程式設計(12)第三人稱角色控制器
Unity遊戲程式設計(12)第三人稱角色控制器Unity遊戲程式設計(12)第三人稱角色控制器
Unity遊戲程式設計(12)第三人稱角色控制器
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
Unity遊戲程式設計 - Roll a ball遊戲
Unity遊戲程式設計 - Roll a ball遊戲Unity遊戲程式設計 - Roll a ball遊戲
Unity遊戲程式設計 - Roll a ball遊戲
 
mBot教學(2)-mBlock積木式程式設計
mBot教學(2)-mBlock積木式程式設計mBot教學(2)-mBlock積木式程式設計
mBot教學(2)-mBlock積木式程式設計
 
Unity遊戲程式設計 - 2D 物理關節應用
Unity遊戲程式設計 - 2D 物理關節應用Unity遊戲程式設計 - 2D 物理關節應用
Unity遊戲程式設計 - 2D 物理關節應用
 
Unity遊戲程式設計 - 2D粒子特效應用
Unity遊戲程式設計 - 2D粒子特效應用Unity遊戲程式設計 - 2D粒子特效應用
Unity遊戲程式設計 - 2D粒子特效應用
 
Unity遊戲設計- 2D動畫製作及應用
Unity遊戲設計-  2D動畫製作及應用Unity遊戲設計-  2D動畫製作及應用
Unity遊戲設計- 2D動畫製作及應用
 
component based html5 game engine
component based html5 game enginecomponent based html5 game engine
component based html5 game engine
 
Unity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理IIUnity遊戲程式設計 - 2D移動與碰撞處理II
Unity遊戲程式設計 - 2D移動與碰撞處理II
 
I os 14
I os 14I os 14
I os 14
 
Neural Turing Machine Tutorial
Neural Turing Machine TutorialNeural Turing Machine Tutorial
Neural Turing Machine Tutorial
 
mBot 教學2 mBlock積木式設計程式
mBot 教學2 mBlock積木式設計程式mBot 教學2 mBlock積木式設計程式
mBot 教學2 mBlock積木式設計程式
 
XNA遊戲程式框架
XNA遊戲程式框架 XNA遊戲程式框架
XNA遊戲程式框架
 

Similaire à Roll a ball遊戲專案

Similaire à Roll a ball遊戲專案 (13)

Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
I os 01
I os 01I os 01
I os 01
 
Solitaire with Greenfoot #1
Solitaire with Greenfoot #1Solitaire with Greenfoot #1
Solitaire with Greenfoot #1
 
documen.tips_cocos2d-x
documen.tips_cocos2d-xdocumen.tips_cocos2d-x
documen.tips_cocos2d-x
 
Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01
 
Core data lightweight_migration
Core data lightweight_migrationCore data lightweight_migration
Core data lightweight_migration
 
Unity遊戲程式設計- Unity基礎指引
Unity遊戲程式設計- Unity基礎指引Unity遊戲程式設計- Unity基礎指引
Unity遊戲程式設計- Unity基礎指引
 
Chinese hans
Chinese hansChinese hans
Chinese hans
 
testing leads fix for ppt2
testing leads fix for ppt2testing leads fix for ppt2
testing leads fix for ppt2
 
Chinese hans
Chinese hansChinese hans
Chinese hans
 
Android 智慧型手機程式設計
Android 智慧型手機程式設計Android 智慧型手機程式設計
Android 智慧型手機程式設計
 
Ch2
Ch2Ch2
Ch2
 
Actionscript遊戲元素
Actionscript遊戲元素Actionscript遊戲元素
Actionscript遊戲元素
 

Plus de 吳錫修 (ShyiShiou Wu)

Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲吳錫修 (ShyiShiou Wu)
 

Plus de 吳錫修 (ShyiShiou Wu) (20)

Vuforia AR影片程式設計
Vuforia AR影片程式設計Vuforia AR影片程式設計
Vuforia AR影片程式設計
 
micro:bit亮度感測應用
micro:bit亮度感測應用micro:bit亮度感測應用
micro:bit亮度感測應用
 
Vuforia AR 同時追踨多張辨識圖
Vuforia AR同時追踨多張辨識圖Vuforia AR同時追踨多張辨識圖
Vuforia AR 同時追踨多張辨識圖
 
micro:bit開關控制應用
micro:bit開關控制應用micro:bit開關控制應用
micro:bit開關控制應用
 
Vuforia AR 應用程式設計入門
Vuforia AR應用程式設計入門Vuforia AR應用程式設計入門
Vuforia AR 應用程式設計入門
 
Vuforia AR 應用程式準備作業
Vuforia AR應用程式準備作業Vuforia AR應用程式準備作業
Vuforia AR 應用程式準備作業
 
micro:bit LED顯示控制
micro:bit LED顯示控制micro:bit LED顯示控制
micro:bit LED顯示控制
 
IDE for micro:bit
IDE for micro:bitIDE for micro:bit
IDE for micro:bit
 
Microbit 1 introduction
Microbit 1 introductionMicrobit 1 introduction
Microbit 1 introduction
 
Arduino overview
Arduino overviewArduino overview
Arduino overview
 
使用Makeblock App學習mBot程式設計
使用Makeblock App學習mBot程式設計使用Makeblock App學習mBot程式設計
使用Makeblock App學習mBot程式設計
 
使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計使用M部落App學習mBot程式設計
使用M部落App學習mBot程式設計
 
nodeMCU IOT教學03 - NodeMCU導論
nodeMCU IOT教學03 - NodeMCU導論nodeMCU IOT教學03 - NodeMCU導論
nodeMCU IOT教學03 - NodeMCU導論
 
nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言
 
Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲Unity遊戲程式設計 - 2D Platformer遊戲
Unity遊戲程式設計 - 2D Platformer遊戲
 
Python與Ardinio整合應用
Python與Ardinio整合應用Python與Ardinio整合應用
Python與Ardinio整合應用
 
mBlock積木式設計程式
mBlock積木式設計程式mBlock積木式設計程式
mBlock積木式設計程式
 
Arduino程式除錯
Arduino程式除錯Arduino程式除錯
Arduino程式除錯
 
Arduino程式開發工具
Arduino程式開發工具Arduino程式開發工具
Arduino程式開發工具
 
Arduino程式快速入門
Arduino程式快速入門Arduino程式快速入門
Arduino程式快速入門
 

Roll a ball遊戲專案