我們要控制角色的移動,可以全部細節都由自己來實現。控制角色模型的移動,同時移動攝影機,改變視角。當然unity也提供了一些元件,可以讓我們做更少的工作,實現我們所期望的功能。今天我們就一起系統來學習相關的內容吧。
"角色控制器允許你在受制於碰撞的情況下很容易的進行運動,而不用處理剛體。角色控制器不受力的影響,僅僅當你呼叫move函式時才運動。然後它將執行運動,但是受制於碰撞。"(---from unity3d官方文件) 我們通常在人物模型上加上這個元件後,就可以控制模型的移動了。要注意的一點是。加了角色控制器後,他就不受重力影響。所以要自己在move函式中處理重力的情況。即我們要自己出來y軸方向上的速度變化。
1.function ******move (speed : vector3) : bool
以一定的速度移動。將忽略y軸上的速度。單位是m/s。重力被自動應用。建議每幀只呼叫一次move或者******move。返回值是是否著地。
例子
charactercontroller controller= getcomponent();
vector3 forward= transform.transformdirection(vector3.forward);
float curspeed = speed * input.getaxis ("vertical");
ontroller.******move(forward * curspeed);
2.function move (motion : vector3) : collisionflags通過動力來移動控制器。動力只受限制於碰撞。它將沿著碰撞器滑動。這個函式不應用任何重力
如果只是單純控制玩家的移動,那麼用character controller足夠了。如果還涉及到視角的切換。unity提供了相關的元件。在專案中引入character controller(asset->import asset),就可以將角色控制器元件匯入我們的專案了。
經典的遊戲cs就是第一人稱視角的,攝像機就是我們的視角。人物的移動,導致視角的移動。(原始碼first.unity)
1.刪除預設的攝像機
2.新建乙個地形terrain
3.從角色控制器元件中引入 first person controller到專案中
4.拖動first person controller到合適的位置
我們就可以看到效果了,以第一人稱的視角移動,巡視整個場景。滑鼠控制整體視角,方向鍵或者wasd按鈕控制攝像機的移動。
很多角色扮演遊戲(wow,dota)常用到第三人稱視角。攝像機離我們的角色保持有一定距離,可以詳細看到我們所扮演角色的各種行為動作。(原始碼third.unity)
1.建立乙個地形
2.引入3rd person controller元件到專案中
3.修改預設攝像機的tag為maincamera
4.選中3rd person controller元件,將其 third person camera 設定為maincamera
可以看到效果了,可以看到扮演的角色。方向鍵或者wasd按鍵可以控制角色的移動,同時可以發現整個視角也會跟著移動
效果圖
第一人稱控制器指令碼fpsinputcontroller.js
function update ()
// 設定移動的方向
motor.inputmovedirection = transform.rotation * directionvector;
//設定跳躍(預設鍵盤是空格鍵)
motor.inputjump = input.getbutton("jump");
}
第三人稱角色控制器thirdpersoncontroller.js
function update()
//按了跳躍鍵
if (input.getbuttondown ("jump"))
//控制角色的方向
updatesmoothedmovementdirection();
//處理重力
// 處理跳躍邏輯
//計算實際的動作(移動方向和重力方向的)
var movement = movedirection * movespeed + vector3 (0, verticalspeed, 0) + inairvelocity;
movement *= time.deltatime;
// 移動角色
var controller : charactercontroller = getcomponent(charactercontroller);
collisionflags = controller.move(movement);
// 動畫處理
if(_animation) else
} else
else
else if(_characterstate == characterstate.trotting)
else if(_characterstate == characterstate.walking) }}
}//在地上
if (isgrounded())
else
} // 跳躍狀態,剛好到達地面
if (isgrounded())}}
第三人控制器攝像機指令碼thirdpersoncamera.js
// normal 攝像機動作
else
// 向後走的時候鎖住攝像機
if (angledistance (currentangle, targetangle) > 160 && controller.ismovingbackwards ())
targetangle += 180;//旋轉180
//插值改變相機角度
currentangle = mathf.smoothdampangle(currentangle, targetangle, anglevelocity, angularsmoothlag, angularmaxspeed);
} //當跳躍時
// when jumping don't move camera upwards but only down!
if (controller.isjumping ())
// 走動時,改變高度
else
// 計算當前高度
var currentheight = cameratransform.position.y;
currentheight = mathf.smoothdamp (currentheight, targetheight, heightvelocity, heightsmoothlag);
// 按角度旋轉、
var currentrotation = quaternion.euler (0, currentangle, 0);
//更新相機位置
cameratransform.position = targetcenter;
cameratransform.position += currentrotation * vector3.back * distance;
// 設定相機的高度
cameratransform.position.y = currentheight;
//攝像機一直朝向目標
setuprotation(targetcenter, targethead);}
角色控制,可以方便的控制遊戲的視角。在很多遊戲中,可以直接使用該元件,減少我們的重複開發工作
騰訊手遊效能優化之路
2017 qcon 移動專項最佳實踐 專題講師 何純 圖 2017 qcon全球軟體開發大會現場 經過3 5年的高速發展後,人口紅利正在逐漸消失,ip效應也在減弱 從2016年top10的遊戲來看,主要是競技類和rpg類為主,手遊已逐漸進入到重度的時代,玩法和使用者體驗決定了遊戲的生死,也決定了產品...
Unity手遊引擎安全解析及實踐
近日,由unity主辦的 unity技術開放日 在廣州成功舉辦,網易移動安全技術專家卓輝作為特邀嘉賓同現場400名遊戲開發者分享了網易在手遊安全所積累的經驗。當下,很多手遊背後都存在靠汲取開發商利益的灰色產業鏈,它們通過破解,對遊戲進行重打包達到修改支付 修改廣告等目的。通過利用外掛程式 篡改資料 ...
unity手遊使用terrian注意事項
1.terrain比較佔效能,普通機器測試,未開terrain 60幀,開啟terrain後 30幀 2.terrain的size大小與占用效能無關,不過越小的terrain的烘焙上去的陰影越模糊,剛開始建議烘焙測試下 3.使用terrain建立一條河道時,攝像機鏡頭拉近拉遠會出現鋸齒,此時調節pi...