發表文章

目前顯示的是 2013的文章

製作無接縫3D方塊貼圖

圖片

以委託的方式使用簡易手勢與加速規控制

參考文章: C# 事件和Unity3D - http://zijan.iteye.com/blog/871207 以兩點座標求其角度與連線之垂直向量方向 - http://blog.happybean.tw/blog/2012/07/04/javascript-yi-liang-dian-zuo-biao-qiu-qi-jiao-du-yu-lian-xian-zhi-chui-zhi-xiang-liang-fang-xiang NGUI研究院之三种方式监听NGUI的事件方法(七) - http://www.xuanyusong.com/archives/2390 觸控數量 - http://game.ceeger.com/Script/Input/Input.touchCount.html 觸控狀態 - http://game.ceeger.com/Script/Enumerations/TouchPhase/TouchPhase.html 觸控列表 - http://game.ceeger.com/Script/Input/Input.touches.html 獲取觸控 - http://game.ceeger.com/Script/Input/Input.GetTouch.html 不知道該怎麼解釋內容,寫得不是很理想,也不是很懂為什麼這樣用、是不是該這樣理解,感覺有些細節還是沒調整好,反正主要請翻閱『C# 事件和Unity3D』、『NGUI研究院之三种方式监听NGUI的事件方法(七) 』 總之大概是在A腳本內放一些方式去,再到B腳本去監聽A腳本有設定好的函數,不過因為我想有多種控制方式,所以在B腳本可能有可能同時有2.3個函數呼叫同一個函數來控制移動、跳躍、攻擊。 如果理解錯或者寫的不夠好,還請前輩們指正。

以 Rotorz tile system 建構關卡,並製做LightMaping

圖片
1. 於Project將FBX檔案 Generates Lightmaps UVs 勾選

用3dsmax 算 Occlusion map 發生灰度失真的原因

圖片
我的老師教了我們一個簡易的方式算Occlusion map,該注意的地方都注意了,將物件的unwarp uv"塌陷"、Reset X-forms......之類的細節。 但第一次練習時都很正常,最明顯的就是週邊灰度為 RGB 128,128,128 使用練習的模型算起來大概如下圖這樣。

角色站在移動平台上跟隨平台移動的簡易達成方式

圖片
由於角色控制器本身與一般的碰撞體之間沒有摩擦力,自然不可能由踩著的動態物體帶動角色控制器本身。 最簡易的達成方式就是在角色碰到移動體時,讓它成為物體子階層,自然就可以跟隨移動了。

讓角色控制器不斷向前移動

#pragma strict // 宣告私有變數 moveDirection 移動方向 private var moveDirection : Vector3 = Vector3.zero; function Start () { // moveDirection 為目前物件的前方 moveDirection = transform.TransformDirection (Vector3.forward); } function Update () { var controller : CharacterController = GetComponent(CharacterController); // 呼叫 FrowardMove 函數 向前移動 FrowardMove(); // 應用移動角色 controller.Move(moveDirection * Time.deltaTime); } function FrowardMove (){ // 向目前角色控制器的Z軸前進 moveDirection = Vector3(0, 0, 1); moveDirection = transform.TransformDirection(moveDirection); }

Unity 搭配 GUITexture 實現簡易觸控功能

圖片
細節請參考這些網站: 觸控數量: http://game.ceeger.com/Script/Input/Input.touchCount.html 觸控狀態: http://game.ceeger.com/Script/Enumerations/TouchPhase/TouchPhase.html 觸控列表: http://game.ceeger.com/Script/Input/Input.touches.html 獲取觸控: http://game.ceeger.com/Script/Input/Input.GetTouch.html 新增GUITexture物件

用Unity印出行動裝置加速規資訊

圖片
http://u3d.as/content/gripati-digital-entertainment/accelerometer-based-control/2yZ function Update () { // 印出 加速規 x.y.z 數值 print("|X軸"+ Input.acceleration.x + "|Y軸"+ Input.acceleration.y + "|Z軸"+ Input.acceleration.z); } 這篇有說到更詳細的加速規概念,可以連至該頁面參考 http://blog.csdn.net/lijing_hi/article/details/7252954

Unity簡易八方手勢判斷

