转的时候 还是会出现绕圈子的问题 输出了angle的值 绕圈子的时候不存在angle>180的情况
用了官方的旋转代码 不知道为啥没有用....
版本5.3.4f
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
public float rotateSpeed = 15f;
private float moveSpeed = 3;
private float stopSpeed = 6;
private Animator anim;
void Awake()
{
anim = GetComponent<Animator>();
}
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
moveMentManagement(h, v);
}
private void moveMentManagement(float h,float v)
{
if (h!=0f || v!=0f)
{
Rotatings(h, v);
float newSpeed = Mathf.Lerp(anim.GetFloat("Speed"), 5.6f, moveSpeed * Time.deltaTime);
anim.SetFloat("Speed", newSpeed);
}
else
{
anim.SetFloat("Speed", 0);
}
}
void Rotating(float h, float v)
{
Vector3 targetDir = new Vector3(h, 0f, v);
Quaternion targetRotation =Quaternion.LookRotation(targetDir,Vector3.up);
Quaternion newRotation = Quaternion.Lerp(GetComponent<Rigidbody>().rotation, targetRotation, Time.deltaTime*rotateSpeed);
GetComponent<Rigidbody>().MoveRotation(newRotation);
print(GetComponent<Rigidbody>().rotation);
//Vector3 nowDir = transform.forward;
//float angle = Vector3.Angle(targetDir, nowDir);
//print(angle);
////if (angle > 180)
////{
//// print(h);
//// angle = 360 - angle;
//// angle = -angle;
////}
//transform.Rotate(Vector3.up * angle * Time.deltaTime * rotateSpeed);
}
void Rotatings(float horizontal, float vertical)
{
// Create a new vector of the horizontal and vertical inputs.
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
// Create a rotation based on this new vector assuming that up is the global y axis.
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up);
// Create a rotation that is an increment closer to the target rotation from the player's rotation.
Quaternion newRotation = Quaternion.Lerp(GetComponent<Rigidbody>().rotation, targetRotation, rotateSpeed * Time.deltaTime);
// Change the players rotation to this new rotation.
GetComponent<Rigidbody>().MoveRotation(newRotation);
}
}
没看下一课 尴尬..