Step03 首先先將基礎場景必需物建置完成 新增一個基礎方塊,GameObject > Create Other > Cube: Step04 設置位置至 (0, 0, 0), 並調整大小為 (50, 1, 50): 2

Similar documents
Microsoft PowerPoint 龍華科技大學遊戲系-Unity teaching

Microsoft PowerPoint - Test.ppt

2D Asset Demo Rain Snow SteamSpray VolumeSteam Waterfall Demo Unity Asset store 7.3 2D example\practice\ch07 Unity ch07 MissileExplosion Wall 7-8

入 指 令 如 : 鍵 盤 鼠 標 多 點 觸 控 重 力 感 應 陀 螺 儀 等 4. 圖 形 用 戶 接 口 掌 握 引 擎 API 中 GUI 與 GUILayout 類 中 方 法 和 變 量 的 使 用, 能 夠 通 過 GUI Skin 為 應 用 的 界 面 定 制 不 同 風 格 主

建 立 一 面 牆 以 下 說 明 將 會 講 解 比 較 利 用 預 設 物 件 (using a Prefab) 和 從 編 碼 來 創 立 物 件 (creating objects from code) 兩 者 間 的 優 點 首 先, 我 們 用 編 碼 來 建 立 一 面 牆 : fun

Project 1.Demo public Renderer trackl; public Renderer trackr; public float trackspeed = 0.02f; 6-29

Microsoft PowerPoint - Unity3d_Input

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

1.ai

PowerPoint Presentation

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

Microsoft Word - 01.DOC

Microsoft Word - template.doc

TX-NR3030_BAS_Cs_ indd

void Start () Fire = 0; Fire -= 1 * Time.deltaTime; Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); // 宣告射線 RaycastHit hit; // 射線撞擊 if (

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

Microsoft PowerPoint - 00_SimplePlatform

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Open topic Bellman-Ford算法与负环

Logitech Wireless Combo MK45 English

K7VT2_QIG_v3

崑山科技大學

2008 Never Stop

台北市立大安高工職業學校

影視後製全攻略 Premiere Pro After Effects Encore 自序 Adobe Premiere Pro After Effects Encore 2008 Adobe CS Adobe CS5 Adobe CS4 Premiere Pro After Effect

Microsoft Word - A doc

CC213

Microsoft Word - 3D手册2.doc

穨control.PDF

Microsoft Word - 1- 封面

RunPC2_.doc

Microsoft PowerPoint - Lecture7II.ppt

透 過 選 擇 Google Street View 場 景 模 式 來 呈 現 實 際 道 路 上 的 狀 況 模 擬 並 且 經 由 預 先 紀 錄 好 的 各 國 都 市 座 標, 讓 使 用 者 可 以 選 擇 各 國 道 路 來 做 行 車 上 的 模 擬 使 本 系 統 不 僅 可 以

Microsoft Word - FPKLSC_21.docx

USING MAYA ANIMATION Keyset set Maya sets partitions MEL MEL copykey cutkey pastekey scalekey snapkey keytangent bakeresults MEL Command Reference Edi

AL-M200 Series

Microsoft Word - CH07_分子特效應用.doc

Microsoft Word - 新增Microsoft Word 文件.doc


C o n t e n t s Acceptance Allow Love Apologize Archangel Metatron Archangel Michael Ask for

Guide to Install SATA Hard Disks

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

Microsoft PowerPoint - ATF2015.ppt [相容模式]

3-1 Wii ( )

CX_300 Manual.book

大 綱 最 有 利 標 目 的 及 類 型 最 有 利 標 之 辦 理 方 式 準 用 最 有 利 標 取 最 有 利 標 精 神 最 有 利 標 之 類 型 及 其 相 關 規 定 適 用 最 有 利 標 準 用 最 有 利 標 及 取 最 有 利 標 精 神 作 業 程 序 及 實 務 分 析

<4D F736F F D C4EAC0EDB9A4C0E04142BCB6D4C4B6C1C5D0B6CFC0FDCCE2BEABD1A15F325F2E646F63>

RUN_PC連載_10_.doc

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f






星河33期.FIT)

创业板投资风险提示:本次股票发行后拟在创业板市场上市,该市场具有较高的投资风险

Microsoft Word doc