圖片
有BUG的手勢...... 如果刻意將其它沒有要判斷的手指放在上面會無法正常運行 由於Blogger在判斷大於小於會錯誤,在此放上截圖供對照。 判斷邏輯與簡易版程式碼 #pragma strict // 宣告進入、離開觸控位置陣列 var startPos : Vector2[]; var endPos : Vector2[]; // 公開變數 宣告手勢方向 static var gesturesDir:Vector2 = Vector2.zero; // 設定觸控陣列長度為5 function Start(){    startPos = new Vector2[5];    endPos = new Vector2[5]; } function Update () { // 假使 觸控點大於1 if (Input.touchCount > 0) { // 進行迴圈判斷 for (var h = 0; h < Input.touchCount;++h) { // 將觸碰進入點座標放置相對應陣列 if (Input.GetTouch(h).phase == TouchPhase.Began) { startPos[h] = Input.GetTouch(h).position; } // 將觸碰離開點座標放置相對應陣列 if (Input.GetTouch(h).phase == TouchPhase.Ended) { endPos[h] = Input.GetTouch(h).position; GesturesCtrl(startPos[h],endPos[h]); } } } } function GesturesCtrl (startPoint:Vector2,endPoint:Vector2){ var xDiff : float = endPoint.x - startPoint.x; var yDiff : fl

Pencil+ 日式賽璐璐算圖外掛 教學影片

圖片
材質設定 線框設定 反射與折射 線框筆觸 線框分層 距離衰減 燈光色彩 透視變形 高光圖樣

專題遊戲美術心得:遊戲模型的點焊接處理 - 頭與身體是否該完全分離?

圖片
這個類別接著都會發一些比較短的處理心得文,希望幫得上其它也在學習的朋友。 在製作一個人物模型時,要考慮到遊戲的風格、角色特性還有動的時候會出現哪些問題。 像這個例子就是3D人員在建模時把身體跟頭部分開建模,但沒有焊起來就交給另一位人員處理權重,在動的時候就會出現這種雖然很小但也很嚴重的破綻。 雖然某些部分這樣處理或許沒問題,但為調整權重,還是建議將這些點焊起來。

以滑鼠、觸控方式判斷並觸發物件

圖片
因為某些需求,需要用觸控、滑鼠點擊物件的方式去觸發函數,可以嘗試使用這個方式。 不過判斷沒寫得很詳細,相信如果搞懂這個方式,應該有足夠能力寫更細部的判斷(圖層、標籤、距離、不同滑鼠或觸控動作) 將腳本撰寫好後拖拉到攝影機上就可以使用了。 #pragma strict // 宣告 私有 射線判斷距離 private var rayDistance : float = 100.0; function Update () { touchRay(); mouseRay(); } // 觸控碰觸物件判斷 function touchRay(){ // 假使 觸控點 大於1 if (Input.touchCount > 0){ // 迴圈判斷觸控點 for (var i = 0; i < Input.touchCount; ++i) { // 假使 觸控進入 if (Input.GetTouch(i).phase == TouchPhase.Began) { // 宣告射線,由鏡頭觸控座標射出 var ray = Camera.main.ScreenPointToRay (Input.GetTouch(i).position); var hit : RaycastHit; // 假使碰觸到物件 且距離於 rayDistance 內 if (Physics.Raycast (ray , hit , rayDistance) ){ // 將碰觸物件材質球顏色 改為 紅色 hit.collider.renderer.material.color = Color.red; } } } } } // 滑鼠游標碰觸物件判斷 function mouseRay(){ var ray : Ray = camera.ScreenPointToRay (Input.mousePosition); var hit : RaycastHit; // 畫出黃色射線於編輯器 Debug.DrawRay (ray.origin, ray.direction * rayDistance, Color.yellow); if (Physics.Raycas

一個算完整的敵人AI原型程式碼

