我遇到了一个我无法解决的问题。
我通过Unity制作一个自上而下的透视3D游戏。我有一个控制器,可以让我的角色在按下移动键时旋转和移动。按" D"例如,将播放器对象旋转到右侧然后然后刚性体在该方向上移动,但是如果我旋转相机,则播放器将不会相对于摄像机方向向右移动。
运动:
//Player Movement
void HandleMove()
{
if (canMove == true)
{
//Detect input movement
var moveHorizontal = Input.GetAxis("Horizontal");
var moveVertical = Input.GetAxis("Vertical");
IsMoving = moveHorizontal != 0 || moveVertical != 0;
Vector3 relative = transform.rotation.eulerAngles;
relative.y = pCamera.playerRelativeAngle;
//Rotate the character
var movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
var rot = movement * (speed / 10);
if (attackTimer <= 0 && movement != Vector3.zero)
{
Vector3 temp = transform.rotation.eulerAngles;
var newRotation = Quaternion.LookRotation(rot);
transform.rotation = Quaternion.RotateTowards(transform.rotation, newRotation, 10F);
}
//Move the character
if (IsMoving && offset.y != 0f)
{
movement.y = offset.normalized.y * movement.magnitude;
}
var characterMovement = transform.position + movement;
if (attackTimer <= 0 || !IsGrounded)
{
rbody.MovePosition(characterMovement);
}
}
我对于该做什么有一点想法,但是我无法完全掌握它,我有一个可以返回其欧拉角的相机设置,我试图找出一种方法来使用它来进行相对运动,但我不是确定在我的运动控制器中何处或如何应用它。
相机:
//Find camera angle
public static float playerRelativeAngle;
//On awake, do this
void Awake()
{
//Get the cameras angle so we can move the player relative to it???
playerRelativeAngle = this.transform.localEulerAngles.y;
}
//Update every frame
void Update()
{
playerRelativeAngle = this.transform.localEulerAngles.y;
//If the right key is pressed then the caerma rotates to the right
if (Input.GetKey("right"))
{
this.transform.RotateAround(target.transform.position, Vector3.down, cameraSpeed * Time.deltaTime);
}
if (Input.GetKey("left"))
{
this.transform.RotateAround(target.transform.position, Vector3.down, -cameraSpeed * Time.deltaTime);
}
}
非常感谢任何建议。
答案 0 :(得分:0)
我设法找到解决问题的方法。
运动:
float
玩家对象现在相对于相机旋转,然后在按下移动键时向玩家向前方向施加力。
它不是一个完美的解决方案,但希望这可以帮助将来的某个人。