4. 每 组 学 生 将 写 有 习 语 和 含 义 的 两 组 卡 片 分 别 洗 牌, 将 顺 序 打 乱, 然 后 将 两 组 卡 片 反 面 朝 上 置 于 课 桌 上 5. 学 生 依 次 从 两 组 卡 片 中 各 抽 取 一 张, 展 示 给 小 组 成 员, 并 大 声 朗 读 卡

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

國立桃園高中96學年度新生始業輔導新生手冊目錄

Windows XP

SCRATCH 速成法

CANVIO_AEROCAST_CS_EN.indd

投影片 1

01CP-WX3030WNetc_CO_ENG.indd

RUN_PC連載_8_.doc

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

Microsoft Word - 苹果脚本跟我学.doc

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8

89???????q?l?????T??

软件测试(TA07)第一学期考试

麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http

Java

Microsoft Word - 小心翼翼的二十一點N.doc

区 域 活 动 进 入 中 班 我 们 区 域 的 设 置 和 活 动 材 料 都 有 所 变 化, 同 时 也 吸 引 孩 子 们 积 极 的 参 与 学 习 操 作 区 的 新 材 料 他 们 最 喜 欢, 孩 子 们 用 立 方 块 进 行 推 理 操 作 用 扑 克 牌 进 行 接 龙 游

AutoCAD 用戶如何使用 ArchiCAD

高中英文科教師甄試心得

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

投影片 1

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

目 录 目 录 1. 安 装 和 快 速 入 门 附 件 1.1 随 机 附 件 附 件 信 息... 3 连 接 和 设 定 1.3 连 接 记 录 纸... 4 快 速 入 门 1.5 发 送 传 真 / 复 印 接 收 传 真

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

Microsoft Word - 08_科普作品選讀示例一_ doc

電機工程系認可證照清單 /7/1

Lorem ipsum dolor sit amet, consectetuer adipiscing elit

Graphic Design:Business Card 名片設計 Published: 22/06/2014 Creative Fields: Graphic Design Page #2

Microsoft PowerPoint - VB14.ppt


【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课

C/C++ 语言 - 循环

1 目 錄 1. 簡 介 一 般 甄 試 程 序 第 一 階 段 的 準 備 第 二 階 段 的 準 備 每 間 學 校 的 面 試 方 式 各 程 序 我 的 做 法 心 得 及 筆 記 結 論..

Transcription:

十 FPS 開寶箱場景設計 Step01 在開啟新專案時, 於選擇初始匯入 Standard Assets, 並設定專案名及專案 位置 Step02 開啟後如下圖 1

Step03 首先先將基礎場景必需物建置完成 新增一個基礎方塊,GameObject > Create Other > Cube: Step04 設置位置至 (0, 0, 0), 並調整大小為 (50, 1, 50): 2

Step05 新增一平行光源,GameObject > Create Other > Directional Light: Step06 調整位置至 (0, 10, 0), 旋轉 X 至 40: 3

Step07 將預設的第一人稱的預製物件 (prefab) 拖拉至場景中 位於 Project 視窗內 Standard Assets > Prefabs > First Person Controller Step08 如下圖所示 : 4

Step09 由於第一人稱的預製物件中已存在攝影機, 故將原始場景中的攝影機 (Main Camera) 進行刪除, 如下圖所示 Step10 接著將已準備好的寶箱資源包匯入, 在 Project 視窗中按右鍵,Import Package 5

Step11 將全部資源都匯入 完成後如下圖所示 : 6

Step12 將寶箱物件拖拉至場景中, 並對 Y 軸旋轉 180 度, 如下圖所示 Step13 點選寶箱物件階層下的 Box01 物件 7

Step14 新增一個 Mesh Collider 至此物件上,Component > Physics > Mesh Collider: Step15 新增此一層碰撞器, 是為了防此人物可以穿透這個物件 點選寶箱最上層級 TreasureBox, 並新增一個 Box Collider,Component > Physics > Box Collider: 8

Step16 調整方塊碰撞器的數值,Size X:1.5,Z:1.5,Center Y:0.5: Step17 並將位置調整高度至 Y:0.5 高, 並將碰撞器中的 Is Trigger 勾選 : 勾選 Trigger 是為了啟動觸發器, 在其他物件進入時會啟動部份的程式腳本 9

Step18 在 Project 視窗中按右鍵,Create > JavaScript 新增一個 Java 腳本 Step19 重新命名為 OpenBox 10