圖片
參考『Unity遊戲開發實戰』練習寫的敵人AI,想做得功能多一些,不過行為過於複雜,就先大概寫這樣的結構了。 因為主要是想放在移動裝置上的橫向平台遊戲,沒要做太複雜的判斷跟行為,但又希望考慮到擴展性(沿用到別的PC遊戲作品),所以在敵人狀態上用距離、角度,來做警戒、攻擊、追擊的不同判斷。 找時間再延伸讓警戒到一定程度,繼續追擊到攻擊範圍...... 應該有些細節還不是很成熟,但希望能幫上大家 :) 之前都是用updata撰寫,不過最後會一堆boolean很複雜、麻煩,這個方式還蠻不錯的,雖然會多好多自定義的fnuction,不知道這種方式是好是壞,希望有前輩能夠給些意見、想法。 另外附上我練習用的while迴圈,練習這個才搞懂為什麼這樣子寫...... #pragma strict var while1Int:int; // While迴圈1計次 var while2Int:int; // While迴圈2計次 var while3Int:int; // While迴圈2計次 function Start () { while(true){ print("進入While迴圈1"); yield testWhile1(); // 呼叫執行 testWhile1 print("進入While迴圈2"); yield testWhile2(); // 呼叫執行 testWhile2 print("進入While迴圈3"); yield testWhile3(); // 呼叫執行 testWhile3 } } function testWhile1(){ while(true){ print("進行While迴圈1"); while1Int++; // 累加While迴圈1計次 yield WaitForSeconds (3.0); // 延遲 3.0 秒 if (while1Int >= 3){ // 假使 迴圈計次 大於等於3 時  while1Int = 0; // 歸零 迴

BonesPro Copy Bones 應用於模型稍微修改、調整的權重轉移

圖片
如果常常修改、微調模型,可以使用這個方式備份、轉移權重資料。 不過像本範例變化太大,凸一塊大肚子,就還得多加設定細節,可能要用像下列影片類似肌肉處理的方式去解決。 第一步: 將修改好的模型座標與舊的模型重疊,並下BonesPro指令 第二步: 選擇紅框內的Copy bones from another BonesPro,並選擇來源模型即可。

以iPi Mocap Studio 2搭配單台Kinect捕捉動作至3dsMax CAT

圖片
本文主要以單台Kinect搭配 iPi Recorder 2 擷取深度影像並使用iPi Mocap Studio 2捕捉人體動作資料,並以3dsMax搭配MotionBuilder使CAT骨架系統使用該動作資料。 使用Kinect來做動作捕捉雖然不是最好、最精確的解決方案,但是能以較小的空間、較少的裝置來進行動作捕捉,算是種能普及、家用的動作擷取方式。 想必此種方式能為小型工作室、實驗單位節省較大經費、空間的動作捕捉系統成本。 動作捕捉系統主要有以下幾種類型 電磁式 機械式 光學式 被動光學式 超音波式 光纖式 陀螺儀式 影像式 在這裡談的Kinect使採用影像式的方式,以紅外線脈衝照射物體反射,搭配CMOS圖像感測器接收反射紅外線,來進行深度資料的分析辨識。 iPi Mocap Studio 2能同時分析多台Kinect的深度資料,以免某些人體動作會出現遮擋的姿勢,而缺少某些角度的深度資料,造成部分動作無法分析辨識。 這裡示範主要以單台Kinect,就不為雙台Kinect的處理多加描述。 首先要先下載並安裝iPi Recorder以及iPi Mocap Studio,iPi Recorder是拿來錄製深度資料用、iPi Mocap Studio則是拿來解析深度資料以及輸出動作資料檔。 並且要安裝Kinect for Windows SDK,讓Windows能夠正常驅動Kinect。 而後開啟iPi Recorder進行影像錄製的動作。 iPi Recorder 軟體介面 基本的設定完後會進入Evaluation的設定區域,這邊應該是為了校正背景的地面、高度,調校完後盡可能不要移動到裝置,並且在移動到之後再回到此處重新調校。 調校完後就可以開始錄製了,錄製時盡可能讓整個身體都能讓裝置讀取到,並且注意腳掌不要被遮擋,大動作注意盡可能不要有跑到身後而缺少部分深度資料的情況,可以盡可能面對裝置,真的無法避免則考慮使用雙Kinect,以不同角度擷取到被遮擋部分的深度資料。 並建議在要判讀的動作前,擺T-Pose,在擷取動作時比較好對應第一個位置。 左手被軀體遮擋而缺少部分深度資料,且腳掌也稍微沒有判讀到 錄製完畢之後則換使用iPi Mocap Studio 2來進行動作資料的

製作遊戲專題的經驗分享與學習方向 - 1

