Simple Platform 龍華科技大學多媒體與遊戲發展科學系林志勇編輯, 請勿外流 2013/04/02 Lcy 1
Simple Paltform Toolkit Lcy 2
Simple Paltform Toolkit Lcy 3
控制相機跟人物一起移動 (X,Y 方向 ) PlatformCamera.js Lcy 4
MainCamera PlatformCamera.js Lcy 5
角色移動 CharacterMove.js Lcy 6
控制腳色移動 Peasant CharacterMove.js Lcy 7
CharacterMove.js(1) function FixedUpdate () { MoveHero(); JumpHero(); } function PlayAnimation(AnimName : String) { if (!animation.isplaying(animname)){ } } animation.crossfadequeued(animname, 0.3, QueueMode.PlayNow); Lcy 8
CharacterMove.js(2) 檢查是否靜止 function CheckForIdle() { if (animation.isplaying("run")) { PlayAnimation("idle"); } if (!animation.isplaying){ animation.play("idle"); } } Lcy 9
CharacterMove.js(3) X 軸移動 function MoveHero() { if (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.2) { if (Input.GetAxis("Horizontal") > 0.02){ transform.eulerangles.y = -90; }else if (Input.GetAxis("Horizontal") < -0.02){ transform.eulerangles.y = 90; } transform.translate(vector3.forward * Mathf.Abs(Input.GetAxis("Horizontal")) * Time.deltaTime * 3.5); if (!animation.isplaying("jump")) { PlayAnimation("run"); }; }else{ CheckForIdle(); } } Lcy 10
CharacterMove.js(4) 跳躍 private var nextjump : float; function JumpHero () { if (Input.GetButton("Jump") && nextjump <Time.time) { } } rigidbody.addforce(vector3.up * 25000); PlayAnimation("jump"); nextjump = Time.time + 1; yield WaitForSeconds(0.7); PlayAnimation("idle"); Lcy 11
遊戲結束 GameFinish.js Lcy 12
GameFinish.js 結束遊戲 function OnCollisionEnter(collision : Collision) { for ( var contact : ContactPoint in collision.contacts ) { } } if (contact.othercollider.name == "GameFinish"){ } Application.LoadLevel("gameFinish"); Lcy 13
角色 Lcy 14
角色 (1) Culling Type Always Animate Lcy 15
角色 (2) Mass (100)( 防止不會掉下來 ) Constraints Freeze Position(z)( 防止摔倒 ) Freeze Rotation(x,y,z) Lcy 16
角色 (3) 調整碰撞範圍, 防止掉下去 Center (0,0.75,0) Size (1,1.5,0.5) Lcy 17
從無到有 Lcy 18
File New Project( 開啟新專案 ) 輸入專案名稱 Hero, 點選 Create
載入地形資源 Assets Import Package Terrain Assets
建立地形 Terrain CreateTerrain
設定地形解析度 Terrain Set Resolution Width=500, Height=100, Length=50
設定地形平滑高度 Terrain Flatten Heightmap Height=50
Main Camera( 相機初始參數 ) Position(0,1,-10), Far=1000
Main Camera( 改變相機位置 旋轉角 ) Position(475,50+2.5,40), Rotation(12.5,180,0)
Main Camera( 改變相機位置 旋轉角 ) Clipping Planes(Far 1000 50)
畫地形 提升 / 降低高度 (Raise/Lower Height)
設定繪製高度 (Paint Height) 高度 (Height=50)( 地表面 )
地形材質編輯 (Paint Texture) 將地形貼圖 (GoodDirt) 拖曳到 Texture 及 Normal Map 然後點選採用 (Apply)
Terrain Assets
載入 Terrain Assets Assets Import Package Custom Package TerrainAssets.unitypackage
地形材質編輯 (Paint Texture) 將地形貼圖 (Grass(Hill)) 拖曳到 Texture 及 Normal Map 然後點選採用 (Apply)
種樹 (Place Tree)( 多棵樹 ) 拖曳樹 (Alder) 到 Tree, 然後點選採用 (Apply)
種樹 (Place Tree)( 多棵樹 ) 拖曳樹 (Bamboo) 到 Tree, 然後點選採用 (Apply)
Hierarchy Create Directional Light 新增方向光放在 Main Camera 下, 使燈光跟攝影機一起移動修改攝影機位置及旋轉角
方向光效果
載入 Hero 動畫 Assets Import Package Custom Package Hero.unitypackage
拖曳 Peasant 模型到 Hierarchy
設定 Peasant 模型位置 (Position) 角 度 (Rotation) 比例 (Scale)
增加 Peasant 模型剛體物理性 Component Physics Rigidbidy
修改 Peasant 限制性 (Constraints) 凍結位置 (z 軸 Position) 凍結旋轉 (x,y,z 軸 Rotation)
增加 Peasant 模型碰撞物理性 ( 以免人物掉到地形底下 ) Component Physics Box Collider
Box Collider 原始碰撞中心點 Center(0,0,0) 原始碰撞尺寸範圍 Size(1,1,1)
Box Collider 修改碰撞中心點 Center(0,0.75,0) 修改碰撞尺寸範圍 Size(1,1.5,0.5)
File Save Scene 輸入場景名 HeroS
點選 Assets 空白處 ExportPackage 儲存為 Hero_S0.unitypackage
拖曳 bshlogo 圖檔到 Project Assets
新增腳本程式 Project Create Javascript 改名為 PlatformCamera
PlatformCamera 腳本程式使攝影機跟隨人物 (Hero) 一起移動
PlatformCamera 腳本程式使攝影機跟隨人物 (Hero) 一起移動 #pragma strict var Hero : Transform; function Start () { } function Update () { transform.position.x=hero.position.x; transform.position.y=hero.position.y+2; }
拖曳 PlatformCamera 程式給攝影機拖曳 Peasant 模型給 Hero
新增腳本程式 Project Create Javascript 改名為 Logo
Logo 腳本程式 (1) 在遊戲區顯示 Logo 圖形
#pragma strict var Logo : Texture2D; function Start () { } function OnGUI(){ } Logo 腳本程式 (2) 在遊戲區顯示 Logo 圖形 GUI.DrawTexture(Rect(10,10,80,90), Logo, ScaleMode.StretchToFill, true);
拖曳 Logo 程式給攝影機拖曳 bshlogo 貼圖給 Logo
Logo 效果
新增腳本程式 Project Create Javascript 改名為 CharacterMove
CharacterMove 腳本程式 (1) MoveHero1 讓 Hero 連續移動
#pragma strict function Start () { } CharacterMove 腳本程式 (2) MoveHero1 讓 Hero 連續移動 function Update () { MoveHero1(); } function MoveHero1(){ transform.position.x-=0.1; if (transform.position.x<=50){ transform.position.x=475; } }
拖曳 CharacterMove 程式給 Peasant
PlayAnimation 函數 (1) 判斷動畫是否播放
PlayAnimation 函數 (2) 判斷動畫是否播放 function PlayAnimation(AnimName : String) { if (!animation.isplaying(animname)){ animation.crossfadequeued(animname, 0.3, QueueMode.PlayNow); } }
JumpHero 函數 (1) Hero 跳躍
private var nextjump : float; JumpHero 函數 (2) Hero 跳躍 function JumpHero () { if (Input.GetButton("Jump") && nextjump < Time.time) { rigidbody.addforce(vector3.up * 25000); PlayAnimation("jump"); nextjump = Time.time + 1; yield WaitForSeconds(0.7); PlayAnimation("idle"); } }
CheckForIdle 函數 (1) 檢查是動畫播放狀態
CheckForIdle 函數 (2) 檢查是動畫播放狀態 function CheckForIdle() { if (animation.isplaying("run")){ PlayAnimation("idle"); } if (!animation.isplaying) { animation.play("idle"); } }
MoveHero 函數 (1) 移動 Hero 模型
MoveHero 函數 (2) 移動 Hero 模型 function MoveHero() { if (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.2) { if (Input.GetAxis("Horizontal") > 0.02){ transform.eulerangles.y = -90; }else if (Input.GetAxis("Horizontal") < -0.02){ transform.eulerangles.y = 90; } transform.translate(vector3.forward * Mathf.Abs(Input.GetAxis("Horizontal")) * Time.deltaTime * 3.5); if (!animation.isplaying("jump")){ PlayAnimation("run"); } }else{ CheckForIdle(); } }
OnCollisionEnter 函數 (1) 偵測碰撞
OnCollisionEnter 函數 (2) 偵測碰撞 function OnCollisionEnter(collision : Collision) { for ( var contact : ContactPoint in collision.contacts ) { if (contact.othercollider.name == "GameFinish"){ Application.LoadLevel("gameFinish"); } } }
Hero_S2
載入 Light Flares 資源 Assets Import Package Light Flares
Directional light( 方向光增加 Flare 效果 ) Component Effects Lens Flare
50mm Zoom 拖曳到 Flare
Flare 效果
載入天空資源 Assets Import Package Skyboxes
編輯 渲染設定 Edit Render Settings
拖曳天空盒子到 Skybox Material
天空效果
載入 Projector Assets Import Package Custom Package Projector.unitypackage
拖曳 Blob Shadow Projector 到 Peasant 修改位置 Position(0,2,0)
Blob Shadow Projector 效果
Projector 預設參數
Projector 調整參數
Hero_S3
Shanty Town : Rock Formations
載入 RockBlobs Assets Import Package Custom Package RockBlobs.unitypackage
拖曳 rockblobfive 到 Hierarchy 調整位置 (Position(450,50,35) 角度 (0,90,0) 比例 (0.05,0.05,0.05)
rockblobfive Position(450,50,35)
拖曳 rockblobfour 到 Hierarchy 調整位置 (Position(440,50,35) 角度 (0,90,0) 比例 (0.05,0.05,0.05)
rockblobfour Position(440,50,35)
拖曳 rockblobthree 到 Hierarchy 調整位置 (Position(430,50,35) 角度 (0,0,0) 比例 (0.05,0.05,0.05)
rockblobthree Position(430,50,35)
Wood Crate
載入 WoodCrate Assets Import Package Custom Package WoodCrate.unitypackage
拖曳 WoodCrate 到 Hierarchy 調整位置 (Position(420,50,35) 角度 (0,0,0) 比例 (1,1,1)
WoodCrate Position(420,50,35)
WoodCrate( 增加立方體碰撞 ) Component Physics Box Collider
WoodCrate Duplicate( 複製 2 個 ) 修改位置 Position(415,50,35), Position(415,50.5,35)
WoodCrate(2 個 ) Position(415,50,35)
Gem Shader
載入 GemShader 動畫 Assets Import Package Custom Package GemShader.unitypackage
purple diamond 修改位置 Position(410,51.5,35), 比例 Scale(0.1,0.1,0.1)
purple diamond Position(410,50,35)
turquoise diamond 修改位置 Position(400,52,35), 比例 Scale(0.1,0.1,0.1)
turquoise diamond Position(400,50,35)
A Medieval House
載入 House Assets Import Package Custom Package House.unitypackage
MedievelHouse 修改位置 Position(100,51,35), 比例 Scale(1.455,1,0.653)
MedievelHouse Position(100,51,35)
Hero_S4
修改程式 CharacterMove contact.othercollider.name == "MedievelHouse"
File Save Scene File New Scene
拖曳 gameover 圖檔到 Project Assets
Hierarchy Create GUI Texture 拖曳 gameover 圖檔 Texture 修改 x=-276,y=-198,width=543, Height=396
File Save Scene 檔名 gamefinish
Game Over 場景
File Build Settings 拖曳 gamefinish, HeroS 場景到 Scenes In Build
Hero_S5
載入水資源 Assets Import Package Water
Daylight Simple Water 修改位置 Position(350,49.9,35), 比例 Scale(10,1,10)
移動場景視窗讓水在場景區中間 方便確認挖洞區域
設定繪製高度 (Paint Height) 高度 (Height=49.3)
Daylight Simple Water Position(350,49.9,35)
Animated Spartan King
載入 King 動畫 Assets Import Package Custom Package King.unitypackage
拖曳 SpartanKing 到 Hierarchy 修改位置 Position(300,50,35), 旋轉 (0,90,0), 比例 Scale(3,3,3) Animation attack,culling Type Always Animate
SpartanKing Component Physics Box Collider
Box Collider Center (0,0.2,0), Size(0.2,0.4,0.3)
新增腳本程式 Project Create Javascript 改名為 KingMove
KingMove 讓 SpartanKing 來回移動
#pragma strict var dz : float=0.05; function Start () { } function Update () { transform.position.z+=dz; if (transform.position.z >= 38){ dz=-0.05; }else if(transform.position.z<= 32){ dz=0.05; } } KingMove 讓 SpartanKing 來回移動
拖曳 KingMove 給 SpartanKing
SpartanKing Position(300,50,35)
下載粒子資源 Assets Import Package Particle
拖曳 Water Fountain 到 Hierarchy Position(250,50,35)
Water Fountain Position(250,50,35)
Free Music Pack
載入 Music Assets Import Package Custom Package Music.unitypackage
Main Camera Component Audio Audio Source
拖曳 Loop 16-145 bpm complete 聲音給 Audio Clip 程式執行後會播放聲音
Hierarchy Create GUI Text( 更名 Gx) Position(0,0.5,0), Font Size=20
Hierarchy Create GUI Text( 更名 Gy) Position(0,0.4,0), Font Size=20
新增腳本程式 Project Create Javascript 改名為 PositionGUI
PositionGUI 顯示主角 x, y 座標
PositionGUI 顯示主角 x, y 座標 #pragma strict function Start () { } function Update () { } gameobject.find("gx").guitext.text= "X=" + transform.position.x.tostring(); gameobject.find("gy").guitext.text= "Y=" + transform.position.y.tostring();
把 PositionGUI 拖曳給 Peasant
顯示主角 x, y 座標