【发布时间】:2018-12-24 17:06:44
【问题描述】:
我花了一整天的时间来解决我在学校项目中遇到的问题,所以我不得不采取最后的手段:stackoverflow!
我的问题: 我正在尝试相对于可以围绕角色旋转的相机旋转角色。
输入: xbox 控制器
相关信息:
- 相机使用右侧操纵杆围绕角色水平旋转
- 角色移动发生在左操纵杆上
- 角色已经相对于相机移动,这正按预期工作。 我正在尝试旋转角色,这以单独的方法发生。
- 当向下拉左操纵杆时,角色应始终面向(并朝向)摄像机。
- 当左操纵杆向上拉时,角色应始终面向(并远离)摄像机。
-
我留下了很多代码,只是为了让你们阅读。如果您需要什么,尽管问,我会提供。
我目前所拥有的: https://imgur.com/TERUXV6
为什么会出错:角色轮换很完美。但是,我在这里作弊。相机根据世界坐标旋转。当我旋转相机时,这很明显。
以下脚本附加到角色游戏对象。
public class CharacterBehaviour : MonoBehaviour
{
public GameObject HumanoidModel;
[SerializeField]private Transform _mainCameraTransform;
private void Update()
{
ApplyMovement();
RotateCharacter();
}
private void ApplyMovement()
{
//get input movement vector
Vector3 inputMovement = new Vector3(_inputMoveCharacterXAxis, 0, _inputMoveCharacterZAxis);
//make sure camera forward is player movement forward
Vector3 mainCameraForwardXz = Vector3.Scale(_mainCameraTransform.forward, new Vector3(1, 0, 1)); //multiplied by (1, 0, 1) to remove Y component
Vector3 mainCameraRightXz = Vector3.Scale(_mainCameraTransform.right, new Vector3(1, 0, 1)); //multiplied by (1, 0, 1) to remove Y component
Vector3 movementInCameraForwardDirection = mainCameraForwardXz * inputMovement.z;
Vector3 movementInCameraRightDirection = mainCameraRightXz * inputMovement.x;
Vector3 movementForward = movementInCameraForwardDirection + movementInCameraRightDirection;
_velocity = movementForward * MaximumSpeed;
}
private void RotateCharacter()
{
Vector3 inputDirection = new Vector3(_inputMoveCharacterXAxis, 0, _inputMoveCharacterZAxis);
HumanoidModel.transform.LookAt(HumanoidModel.transform.position +
HumanoidModel.transform.forward + inputDirection);
}
以下脚本附加到主相机游戏对象
public class CameraBehaviour : MonoBehaviour
{
[SerializeField] private Transform _characterTransform;
[SerializeField] private Transform _mainCameraTransform;
private void Update ()
{
RotateCamera();
}
// Rotate camera horizontally
private void RotateCamera()
{
_mainCameraTransform.RotateAround(_characterTransform.position, Vector3.up, _inputRotateCameraHorizontal);
}
}
问题的根源在于 RotateCharacter() 函数。我知道我需要在那里进行一些计算以使角色旋转相对于相机旋转,我只是无法弄清楚该计算是什么以及为什么。
提前致谢!
特林迪尔
【问题讨论】:
-
@Aybe 我已经尝试过 transform.rotate,但到目前为止还没有成功。在一个完美的世界中,我会使用 Transform.Rotate((float xAngle, float yAngle, float zAngle, Space relativeTo) 方法,其中我会说 Space relativeTo = Camera.Transform.Forward 或类似的东西。因为我想要我的角色轮换取决于它。
-
您要的不是第三人称相机吗?检查这个:code.tutsplus.com/tutorials/…