圖片
因為剛開始大家都是菜鳥,除了美術通常都是從小對畫圖有興趣且有非常穩固的基礎,不像在下就算有興趣也一直畫出鬼畫符,然後...... 回歸正題,通常大家都是剛開始組一個團隊來製作遊戲,該注意哪些地方? 成員組成 自己在團隊中的定位 溝通與討論方式 一般人會習慣找最熟的朋友、同學、小圈圈來當作自己組員,這樣是有溝通討論比較不會尷尬的優點,但是遊戲製作不像動畫比較單純,動畫可能一群美術很強的人就可以比較順利的製作,頂多碰到一些技術上的問題,但遊戲不是,美術、企劃、程式甚至行銷與管理,只要缺任何一個環節,都會碰上蠻大的問題......小至不斷修改調整、大至做出的東西很可怕,最好是找能互補的夥伴。『我美術差但程式邏輯好、妳美術好但程式邏輯差、她都普普但很有想法,程式、美術、行銷與企劃就都有了』而當團隊出來了,就是要清楚定義自己在團隊中的位置了,尤其屬性類似的人,更要定清楚自己處理的環節,不再是像以前『我會甚麼,我做甚麼』『老師教甚麼,我做甚麼』,如果屬性不同,這樣可以直接把擅長哪方面的人指派類似的工作,但如果大家都很類似,那就勢必要有些人是以邊學邊做的方式去執行。 而在工作也分配好了,最麻煩的就是溝通了,這個部份我自己也還在學習,總之要善待你的伙伴們,並多和不同工作的人溝通處理工作內容的方式,而不是自己埋頭苦幹,結果後面接續要處理的夥伴卻很頭痛你的工作方式。 那麼再來討論學習方向,但因為遊戲製作不像動畫這樣細緻,但是牽動的範圍廣,所以先就3D遊戲與動畫,比較差異的幾個點。 人物角色通常沒有 表情變化  - 骨骼、變形動畫較單純  人物 動作通常是循環 的 - 待機、行走、攻擊、跳躍,做好動畫就只要用程式控制切換 看得到的場景 就要做好,而且不能出現破綻 - 動畫只要分鏡畫好就可以確認場景要注意哪些地方,但遊戲不是,你還要去模擬玩家會接觸的區域,以免玩家走過去看到模型、地圖邊界的破綻   比起遊戲內容的遊戲劇情以及第一印象的視覺設計, 互動 更重要 - 把人物場景做得漂漂亮亮或者有很龐大的世界觀與劇情,但是如果人物踏出去第一步就出問題、怪物砍下去完全沒反應、沒辦法跟NPC對話,那麼這個遊戲也只是一個好看的空殼。  所以團隊中的企劃需要列清楚該人物有哪些種動作動畫,以及會怎麼切換動作狀態,才有辦

2. 提出構思與尋找案例

圖片
在大學相關科系的專題中,最初通常都是要學生提出一個構思,我覺得構思提出不是問題,重點是這個構思的層次以及是否只是做一個別人做過的東西。 我們以『 南台科大多樂系的專題 』做為一個例子,它們會在提案時要求學生針對要製作的作品平台類型(動畫?遊戲?影音?)做廣泛的作品分析,我個人碰到的問題,他們所做的就是非常好的解決方法。 相關文件 譬如你想到一個不錯的遊戲構思,但如果你沒有謹慎規畫就開始做,肯定要浪費許多時間在調整內容與規畫,就算規畫也調整內容了,總會有些不合常理與邏輯的地方,又要浪費更多時間,該怎麼省下這些時間? 最好的辦法就是廣泛地蒐集跟你的構思類似甚至類型不同的作品,去做功能、操作、風格......種種分析,並互相比較,再跟自己的構想比較,自己的構想哪裡不完整?自己的遊戲特色又在哪裡?是否有辦法異中求同、同中求異? 尤其要盡可能讓自己的構思、內容,與市面上產品做差異、特色化,不然只是複製一個不錯的作品,但永遠沒辦法超越框架。 而構思的整理,我個人是習慣用心智圖、流程圖的方式去列出來,盡可能簡化文字,方便瀏覽,再詳細描述,而不是一口氣就把想到的全部說完,這樣不夠謹慎,很可能漏了一些不錯的修正方式,卻不自知。 提案的內容就有點像學生專題的期初審查,不過許多人包括我自己在第一次提案的時候,並沒有謹慎的去做案例的搜尋,導致某些細節沒有注意到,之後還要一直修改、調整。 最好一開始就把類似的遊戲作品,甚至遊戲設定劇情的相關書籍、小說、遊戲資料都翻過一次,並盡可能做分析,一個成熟的好構思,除了工作經驗與人生歷練,肯定還要建築在其他作品上。

1. 遊戲製作學習前言