Step20 將以下程式碼全部貼至 OpenBox.js 內 : //Is The Box Auto Open? var AutoOpen = true; private var canopen = false; //Set Animation to Clamp At The End animation["open"].wrapmode = WrapMode.ClampForever; //Stop Animation At Start animation.stop(); function Update () //If CanOpen, Play Open Animation if(canopen) animation.play("open"); function OnTriggerEnter (other : Collider) //When Player Enter This Collider //If This Box is Auto Open if(autoopen) //The Collider Tag "Player" Entered, The Box Open if(other.gameobject.tag == "Player") canopen = true; function OnTriggerStay (other : Collider) //When Player Stay In This Collider //If This Box is NOT Auto Open if(!autoopen) //The Collider Tag "Player" Stayed, and The Player Press Open, The Box Open if(other.gameobject.tag == "Player") canopen = other.getcomponent("control").canopen; function OnTriggerExit (other : Collider) //When Player Exit This Collider //If This Box is NOT Auto Open if(!autoopen) //The Collider Tag "Player" Exit, The canopen Switch Will Be False if(other.gameobject.tag == "Player") canopen = false; 11

Step21 並將 OpenBox 腳本拖拉至 Hierarchy 視窗內的 TreasureBox, 將程式腳本附 予至物件上, 如下圖所示 Step22 將寶箱動畫設定 Animation 內的 Play Automatically 勾選取消, 使它在執行 後不會自動播放動作, 如下圖所示 12

Step23 點選 First Person Controller, 並將它的 Tag 設定成為 Player, 如下兩圖所示 13

Step24 完成後執行, 會發現將 FPS 角色移靠近箱子後, 箱子會自動開啟, 如下圖 所示 以下製作使用鍵盤事件開啟寶箱作法 Step01 在 Project 視窗內點選右鍵,Create > Prefab 來新增一個預製物件, 如下圖 所示 14

Step02 並重新命名為 Box, 如下圖所示 Step03 將 Hierarchy 視窗中的 TreasureBox 拖拉至 Project 視窗內的 Box, 將寶箱製 作成為預製物件, 如下圖所示 15

Step04 再次新增一個 JavaScript, 命名為 Control, 如下圖所示 Step05 將以下程式碼全部貼至 Control.js 內 : private var canopen = false; function Update () //When Press G Key, Can_Open_Switch is On if(input.getkey("g")) canopen = true; else canopen = false; 16

Step06 並將 Control 腳本拖拉至 Hierarchy 視窗內的 First Person Controller, 將程 式腳本附予至物件上, 如下圖所示 Step07 在 Hierarchy 視窗中點選 TreasureBox, 按右鍵,Duplicate 複製一個寶箱, 如下圖所示 17

Step08 並位移至較旁邊處, 不要使兩個箱子重疊, 如下圖所示 Step09 將複製出來的寶箱中,OpenBox 腳本下的 Auto Open 勾選取消, 如下圖所 示 18

tep10 按下開始後查看, 角色靠近第一個箱子時, 第一個箱子會自動開啟, 而靠 近第二個箱子時, 並不會自動開啟, 而是要在靠近箱子後, 按下鍵盤中的 G 鍵, 寶箱才會開啟, 如下圖所示 Step11 全部完成後儲存場景, 命名為 OpenBoxExample, 即可完成本範例, 如下 圖所示 19

十一 3D 場景中常用互動效果 11.1 雙攝影機切換效果 Step01 設置兩個攝影機 Step02 一個可使用 look scripts + FPS scripts Step03 一個可使用攝影機縮放 scripts Step04 兩個皆加入攝影機切換 scripts Step05 就可以完成 FPS 視角與第二監視器視角相互切換 攝影機縮放 scripts var x:float; var y:float; var cameraview:float; function OnGUI () if(gui.repeatbutton(rect(0,0,60,30),"zoom+")) x= Time.deltaTime * cameraview; camera.fieldofview+=x; if(gui.repeatbutton(rect(70,0,60,30),"zoom-")) y= Time.deltaTime * cameraview; camera.fieldofview-=y; 直接運行即可 攝影機切換 scripts var camera0 : Camera; var camera1 : Camera; function Update () if (Input.GetKey ("1")) camera1.enabled = true; camera0.enabled = false; if (Input.GetKey ("2")) 20

