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);
}
}
玩家狀態機切換:
相關文章
- 彙編學習筆記之轉移指令筆記
- CSS3動畫(360度旋轉、旋轉放大、放大、移動)CSSS3動畫
- 移動地理資訊系統學習筆記筆記
- React 學習筆記【二】React筆記
- TensorFlow學習筆記(二)筆記
- vue學習筆記二Vue筆記
- goLang學習筆記(二)Golang筆記
- ANFIS學習筆記(二)筆記
- activiti學習筆記二筆記
- Typescript學習筆記(二)TypeScript筆記
- python學習筆記(二)Python筆記
- TS學習筆記(二)筆記
- JavaScript學習筆記(二)JavaScript筆記
- Hibernate學習筆記二筆記
- 工作學習筆記(二) 正規表示式(轉載)筆記
- Vue學習筆記(二)------axios學習Vue筆記iOS
- Java學習筆記記錄(二)Java筆記
- 高等數學學習筆記(二)筆記
- 深度學習 DEEP LEARNING 學習筆記(二)深度學習筆記
- Spring MVC學習筆記二SpringMVC筆記
- TS學習筆記(二):介面筆記
- github--學習筆記(二)Github筆記
- react native學習筆記(二)React Native筆記
- orientDB學習筆記(二)MATCH筆記
- 智慧窗-學習筆記(二)筆記
- opencv學習筆記四十四:移動物件統計OpenCV筆記物件
- [寒假學習筆記](二)Python初學筆記Python
- repuest轉發學習筆記一筆記
- HTML入門學習筆記(二)HTML筆記
- Kafka 學習筆記(二) :初探 KafkaKafka筆記
- JDBC與JavaBean學習筆記(二)JDBCJavaBean筆記
- 架構學習筆記系列二架構筆記
- ES6 學習筆記二筆記
- javascript學習筆記,二、變數JavaScript筆記變數
- MySQL高階學習筆記(二)MySql筆記
- 二項式反演學習筆記筆記
- Kafka學習筆記(二) :初探KafkaKafka筆記
- Laravel 學習筆記二: Blade模板Laravel筆記
- wqs二分學習筆記筆記