【发布时间】:2021-12-23 01:02:48
【问题描述】:
我已经开始制作一个 3d 游戏,并且我已经设置了我的播放器、墙壁对象和地板。每当我的玩家对象接触到墙壁时,它就会像向后倒下一样旋转,并且永远继续旋转。
我已经尝试在播放器的刚体上启用 y 和 z 的冻结旋转(显然需要 x 旋转,这不是问题),并且尝试了几种不同的方法,或者使墙壁静止。将其更改为运动学等,我无法找到一种方法来阻止玩家在接触墙壁后旋转。
固定更新控制玩家移动,如图所示:
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
m_Movement.Set(horizontal, 0f, vertical);
m_Movement.Normalize();
bool hasHorizontalInput = !Mathf.Approximately(horizontal, 0f);
bool hasVerticalInput = !Mathf.Approximately(vertical, 0f);
bool isWalking = hasHorizontalInput || hasVerticalInput;
bool isShiftKeyDown = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
if (hasHorizontalInput || hasVerticalInput)
{
if (isShiftKeyDown)
{
m_Animator.SetBool("IsRunning", true);
m_Animator.SetBool("IsWalking", false);
m_Animator.SetBool("IsIdle", false);
m_AudioSource.clip = running;
} else
{
m_Animator.SetBool("IsRunning", false);
m_Animator.SetBool("IsWalking", true);
m_Animator.SetBool("IsIdle", false);
m_AudioSource.clip = walking;
}
} else
{
m_Animator.SetBool("IsRunning", false);
m_Animator.SetBool("IsWalking", false);
m_Animator.SetBool("IsIdle", true);
}
//m_Animator.SetBool("IsWalking", isWalking);
Vector3 desiredForward = Vector3.RotateTowards(transform.forward, m_Movement, turnSpeed * Time.deltaTime, 0f);
m_Rotation = Quaternion.LookRotation(desiredForward);
if (isWalking)
{
if (!m_AudioSource.isPlaying)
{
m_AudioSource.Play();
}
}
else
{
m_AudioSource.Stop();
}
}```
【问题讨论】:
标签: unity3d