Character Controller角色控制器组件
?
角色控制器組件簡(jiǎn)介
①.游戲物體的“引擎”
在游戲開(kāi)發(fā)過(guò)程中,最關(guān)鍵的是游戲的主角,也就是我們玩家所操控的虛擬角色,
角色在游戲中必須“會(huì)動(dòng)”,角色可以走,跑,跳,飛等等。
在 Unity 中可以讓角色“動(dòng)起來(lái)”的常用組件有三個(gè):Transform,Rigidbody,
這兩個(gè)我相信大家已經(jīng)使用大量的使用過(guò)了。
另外還有一個(gè)組件叫做:Character Controller,角色控制器。
②.Character Controller
角色控制器也屬于物理組件,它的位置在:
Component-->Physics-->Character Controller
③.角色控制器的主要用途
角色控制器主要用于第三人稱(chēng)或者第一人稱(chēng)游戲主角(人形為主)控制。
使用角色控制器組件控制角色簡(jiǎn)單移動(dòng)
環(huán)境準(zhǔn)備:
①創(chuàng)建一個(gè)Plane地面并賦予材質(zhì)
②創(chuàng)建一個(gè) Capsule 游戲物體命名為Player;
③給該游戲物體附加 Character Controller 組件【見(jiàn)圖】
?控制角色移動(dòng)
SimpleMove(Vector3):簡(jiǎn)單移動(dòng)
以一定的速度移動(dòng)角色,會(huì)自動(dòng)應(yīng)用重力。
[角色控制器不是剛體,但是具備剛體的一些屬性]
Move(Vector3):移動(dòng)
更為復(fù)雜的一種運(yùn)動(dòng),每次都絕對(duì)運(yùn)動(dòng),不會(huì)應(yīng)用重力。
測(cè)試準(zhǔn)備:
創(chuàng)建一個(gè)新的腳本命名為Player,然后拖拽掛在到Player游戲物體身上【見(jiàn)圖】
SimpleMove方法移動(dòng)代碼:
?
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Player : MonoBehaviour {private CharacterController characterController;private void Start(){characterController = gameObject.GetComponent<CharacterController>();//獲取自身的角色控制器組件.}private void Update(){float horizontal = Input.GetAxis("Horizontal");//獲取橫向X軸.float vertical = Input.GetAxis("Vertical");//獲取縱向Z軸.characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f);} }效果:
?Move方法移動(dòng)代碼:
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Player : MonoBehaviour {private CharacterController characterController;private void Start(){characterController = gameObject.GetComponent<CharacterController>();//獲取自身的角色控制器組件.}private void Update(){float horizontal = Input.GetAxis("Horizontal");//獲取橫向X軸.float vertical = Input.GetAxis("Vertical");//獲取縱向Z軸.characterController.Move(new Vector3(horizontal,0,vertical)*0.2f);} }效果:
?角色控制器屬性講解
①Slope Limit
斜率限制,控制角色最大的爬坡斜度。[演示:角色爬坡]
②Step Offset
臺(tái)階高度,控制角色可以邁上最大的臺(tái)階高度,在unity中一個(gè)Cube的高度是一米,新建一個(gè)Cube制作一個(gè)簡(jiǎn)單的臺(tái)階
[演示:角色上臺(tái)階]
③Skin Width [默認(rèn)即可]
皮膚厚度,在角色的外圍包裹著一層“皮膚”,設(shè)置這層皮膚的厚度。
數(shù)值調(diào)大,最明顯的就是角色和地面之間的間距變大,也就是角色皮膚變厚了。
④Min Move Distance [默認(rèn)即可]
最小移動(dòng)距離,默認(rèn)是 0.001,也就是 1 毫米。
如果該數(shù)值調(diào)大,但代碼中單位移動(dòng)速度很慢,角色就不會(huì)動(dòng)。
⑤Center/Radius/Height
角色控制器組件在 Scene 面板中體現(xiàn)為一個(gè)“膠囊碰撞器”的形狀。
Center:控制中心點(diǎn)的位置;
Radius:控制半徑;
Height:控制高度。
小技巧:在 Game 面板將 Gizmos 設(shè)置為選中狀態(tài),可以在運(yùn)行狀態(tài)看到組
件的圖標(biāo),方便運(yùn)行過(guò)程中對(duì)組件進(jìn)行調(diào)試。
一個(gè)游戲物體附加了角色控制器組件后,
和角色控制器組件共存的其他的碰撞器組件是處于“無(wú)效”狀態(tài)。
和場(chǎng)景中其他物體的交互碰撞,是以角色控制器組件的邊緣進(jìn)行判斷的。
OnControllerColliderHit(ControllerColliderHit hit)函數(shù)可以通過(guò) hit 獲取到角色碰撞器碰撞到的物體的信息【代碼演示】。
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Player : MonoBehaviour {private CharacterController characterController;private void Start(){characterController = gameObject.GetComponent<CharacterController>();//獲取自身的角色控制器組件.}private void Update(){float horizontal = Input.GetAxis("Horizontal");//獲取橫向X軸.float vertical = Input.GetAxis("Vertical");//獲取縱向Z軸.characterController.SimpleMove(new Vector3(horizontal,0,vertical)*2f);}private void OnControllerColliderHit(ControllerColliderHit hit){Debug.Log(hit.gameObject.name);} }測(cè)試結(jié)果:
此文章只是為了記錄一下學(xué)習(xí)筆記,如有不足還望多多指點(diǎn)!?
?
總結(jié)
以上是生活随笔為你收集整理的Character Controller角色控制器组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 管理软件开发的最高境界,那就是“无代码开
- 下一篇: Java中Character类的概述及其