SurvivalShooter學習筆記(二.玩家移動旋轉)
該案例中:(PC端操作)
1.玩家移動輸入控制通過虛擬軸Axis,旋轉輸入控制通過滑鼠位置;
2.玩家始終面朝滑鼠停留點,滑鼠停留點通過攝像機朝地面的射線獲取;
3.玩家待機移動狀態切換通過Animator元件;
4.玩家移動旋轉通過身上剛體元件及其相關函式。
public class PlayerMovement : MonoBehaviour
{
public float speed = 6f; //玩家移動速度
Vector3 movement; // 玩家移動臨時變數
Animator anim; //玩家身上動畫控制器
Rigidbody playerRigidbody; //玩家身上剛體元件
int floorMask; // 地板的Layer層
float camRayLength = 100f; // 相機射線的長度
void Awake ()
{
// 獲取Floor層的值
floorMask = LayerMask.GetMask ("Floor");
// 獲取玩家身上各元件
anim = GetComponent <Animator> ();
playerRigidbody = GetComponent <Rigidbody> ();
}
void FixedUpdate ()
{
//每幀獲取玩家輸入的虛擬軸,水平垂直值
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
// 根據水平垂直輸入量移動玩家
Move (h, v);
//旋轉玩家
Turning ();
// 根據輸入的值播放相應狀態動畫
Animating (h, v);
}
void Move (float h, float v)
{
//根據輸入的虛擬軸值設定變數
movement.Set (h, 0f, v);
// 單位化位移向量並根據速度得到需要移動的向量
movement = movement.normalized * speed * Time.deltaTime;
// 根據移動向量 移動玩家到相應位置
playerRigidbody.MovePosition (transform.position + movement);
}
void Turning ()
{
//建立射線,攝像機指向滑鼠點
Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit floorHit;
//如果點到了地面
if(Physics.Raycast (camRay, out floorHit, camRayLength, floorMask))
{
// 建立 從玩家 到地面上滑鼠點到的點 的向量
Vector3 playerToMouse = floorHit.point - transform.position;
//確保該向量是沿著地表水平的
playerToMouse.y = 0f;
// 建立玩家指向點選點的旋轉值
Quaternion newRotatation = Quaternion.LookRotation (playerToMouse);
//設定玩家的旋轉
playerRigidbody.MoveRotation (newRotatation);
}
}
void Animating (float h, float v)
{
// 獲取是否有唯一的bool
bool walking = h != 0f || v != 0f;
//設定對應狀態機的值
anim.SetBool ("IsWalking", walking);
}
}
玩家狀態機切換:
相關文章
- 彙編學習筆記之轉移指令筆記
- 移動地理資訊系統學習筆記筆記
- ANFIS學習筆記(二)筆記
- activiti學習筆記二筆記
- Typescript學習筆記(二)TypeScript筆記
- JavaScript學習筆記(二)JavaScript筆記
- React 學習筆記【二】React筆記
- goLang學習筆記(二)Golang筆記
- vue學習筆記二Vue筆記
- vue學習筆記(二)Vue筆記
- 科二學習筆記筆記
- jQuery 學習筆記(二)jQuery筆記
- git學習筆記(二)Git筆記
- Java學習筆記二Java筆記
- TS學習筆記(二)筆記
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- 《深入淺出MFC》學習筆記之二 (轉)筆記
- 《Mastering Delphi 6學習筆記》之二 (轉)AST筆記
- Java學習筆記記錄(二)Java筆記
- 高等數學學習筆記(二)筆記
- Vue學習筆記(二)------axios學習Vue筆記iOS
- CSS3動畫(360度旋轉、旋轉放大、放大、移動)CSSS3動畫
- python學習筆記(二)Python筆記
- TensorFlow學習筆記(二)筆記
- TS學習筆記(二):介面筆記
- github--學習筆記(二)Github筆記
- orientDB學習筆記(二)MATCH筆記
- Hibernate學習筆記二筆記
- 智慧窗-學習筆記(二)筆記
- linux學習筆記二Linux筆記
- MySql 學習筆記二:索引MySql筆記索引
- MPAndroidChart學習筆記(二)Android筆記
- Tensorflow學習筆記二筆記
- jQuery學習系列筆記(二)jQuery筆記
- android學習筆記二Android筆記
- Spss 學習筆記(二)SPSS筆記
- Oracle學習筆記之二Oracle筆記
- sed學習筆記(轉)筆記