using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 6f;
private Vector3 movement;
private Animator anim;
private Rigidbody playerRigidbody;
private int floorMask;
private float camRayLength = 100f;
void Awake()
{
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, 0, 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 = 0.0f;
Quaternion newRotation = Quaternion.LookRotation (playerToMouse);
playerRigidbody.MoveRotation (newRotation);
}
}
void Animating(float h, float v)
{
bool walking = h != 0f || v != 0f;
anim.SetBool ("IsWalking", walking);
Debug.Log ("IsWalking的值 = " + walking);
}
}
求大神 Move这个函数 为什么还要加normalized GetAxisRaw返回的不就是
-1或1的确定值吗 不带平滑滤波 这个normalized没必要吧
为什么还要 * Time.deltatime FixedUpate不是固定时间更新吗 与帧率无关
这个 deltatime 有什么用
代码是很好的 标准的官网代码