這個系列文章希望能整理一些概念跟內容給剛開始學習的朋友,我也還在學習,但碰到許多小問題以及需要注意的地方,或許某些部分不如業界的前輩專業,但希望能夠提供學弟妹們參考,以免重複犯錯、浪費時間。 並且文章會隨時整理、調整內容,如果有錯誤的地方,希望網友們能給我些建議讓我修正。 就我個人理解來說,製作動畫需要考量的比起遊戲相對得少,只要將劇情分鏡與角色搞定,基本上工具只是影響效率跟些微的品質,頂多因為經驗與技術,沒辦法把劇情或人物做得很吸引人。 但遊戲製作不一樣,你不只要考慮動畫製作可能會考慮到的,還得考慮到遊戲互動還有開發程式的問題,尤其一個完整團隊裡的成員會有性質差異較大的情況,要如何互相溝通、協調不同領域但需要結合的內容,更是一個大問題。 遊戲的製作流程大概如下: 提出構想 → 撰寫草案 → 討論評估 → 企劃階段 → 製作階段 → 控制與發布 其實想談的內容在許多遊戲開發的書籍都詳細介紹過,但想在這裡穿插一些自己所碰到的問題與例子。 希望如果真的對這方面有興趣,務必多翻閱資料文獻,遊戲製作更需要理解許多不同的事物,尤其做為偏向企劃或團隊管理者,也應該嘗試接觸不同領域的事物(不用熟、但要懂跟知道),以免跟各種不同的人溝通協調時,因為自己腦中知識缺乏,造成溝通與調配上的障礙。 而一個團隊主要會有這幾種類型的成員: 『美術』『程式』『行銷』『企劃』以及核心的『管理』 美術,處理造型設計甚至3D建模,以及介面的繪製,甚至協助形象包裝。在學生專題製作通常會需要設計遊戲角色、畫GUI、建人物與場景的模型並畫上貼圖,以及處理海報、企劃書美編、週邊商品的設計繪製。 程式,將企劃中的功能用程式、引擎製作出來,並盡可能保持運作流暢。在專題製作時可能還與美術之間協調一些需要動用到美術的功能,例如遊戲特效。 行銷,調查與分析市場趨勢以及規劃行銷策略。這個工作在專題中通常絕大多數都是美術或者企劃在做,或者共同討論投票。 企劃、管理,設定一個作品的所有設定、規範、資料以及工作,並規劃製作時程表。通常學生專題會兩個同一個人做,組長兼企劃跟管理的工作,甚至還要包寫程式。 在這裡推薦一些個人覺得值得參考相關書籍與資源 製作與企劃方面可以參考: 『 數位遊戲設計達人講座 』談論非常詳細的企劃製作內容 『 創意思考與訓練 』『 超高效心智圖學習法 』在

Uinty即時測試Android開發應用

圖片
在開發Android的應用時,控制時常會考慮使用觸控,但一般開發環境是Windows,滑鼠的游標無法觸發觸控,這時候就得考慮將執行平台改為Android,但要一直將檔案匯出、安裝,會浪費許多時間。 我的專題老師跟我建議一種方式,利用Uinty的Remote應用,來連結Uinty編輯器與智慧型裝置。 首先你需要先做以下的準備 要測試的Android平板、手機,需要安裝 這個應用 開發的PC需要安裝 Android SDK ,安裝後需要下載相關檔案 接著還要安裝Android的驅動,請參考 這篇文章 進行驅動的安裝。 安裝完後請開啟Unity設定Android SDK路徑,設定於方才安裝的路徑。 接著先將裝置與開發PC連接,並開啟該Remote App,再開啟Uinty執行,就可以即時做控制測試了,但裝置上的畫面、畫質會比較差、延遲,所以主要還是要看PC上的畫面。

一個簡易的兩點移動巡邏AI

