using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour //★這是提供給 ToonSoldiers 的腳本 { Animator anim; // Animator動畫控制器 Rigidbody rb; // Rigidbody 剛體元件 bool isRun; // 玩家是否在跑步狀態 public float walkSpeed; // 設定玩家的走路速度 public float runSpeed; // 設定玩家的跑步速度 public Transform muzzle; // 設定槍口的位置 void Start() { anim = GetComponent(); // 取得玩家的 Animator 動畫元件 rb = GetComponent(); // 取得玩家的 Rigidbody 剛體元件 } void Update() { if (Input.GetButtonDown("Fire1")) { anim.SetTrigger("Shoot"); RaycastHit r; if (Physics.Raycast(muzzle.position, transform.forward, out r)) // 從槍口位置投射射線 { Destroy(r.collider.gameObject); // 銷毀射線擊中的物件 } } } void FixedUpdate() { if (Input.GetKey(KeyCode.LeftShift)) { isRun = true; } // 按著 Shift 時,玩家是跑步狀態 else { isRun = false; } // 放開 Shift 時,玩家是走路狀態 float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); if (isRun) { anim.SetFloat("Speed", v, 0.2f, Time.deltaTime); anim.SetFloat("Turn", h, 0.2f, Time.deltaTime); Vector3 movement = transform.TransformDirection(new Vector3(h * runSpeed, 0, v * runSpeed)); rb.velocity = movement * Time.deltaTime; //注意取消 Animator 的 Apply Root Motion 否則無法移動 transform.Rotate(Vector3.up, h * runSpeed * Time.deltaTime); //控制玩家轉向 } else { anim.SetFloat("Speed", v * 0.5f, 0.2f, Time.deltaTime); anim.SetFloat("Turn", h * 0.5f, 0.2f, Time.deltaTime); Vector3 movement = transform.TransformDirection(new Vector3(h * walkSpeed, 0, v * walkSpeed)); rb.velocity = movement * Time.deltaTime; transform.Rotate(Vector3.up, h * walkSpeed * Time.deltaTime); //控制玩家轉向 } } }