camera1.enabled = false; camera0.enabled = true; function OnGUI () GUI.Box (Rect (10,10,100,90), "Camera Switch"); // Make the first button. If it is pressed, Application.Loadlevel (1) will be executed if (GUI.Button (Rect (20,40,80,20), "Camera 1")) camera1.enabled = true; camera0.enabled = false; // Make the second button. if (GUI.Button (Rect (20,70,80,20), "Camera 2")) camera1.enabled = false; camera0.enabled = true; 11.2 FPS 使用滑鼠拖曳剛體物件 Step01 增加 Script 並拉進 FPS 攝影機及可 var spring = 50.0; var damper = 5.0; var drag = 10.0; var angulardrag = 5.0; var distance = 0.2; var attachtocenterofmass = false; private var springjoint : SpringJoint; function Update () 21

if (!Input.GetMouseButtonDown (0)) return; var maincamera = FindCamera(); var hit : RaycastHit; if (!Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), 100)) return; hit, if (!hit.rigidbody hit.rigidbody.iskinematic) return; if (!springjoint) var go = new GameObject("Rigidbody dragger"); body = go.addcomponent ("Rigidbody"); springjoint = go.addcomponent ("SpringJoint"); body.iskinematic = true; springjoint.transform.position = hit.point; if (attachtocenterofmass) var anchor = transform.transformdirection(hit.rigidbody.centerofmass) + hit.rigidbody.transform.position; anchor = springjoint.transform.inversetransformpoint(anchor); springjoint.anchor = anchor; else springjoint.anchor = Vector3.zero; springjoint.spring = spring; springjoint.damper = damper; springjoint.maxdistance = distance; 22

springjoint.connectedbody = hit.rigidbody; StartCoroutine ("DragObject", hit.distance); function DragObject (distance : float) var olddrag = springjoint.connectedbody.drag; var oldangulardrag = springjoint.connectedbody.angulardrag; springjoint.connectedbody.drag = drag; springjoint.connectedbody.angulardrag = angulardrag; var maincamera = FindCamera(); while (Input.GetMouseButton (0)) var ray = maincamera.screenpointtoray (Input.mousePosition); springjoint.transform.position = ray.getpoint(distance); yield; if (springjoint.connectedbody) springjoint.connectedbody.drag = olddrag; springjoint.connectedbody.angulardrag = oldangulardrag; springjoint.connectedbody = null; function FindCamera () if (camera) return camera; else return Camera.main; 23

11.3 FPS 推倒場景物件功能 Step01 增加 Script 並拉進 FPS 攝影機及可 // this script pushes all rigidbodies that the character touches var pushpower = 2.0; function OnControllerColliderHit (hit : ControllerColliderHit) var body : Rigidbody = hit.collider.attachedrigidbody; // no rigidbody if (body == null body.iskinematic) return; // We dont want to push objects below us if (hit.movedirection.y < -0.3) return; // Calculate push direction from move direction, // we only push objects to the sides never up and down var pushdir = Vector3 (hit.movedirection.x, 0, hit.movedirection.z); // If you know how fast your character is trying to move, // then you can also multiply the push velocity by that. // Apply the push body.velocity = pushdir * pushpower; 11.4 FPS 飛行視角與加速前進 Step01 增加 Script 並拉進 FPS 攝影機及可 Step02 按住 Shift 可以加速度前進 var speed = 6.0; var jumpspeed = 8.0; var gravity = 0; private var movedirection = Vector3.zero; private var grounded : boolean = false; function FixedUpdate() my=movedirection.y; movedirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 24

movedirection = transform.transformdirection(movedirection); if (grounded) movedirection *= speed; else movedirection *= speed+transform.position.y/5; movedirection.y=my; if(input.getkey ("e")) transform.translate(0, -1, 0); if (Input.GetKey ("q") ) transform.translate(0, 1, 0); if(input.getkey("left shift")) speed=6*5; else speed=6; movedirection.y -= gravity * Time.deltaTime; var controller : CharacterController = GetComponent(CharacterController); var flags = controller.move(movedirection * Time.deltaTime); grounded = (flags & CollisionFlags.CollidedBelow)!= 0; @script RequireComponent(CharacterController) private var mywalker: FPSWalker=null; var maxheight: float=250; function Start () mywalker = gameobject.getcomponent(fpswalker); @script RequireComponent(FPSWalker) 25