我們要控制角色的移動,能夠所有細節都由自己來實現。控制角色模型的移動,同一時候移動攝影機,改變視角。當然unity也提供了一些元件,能夠讓我們做更少的工作,實現我們所期望的功能。今天我們就一起系統來學習相關的內容吧。
"角色控制器同意你在受制於碰撞的情況下非常easy的進行運動,而不用處理剛體。角色控制器不受力的影響,只當你呼叫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到合適的位置
我們就能夠看到效果了,以第一人稱的視角移動,巡視整個場景。滑鼠控制總體視角,方向鍵或者wasdbutton控制攝像機的移動。
非常多角色扮演遊戲(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();
//處理重力
// 處理跳躍邏輯
//計算實際的動作(移動方向和重力方向的)
varmovement = movedirection * movespeed + vector3 (0, verticalspeed, 0) + inairvelocity;
movement *= time.deltatime;
// 移動角色
varcontroller : 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
function
// 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
// 計算當前高度
varcurrentheight = cameratransform.position.y;
currentheight = mathf.smoothdamp (currentheight, targetheight, heightvelocity, heightsmoothlag);
// 按角度旋轉、
varcurrentrotation = quaternion.euler (0, currentangle, 0);
//更新相機位置
cameratransform.position = targetcenter;
cameratransform.position += currentrotation * vector3.back * distance;
// 設定相機的高度
cameratransform.position.y = currentheight;
//攝像機一直朝向目標
setuprotation(targetcenter, targethead);
}
Unity角色控制器
控制角色移動,加上剛體和碰撞盒後經常出現角色被其他物體撞飛或者角色走動過程中經常摔倒等難以控制的現象。利用角色控制器可以避免角色被撞飛翻到等。方法如下 首先在hierasrchy檢視中選擇需要新增角色控制器的遊戲物件,具體操作方法是在unity導航選單欄中選擇 component physics c...
Unity 4 4 新增角色控制器
分類 unity c vs2015 建立日期 2016 04 10 一 簡介 設計完畢基本的場景後,一般都需要先執行看看效果如何,即先讓場景 動起來 以方便觀察不同的位置,而不是僅僅觀察固定攝像機位置的死板板的場景。這就是角色控制器的功能 實際上還不僅僅是只有這些功能 unity已經幫你設計好了角色...
Unity手遊之路《七》角色控制器
我們要控制角色的移動,可以全部細節都由自己來實現。控制角色模型的移動,同時移動攝影機,改變視角。當然unity也提供了一些元件,可以讓我們做更少的工作,實現我們所期望的功能。今天我們就一起系統來學習相關的內容吧。角色控制器允許你在受制於碰撞的情況下很容易的進行運動,而不用處理剛體。角色控制器不受力的...