Unity LAB 2D UFO Tutorial

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

M 黃思淵 M 林宛億 Unity. 大綱 09 匯入 3D 模型檔案 10 創造 3D 遊戲角色 11 Unity 材質設定.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
從閱讀擺渡到寫作 高雄女中 楊子霈.
人事審議制度說明 法官人事改革成效評估委員會第九次會議 報告人:人事處長梁宏哲 人事審議制度說明 2012/3/16
一、亞洲位置 北極海 北亞 歐洲 太平洋 黑海 中亞 地中海 東亞 東北亞 西亞 南亞 非洲 東南亞 印度洋 圖2-5-1亞洲分區圖.
九十二年度第二次 會計作業實務座談會 主辦單位:會計室.
公會組織糾紛 指導老師:柯伶玫 組員 495B0065 劉致維 495B0072 廖怡塵 495B0097 范家皓.
Unity 遊戲引擎 自我介紹 奇銳科技影音動畫技術部.
學校:臺中市立大業國民中學 領域:語文學習領域(國語文) 作者:林瑩貞
郭娜 上海电影艺术职业学院 多媒体设计与制作专业
四資二甲 第三週作業 物件導向程式設計.
良心處方 Click to start..
第7章 C#函數與.NET Framework類別函數庫
行政作用法 行政命令.
中等职业学校电子信息类教材(计算机技术专业)
Part 2 開發Android應用程式的流程
遊戲機制設計 遊戲設計文件( GDD ) 塞德克歐北來.
親職學習多面體 中學篇 第四課 管教之道 (二) 1 1.
運用網路資源趣味化 「每日飲食指南份量」教學
類別與物件 Class & Object.
能量買賣訊號 ◎波段賣訊:下列四項出現三項以上(含三項) 1、空方能量升至整波上漲之最高水準,且空方能量>多方 能量30%以上。
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
程設一.
第二十八章 開發新的VCL元件 雖然BCB內提供了很多VCL元件,但是一定還有一些我們常常需要用的介面並沒有製作成VCL元件,或是一些個人化的介面,我們也有需要做成VCL元件。在第十三章,我們將介紹如何自行開發新的VCL元件。
教育人員退休新法說明會 106年12月14日 ★資料來源:參考銓敘部及高雄市教育局人事室簡報檔.
國文(一) 1.第一單元---青春印記 (學習篇、愛情篇) 2.第二單元---生活美學 3.第三單元---優遊家園.
程式設計實作.
第17章 使用B4J建立跨平台應用程式 17-1 認識B4J整合開發環境 17-2 下載與安裝B4J開發環境
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
物件導向程式設計 (Object-Oriented rogramming)
Screen Layout & Background Image
程式設計實作.
C++ with Managed Extensions
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
委派與執行緒 建國科技大學 資管系 饒瑞佶.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 2D圖形與字型的呈現.
第三章 项目设定.
基于Photoshop插件的图标管理 -- 让工具来解放我们的双手 By 黎嘉尧 商品展示组.
遊戲設計 Animation.
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第五章 頂點定義與基本形狀的繪出.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Animation(動畫) 靜宜大學資工系 蔡奇偉 副教授
Chapter 5 Recursion.
Quiz2 繳交期限: 10/12(四) 23:59前.
Week 2: 程式設計概念與 演算法的效能評估
第二章Java基本程序设计.
第五章 介面/集合/泛型 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
Chapter 5 Basic UI Design.
Location Based Services - LBS
3D Game Programming Projection
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
幼兒發展學習的評量與輔導---- 第四章—收集資料
遊戲設計 Homework3 – 小朋友下樓梯.
第二章 正確理財觀念.
B A C D ADD YOUR TEXT ADD YOUR TEXT ADD YOUR TEXT ADD YOUR TEXT
遊戲設計 Special Effects.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
勞工保險年金制度 簡報人:吳宏翔.
法律的解釋 楊智傑.
Arguments to the main Function and Final Project
中式烹调技艺 第五章.
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
第 2 章 初探 Java.
Presentation transcript:

Unity LAB 2D UFO Tutorial 2018/10/2

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

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

建立Unity的2D檔案

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

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

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

畫面大概長這樣

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

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

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

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

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

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);

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

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

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);

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

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

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

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

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

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

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

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;

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

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

Unity的概念講解

Script-基本函式

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

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

Collision(碰撞)與Trigger(觸發) 碰撞:兩個物件產生物理碰撞,會觸發OnCollisionEnter/Stay/Exit函數 觸發:取消所有物理碰撞,兩物件接觸時會觸發OnTriggerEnter/Stay/Exit 換言之兩物件接觸時一定不可能同時觸發Collision和Trigger signal 參考來源:https://home.gamer.com.tw/creationDetail.php?sn=2300960

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

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

宣告 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

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

Script-the most important https://docs.unity3d.com/ScriptReference/ 寫程式基本上不太可能所有method都會 不會的、不確定的都可以去上面查