圖片
因為單純要寫一個敵人AI在兩個端點移動並待機幾秒,所以這個程式沒有寫得很複雜。 主要用四個布林來判斷狀態,分別為 行走 、 待機 、 是否面對方向 、 是否到達巡邏點 待機開始時,會先關閉判斷是否到達巡邏點的布林,所以在開頭會以 #pragma strict var pointA : Transform; // 巡邏點A var pointB : Transform; // 巡邏點B var lookAtTarget : Transform; // 目前巡邏 var lookAtPos: Vector3; // 目前巡邏點座標 var lookAtPoint :int = 1; // 預設巡邏點 var Gravity : float = 20.0; // 重力 var walkSpeed : float = 1.0; // 走路速度 var idleTimes : float = 3.0; // 待機時間 // ------- 狀態布林 ---------- // : 行走、待機、面對方向、到達巡邏點 var walk:boolean; var idle:boolean; var isFaced:boolean; var inPoint:boolean; private var MoveDirection : Vector3 = Vector3.zero; function Start () { idle = true; inPoint = true; } 來進行初始化的動作。 在物件結構上,會建立一個空物件(Empry),底下分別擺放敵人模型、巡邏點A(Empry)、巡邏點B(Empry),並將兩個巡邏點拉到開頭宣告的兩個 Transform。 而在每個影格不斷反覆確認各種狀態,行走第一次則要先確認是否面對著下個要巡邏的位置,且不斷進行行走與判斷是否到達巡邏點的函數。 function Update () { // 假使 走路狀態 為真 if (walk) { // 假使 面向巡邏點 為否 if (!isFaced) { // 執行 面向巡邏點 函數 FaceToPoint(); } // 執行 行走 函數 Walking(

Unity 判斷兩物之間距離、角度,並注視目標

圖片
當要開始撰寫一個敵人AI時,總會有許多需要做判斷與偵測的,在這裡我們將最基本的距離與角度判斷稍作撰寫,判斷兩個GameObject的Position距離,並以數學公式計算之間的水平角度。 相信可以用這個基礎程式延伸撰寫為一個敵人角色的AI。 var target : Transform; // 宣告 注視目標 var viewAngle :float = 20.0; // 尋敵角度 var viewDis : float = 8.0; // 尋敵距離 function Update() { // 宣告 dis 浮點數 為 本身與目標之間距離 var dis : float=Vector3.Distance(transform.position, target.transform.position); // 距離小於 8.0 則 if (dis < viewDis) { // 宣告 注視目標座標 為 目標位置 var lookAtPos : Vector3 = target.position; // 本身與目標之間相對位置 var relative : Vector3 = transform.InverseTransformPoint(lookAtPos); // 計算兩者之間角度 var angle : float = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg; // 兩者角度絕對值 小於 尋迪角度 則 if (Mathf.Abs(angle) < viewAngle) {    // 注視目標座標Y軸 為 自身Y軸    lookAtPos.y = transform.position.y; // 注視目標    transform.LookAt (lookAtPos); } } }

Uinty Mecanim 練習與心得

圖片
Mecanim是Unity 4.0 新增的一個角色動畫系統,細節跟官方的構想不是很清楚,但目前各人感覺最方便的幾個點就是"方便共用動畫",它有點類似遊戲引擎官方做一個公共骨骼,將每個人的骨骼連結到公共的骨骼上,動畫也綁到公共骨骼,就可以一個動畫多模型使用。 並且以往遊戲角色動畫偏向設計為"原地行走",這個動畫系統的範本卻做成"向前行走",轉向也是一樣不再是原地,而有位移(跳躍還沒實際測試練習)。 所以使用這個動畫系統也可以考慮將移動動畫做成有位移的。 這次練習是使用3dsmax的CAT系統,參考  3ds Max CAT四足动物动作调节详解 - CAT路径动画设置  製作向前、轉圈的行走動畫。 在Unity的Mecanim設定混合樹時參考  新动画系统Mecanim的简单图文教程  來設定混合樹的條件、參數與變數。 控制的程式碼則參考  Unity3d 4.0新动画系统Mecanim用法(二)  並嘗試以javascript來撰寫。 以下是程式碼,如果有將倒退動畫設定進去,應該也可以沿用,程式碼跟舊的方式一樣,拖曳到角色身上即可。 不過仔細看影片發現,新版的將人物重力系統弄為Rigibody,而不是Charactr Controller,這可能還要再花點時間研究。 #pragma strict // 宣告動畫參數:移動 | 方向 var walk:float; var direction:float; // 宣告 animator為Animator var animator : Animator; function Start () { // animator 為物件的Animator animator = gameObject.GetComponent(Animator); } function Update () { // 動畫參數 為 鍵盤水平、垂直參數 walk = Input.GetAxis("Vertical"); direction = Input.GetAxis("Horizontal"); if(animator) { // 設定 物件上Animator變數,播放相對應動畫 animator.SetFloat(