chp1.安裝unity | |||||
安裝各種版本 |
1.參考:unity的安裝教學影片: |
基礎部分: chp1-1.建立物件,平移,旋轉,縮放,rigidbody,物理材質 |
|||||
範例1-1 |
範例1-1:建立三個可以彈跳的物件 |
chp1-2.建立群組物件,預鑄物件prefab | |||||
範例1-2 |
範例1-2:建立建立群組物件,預鑄物件prefab |
chp1-3.攝影機基本技巧(1):第一人稱視角控制器(使用FPS:First Person Controller) | |||||
範例1-3 |
範例1-3:chp1-3.攝影機基本技巧(1):第一人稱視角控制器(使用FPS:First Person Controller) |
chp1-4.攝影機基本技巧(2):第一人稱視角移動(使用main camera) | |||||
範例1-4 |
chp1-4.攝影機基本技巧(2):第一人稱視角移動(使用main camera) |
範例1-5.飄動的國旗 | |||||
範例1-5 |
範例1-5.飄動的國旗 |
chp1-6.貼圖與燈光的基本操作 | |||||
範例1-6 |
chp1-6.貼圖與燈光的基本操作 |
基礎部分:範例2-1:使用c#輸出訊息 | |||||
範例2-1 |
專案成果圖片 |
範例2-2:(打直球保齡球)c#控制物件的旋轉與移動 | |||||
範例2-2 |
成果圖片,
成果圖片 |
範例2-3:(設定參數打彎曲旋轉保齡球)若c#宣告public變數,則變數可與面板的參數結合 | |||||
範例2-3 |
成果圖片,
成果圖片,
成果圖片,
成果圖片 |
範例2-4:(第一人稱視角踢足球)c#用鍵盤來控制左右移動,左右轉動(方法1:使用Input.GetKeyDown()) | |||||
範例2-4 |
成果圖片 |
範例2-5:c#用鍵盤來控制輸入(方法2:使用Input Manager) | |||||
範例2-5 |
專案成果圖片1,圖片2,圖片3 |
範例2-6:c#的UGUI界面(unity GUI= Graphic User Interface, gu e) | |||||
範例2-6 |
專案成果圖片 |
範例2-7:GUI界面:一開始就在label顯示(一分鐘後結束,目前日期時間) | |||||
範例2-7 |
成果圖片 |
範例2-8:GUI界面:button顯示文字,button計算兩數相加(三個InputField) | |||||
範例2-8 |
成果圖片 |
範例2-9:GUI界面:兩數字if比較大小(2個inputField,一個button) | |||||
範例2-9 |
成果圖片 |
範例2-10:GUI界面:inputField直接控制改變足球轉速 | |||||
範例2-10 |
成果圖片 |
範例2-11:GUI界面:inputField+button控制高爾夫入洞 | |||||
範例2-10 |
成果圖片 |
【chp3.建立自然地形terrain:山地,湖泊,河流,樹木,草地,風力】 |
|||||
範例3-1:建立大自然地形terrain,地形貼圖 | |||||
範例3-1 |
專案成果圖片 |
範例3-2:建立天空,建立火山(丘陵),建立湖泊,建立樹木 | |||||
範例3-2 |
專案成果圖片 |
範例3-3:建立樹木的4種方法:terrain種樹工具,樹木生成器,風力 | |||||
範例3-3 |
成果圖片 |
範例3-4:建立草地的4種方法,建立石頭方法 | |||||
範例3-4 |
成果圖片 |
範例3-5:火山爆發,產生煙霧(粒子生成器),設定音效 | |||||
範例3-5 |
成果圖片 |
範例3-6:鄉間小屋導覽虛擬實境VR動畫:第一人稱導覽動畫,輸出.exe動畫 | |||||
成果圖片 |
【chp4.建立可以走動的主角:角色Characters,動作Animations,動作控制器Animator Controller】 |
|||||
範例4-1:在大峽谷內走路跑步蹲下跳(使用standard asset之第三人視角的角色),遊戲切換場景的方法 | |||||
範例4-1 |
成果圖片 |
範例4-2:讓我的主角跳街舞(使用Mixamo快速建立各種角色與動作),修正匯入FBX的貼圖錯誤 | |||||
範例4-2 |
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片,
成果圖片 |
範例4-3:使用unity chan快速建立各種角色與動作(閒置,走,跑,跌倒,拳擊) | |||||
範例4-3 |
成果圖片 |
範例4-4:角色種類2:用不需要程式碼的3D角色與動作(wait,walk),不需要程式碼就能移動 | |||||
範例4-4 |
成果圖片 |
範例4-5:Input Manager控制unity chan走路(但問題:無法旋轉) | |||||
成果圖片 |
範例4-6:正確鍵盤控制角色運動的第一種方法(local坐標控制:↑ ↓前進後退。 → ←控制旋轉) | |||||
成果圖片 |
範例4-7:正確鍵盤控制角色運動的第二種方法(global坐標控制:↑ 往北,↓往南, →往東,←往西)結合Input Manager | |||||
成果圖片 |
【chp6.程式碼建立節點物件,改變節點組件參數】 |
|||||
範例6-1:程式碼建立一個新的cube物件 | |||||
範例6-1:程式碼建立一個新的cylinder物件 |
範例6-2:程式碼修改一個cube物件,材質為紅色,透明度為90(1~255) | |||||
1.第1種做法(最好,推薦):設定顏色透明度四個參數(完全程式碼控制) |
範例6-3:點按一個cube物件,播放音效 | |||||
成果圖片 |
範例6-4:一個cube物件,再程式碼隱藏 | |||||
11.如何程式碼設定物件隱藏: |
範例6-5:先隱藏一個cube物件,再程式碼顯示 | |||||
|
6-7:程式碼建立的物件節點,如何自動產生某個組件,例如navMeshAgent(RequireComponent) | |||||
☎參考影片:RPG Enemy Set States 設置敵人的基本屬性和狀態 |
【chp7.滑鼠事件,觸控事件】 | |||||
7-1:觸控事件的程式碼有兩種寫法 | |||||
3.觸控程式碼有兩種寫法: |
7-2:如何做『ray射線』檢測(紅外線) | |||||
6.如何做『射線』檢測(紅外線) |
7-3:如何取得射線ray,點按觸碰點的物件的資料(名稱,位置) | |||||
12.如何取得射線ray,點按觸碰點的物件的資料(名稱,位置) |
7-4:如何在程式碼,顯示觸控射線點位置圓圈(以淡黃色,透明100圓圈顯示) | |||||
12.如何在程式碼,顯示觸控點位置圓圈(以淡黃色,透明100圓圈顯示) |
7-5:如何觸控射線,讓角色unityChan緩動有各種動作動畫(idle,walk,jump) | |||||
☎關鍵指令:設定animtor的參數status=2,agent1.GetComponent<Animator>().SetInteger("status", 2);
|
7-6:複合物件(小蜜蜂)如何觸控點按能夠有反應 | |||||
成果影片 |
【chp8.節點物件的運動方法1:移動,旋轉,縮放】 | |||||
範例8-1:如何程式碼設定一個cube的大小 | |||||
|
8-2:移動,有兩種位移法:(1)再移動dx,(2)移動到某坐標點 | |||||
1.移動,有兩種位移法:(1)再移動dx,(2)移動到某坐標點 |
8-3.移動,有兩種速度呈現法:(1)緩動,(2)瞬間移動到某坐標點 | |||||
8-3.移動,有兩種速度呈現法:(1)緩動,(2)瞬間移動到某坐標點 |
8-4.Vector有兩種:單位向量Vector3.left,new Vedtor3(2,2,0) | |||||
8-4.Vector有兩種:單位向量Vector3.left,new Vedtor3(2,2,0) |
8-5.unity的角度有5種,unity的旋轉方式有5種 | |||||
1.unity的角度有5種,unity的旋轉方式有5種 |
範例8-6:用幀動畫來控制直升機移動:上下、左移右移、左轉右轉 | |||||
1.直升機向上移動的方法:採用幀動畫(frame animation) |
8-7:AddForce(單位向量)來施力讓物體移動 | |||||
☎參考網頁:Addforce,RequireComponent |
範例8-8:複合物件(小蜜蜂)如何觸控點按後就能向上移動1秒 | |||||
成果影片 |
範例8-9:複合物件(小蜜蜂)如何觸控點按後就以鏡頭camera垂直方向forward遠離鏡頭1秒 | |||||
成果影片 |
範例8-15:計算兩個物件(agent1與圓圈)的距離 | |||||
13.計算兩個物件(agent1與圓圈)的距離: |
【chp9.節點物件的運動方法2:緩動移動(導航網格navMesh,Time.deltaTime)】 | |||||
範例9-1:要讓角色緩動(在一段時間內移動到目的地),有兩種方法:導航網格navMesh,Time.deltaTime | |||||
1.要讓角色緩動(在一段時間內移動到目的地),有兩種方法:Time.deltaTime法,導航網格法 |
9-2:導航網格navMesh | |||||
☎導航網格navMesh |
9-3:導航網格的特殊功能1:兩點之間跳躍(等高點的跳躍) | |||||
☎5.導航網格的特殊功能1:兩點之間跳躍(等高點的跳躍) |
9-4:導航網格的特殊功能2:兩點之間跳躍(高低點的跳躍) | |||||
☎6.導航網格的特殊功能2:兩點之間跳躍(高低點的跳躍) |
9-5:如何修正:導航網格轉成AR(Vuforia)的錯誤:角色會浮在空中 | |||||
☎如何修正:導航網格轉成AR(Vuforia)的錯誤:角色會浮在空中 |
範例9-6:實作主角膠囊在導航網格內,自由觸控移動 | |||||
☎參考影片:导航网格的使用 |
範例9-7:實作主角unityChan在導航網格內,自由觸控移動+動作(idle,walk,jump) | |||||
成果影片 |
9-8:unity的導航網格無法做到移動,如何修正 | |||||
☎注意:unity的官網說明,導航網格navMesh,是無法支援移動中的網格。 |
9-9:導航網格的主角,如何不動就idle,特定位置則jump,否則walk | |||||
(0)舉例:主角unitychan,觸碰link2就跳躍jump,導航就walk,到了目的地就idle |
範例9-10:實作主角unityChan的極限體能王過關遊戲 | |||||
成果影片,
成果影片+製作步驟 |
【chp10.射擊遊戲,不斷生成的prefab】 | |||||
10-1.如何設定怪物不斷生成產生 | |||||
10-1.如何設定怪物不斷生成產生 |
10-2.兩種計時器(Invoke,InvokeRepeating)與各種計時器指令 | |||||
☎計時器的各種指令用法: |
10-3.使用生成指令Instantiate(實例),在某物件A的位置,生成新物件B | |||||
☎生成指令Instantiate的用法: |
10-4.如何讓怪物monster亂數左右移動(蛇形走位) | |||||
☎如何讓怪物monster亂數左右移動(蛇形走位): |
10-5.從某個角色物件Cube-player,如何不斷發射子彈prefab(Sphere-bullet) | |||||
|
10-6.按鈕fire才開火(會飛的子彈),按鈕取消開火 | |||||
11.如何按鈕fire,才開火(會飛的子彈) |
範例10-7.直升機fire攻擊不斷來襲的敵機 | |||||
成果影片,
|
10-8.在dx=(-30, 30)之間產生隨機亂數,移動dx位移 | |||||
|
10-9.如何讓產生的生成物件Instantiate,在5秒後消失 | |||||
|
10-10.在原地不斷生成怪物 | |||||
1.從asset讀入怪物prefab |
【chp11.節點物件的碰撞事件1】 | |||||
11-1:碰撞事件有2種處理方式:Collision碰撞,Trigger觸發 | |||||
☎ 碰撞的觀念: |
11-2:Trigger觸發碰撞事件的設定方法(最常用的碰撞方式) | |||||
(1)Trigger觸發碰撞的特色: |
11-3:如何設定碰撞時的粒子動畫效果(例如,顯示爆炸prefab) | |||||
9.如何設定子彈打到怪物爆炸效果,顯示爆炸prefab |
11-4:被關卡撞到,如何顯示煙霧動畫 | |||||
[Tooltip("敵方被KO的煙霧動畫prefab")] |
11-5:為什麼設定碰撞的音效,沒有出現,如何解決(子彈打到怪物播放爆炸聲音) | |||||
(1)錯誤做法:若在bullet_prefab裡面加上audioSource組件,拖曵到clip,在程式碼裡面讓getComponent<AudioSource>().plaey |
11-6:開啟爆炸範圍,任何進入範圍內的怪物都會被爆炸 | |||||
1.顯示爆炸動畫/播放音效,打開爆炸box collider,3秒後關閉 |
【chp13.切換場景】 | |||||
13-1:切換場景的基本指令 | |||||
☎ 10.如何切換場景: |
範例13-2:遊戲失敗產生Game Over畫面,方法1:切換場景 | |||||
☎參考影片:Creating a Game Over Scene in Unity |
範例13-3:遊戲失敗產生Game Over畫面,方法2:顯示圖片(隱藏的圖片,用public讀入後顯示) | |||||
☎若用Image當作GameOver畫面,要replay時,不可以把image隱藏 |
範例13-4:遊戲失敗產生Game Over畫面,方法3:顯示圖片(隱藏圖片物件,用程式碼類別物件顯示) | |||||
☎參考影片:Create great GAME OVER screen in Unity UI |
9-2:導航網格navMesh | |||||
☎導航網格navMesh |
【chp14.分數計算,記分系統】 | |||||
範例14-1:呼叫另外c#檔案的show()函數顯示分數score(方法1:public拖曵設定cs程式碼掛載的物件) | |||||
☎ 兩個cs程式碼檔案,都可以顯示分數score |
範例14-2:呼叫另外c#檔案的show()函數顯示分數score(方法2:GameObject.FindObjectOfType) | |||||
☎ 兩個cs程式碼檔案,都可以顯示分數score |
範例14-3:很多怪物攻擊主角,計算同一個score變數(方法3:GameObject.FindObjectOfType) | |||||
☎ 多個怪物的攻擊主角,都可以修改分數score |
【chp15.RPG的狀態機,主角攻擊怪物,怪物攻擊主角】 | |||||
15-1:狀態機:設定角色的5種狀態 | |||||
☎參考影片:RPG Enemy Set States 設置敵人的基本屬性和狀態 |
15-2:如何判斷角色的狀態是預備態idle | |||||
(0)舉例:主角unitychan,觸碰link2就跳躍jump,導航就walk,到了目的地就idle |
15-3:如何判斷角色的狀態是攻擊態ATTACK | |||||
1.問題點:自動導航navMesh,navMeshAgent的角色攻擊,遇到的問題: |
範例15-4:實作enemy的四種狀態(預備idle,走路walk,攻擊attack,死亡die) | |||||
1.問題點:自動導航navMesh,navMeshAgent的角色攻擊,遇到的問題: |
15-5:如何怪物死亡後,不再繼續自動導航追踪主角(還要設定animator狀態,設定5秒後消失) | |||||
1.當怪物死亡後,除了要設定Animator的狀態外,還要取消追踪主角,否則死亡的怪物,還好繼續移動: |
範例15-6:兩種怪物攻擊主角,主角按炸彈來引爆炸彈 | |||||
1.顯示爆炸動畫/播放音效,打開爆炸box collider,3秒後關閉 |
【chp36.實作打怪的3D遊戲】 |
|||||
範例6-1:建立3D場景 | |||||
成果圖片 |
範例6-2:建立主角john及其動作動畫 | |||||
成果圖片 |
範例6-3:用Unity動作控制器Animator Controller來設定主角john | |||||
成果圖片 |
範例6-4:建立環境,與複雜場景的地形 | |||||
成果圖片 |
範例6-5:三種追踪角色的攝影機技巧:攝影機追踪法,程式碼追踪法,還Cinemachine套件追踪法) | |||||
成果圖片 |
範例6-6:遊戲結束的設定 | |||||
成果圖片 |
範例6-7: 建立建立怪物及其動作動畫,寫c#程式碼控制主角joh與怪物的移動與旋轉 | |||||
成果圖片 |
範例6-8:設定怪物的移動路徑(設定導航網格) | |||||
成果圖片 |
範例6-9:使用導航網格代理(NavMeshAgent),讓怪物自動行走 | |||||
成果圖片 |
範例6-10:C#程式碼設定打擊的武器與子彈顯示方式 | |||||
成果圖片 |
範例6-11:C#程式碼設定打擊怪物時分數計算與遊戲結束判斷 | |||||
成果圖片 |
範例6-12:音效設定 | |||||
成果圖片 |
範例6-13:輸出成最後的各種平台遊戲執行檔(視窗版,android版,網頁版) | |||||
成果圖片 |
範例6-14:用Unity動作控制器Animator Controller來設定主角joh與怪物的各種動作Animations動畫 | |||||
成果圖片 |
應用部分 chp2.第一個3D專案 | |||||
觀看 |
本範例的成果圖片 | ||||
下載 |
下載本章project成果檔案 | ||||
1.new project |
|||||
8.建立一個3D平面(title) |
|||||
8.加入一個按鈕:start |
|||||
13.調整main camera攝影機的位置與角度 |
|||||
chp3.籃球遊戲的材質貼圖 | ||||||
觀看 |
本範例的成果圖片 | |||||
下載 |
下載本章project成果檔案 | |||||
1.new project |
||||||
4.把裡面的檔案拉到models目錄裡面 |
||||||
13.設定背景平面 |
||||||
15.設定籃球為自由落體的物理動作 |
||||||
18.偵測籃球若是投入藍框,就加1分 |
||||||
19.開始寫程式:替籃球加上score.cs |
||||||
22.輸出成pc版本的遊戲 |
||||||
23.輸出成web版本的遊戲 |
||||||
|
||||||
chp4.使用c#寫程式碼:在label顯示(新年快樂,計算器,目前日期時間) | ||||||
觀看 |
本範例的成果圖片 | |||||
下載 |
下載本章project成果檔案 | |||||
1.new project |
||||||
6.建立一個3D平面(背板) |
||||||
5.下載 visual studio code |
||||||
7.在unity的主畫面場景新增一個Text(ui物件) |
||||||
10.開始寫script1程式 |
||||||
11.把場景裡面的textbox1,連結到UIscript1裡面的label1
原理:因為script1裡面宣告為public的變數,都會顯示到場景裡面的UIobject
方法:把textbox1拖曵到label1裡面
成果圖片 |
||||||
(2)若是顯示目前計算器的數字
lable1.text = Time.time.ToString();
(注意:text,time要小寫)
成果圖片 |
||||||
(3)若是顯示目前日期時間
lable1.text = System.DateTime.Now.ToString();
成果圖片 |
||||||
chp5.使用c#寫程式碼:顯示兩數相加的結果(三個InputField) | ||||||
觀看 |
本範例的成果圖片 | |||||
下載 |
下載本章project成果檔案 | |||||
1.new project |
||||||
6.建立一個3D平面(背板) |
||||||
8.在unity的主畫面場景新增1個InputField(ui物件) |
||||||
9.在unity裡面寫一個c#程式 |
||||||
12.把場景裡面的InputField-num1~3,連結到UIscript1裡面的num1,num2,num3 |
||||||
14.加上按鈕 |
||||||
17.到button的on click事件程式,選取doadd() |
||||||
|
||||||
chp6.使用c#寫程式碼:兩個數字if比較大小(2個inputField,一個button) | |||||
觀看 |
本範例的成果圖片 | ||||
下載 |
下載本章project成果檔案 | ||||
1.new project |
|||||
chp7.使用c#寫程式碼:不宣告public變數,計算圓周長(1個inputField,一個button,一個Text) | |||||
觀看 |
本範例的成果圖片 | ||||
下載 |
下載本章project成果檔案 | ||||
1.new project |
|||||
chp8.在OnGUI圖形使用者介面顯示元件 | |||||
目錄 | GUI常見基礎控制項 | exp8_1:顯示目前日期時間 | exp8_2:驗證登入的帳號密碼 | exp8_3:計算兩個數字相加 | |
GUILayout自動佈局常用指令 | exp8_4:GUILayout自動佈局 | ||||
1.GUI功能: |
|||||
3.範例exp8-1:顯示成績分數,顯示目前日期時間 |
|||||
4.範例exp8-2:驗證登入的帳號密碼 |
|||||
5.範例:exp8-3計算兩個數字相加 |
|||||
6.GUILayout自動佈局 |
|||||
7.範例:exp8-4-GUILayout |
|||||
chp9.幽浮2D遊戲 | |||||
觀看 |
本範例的成果圖片1, 圖片2 | ||||
下載 |
下載本章project成果檔案 | ||||
1.new project |
|||||
chp10.幽浮3D遊戲(撿寶物) | |||||
觀看 |
本範例的成果圖片1,圖片2 | ||||
下載 |
下載本章project成果檔案 | ||||
目錄 | 1.建立馬路Road | 9.建立Turn轉角物件 | 12.建立一個球ball | 14.用上下左右鍵(或滑桿)移動ball | |
15.補充:unity中讓Rigidbody移動的方式 | 16.補充:給剛體物體施力,Rigidbody.AddForce(),有四個方法 | 17.補充:unity施力的四種ForceMode | 18.設定攝影機跟著Ball移動 | ||
19.到Asset Store線上商店下載Gem Shader寶石 | 21.(寫程式碼)Ball碰撞到寶石,寶石會消失 | 22.(寫程式碼)在OnGUI()顯示目前得到寶石幾個 | 23.(寫程式碼)在OnGUI()顯示你贏了後,出現按鈕(是否要再玩一次?),若要,則重新開始 | ||
24.若是Ball掉落,就結束遊戲Game Over | 25.設定天空背景圖片 | ||||
1.new project |
|||||
9.設定Turn轉角物件 |
|||||
12.建立一個球 |
|||||
14.然後用上下左右鍵(或滑桿)移動ball |
|||||
15.補充:unity中讓Rigidbody移動的方式 |
|||||
16.補充:給剛體物體施力,Rigidbody.AddForce(),有四個方法: |
|||||
17.補充:unity施力的四種ForceMode |
|||||
18.設定攝影機跟著Ball移動 |
|||||
19.到Asset Store線上商店下載Gem Shader寶石模型 |
|||||
21.(寫程式碼)Ball碰撞到寶石,寶石會消失 |
|||||
22.(寫程式碼)在OnGUI()顯示目前得到寶石幾個 |
|||||
23.(寫程式碼)在OnGUI()顯示你贏了後,出現按鈕(是否要再玩一次?),若要,則重新開始 |
|||||
24.若是Ball掉落,就結束遊戲Game Over |
|||||
25.設定天空背景圖片 |
|||||
chp11.狗狗過馬路3D遊戲 | |||||
觀看 |
本範例的成果圖片1,圖片2 | ||||
下載 |
下載本章project成果檔案 | ||||
目錄 | 1.建立馬路,公園,狗狗,樹木 | 9.建立公園園區物件群組 | 12.讓汽車能夠持續平滑行動的方法Vector3.Lerpl | 15.自動產生物件的方法(Instantiate) | |
16.不斷執行的方法InvokeRepeating | 18.建立不斷自動產生出現的汽車物件 | 23.把不斷累積的物件刪除的方法Destroy | 24.用滑鼠按一下操控物件向前移動 | ||
25.用鍵盤ws前後ad左右操控物件移動 | 26.用上下左右鍵操控物件移動 | 27.用滑鼠操控物件上下左右移動 | 方法1:把3D物件座標,轉換成Screen畫面螢幕座標 | ||
方法2:把滑鼠畫面座標,轉換成world世界座標 | 設定攝影機跟著dog移動 | (觀念)比較:Collision碰撞 vs Trigger觸發 | 28.狗狗碰撞到汽車,則顯示game Over,遊戲結束 | ||
29.game Over後,狗狗無法再移動 | 30.使用GUISkin(圖形使用者介面面板)顯示分數 | ||||
2014年app遊戲排行榜第一名是狗狗過馬路的遊戲(Crossy Road) |
|||||
chp2.第一個3D專案 | |||||
觀看 |
本範例的成果圖片 | ||||
下載 |
下載本章project成果檔案 | ||||
|
|||||