【发布时间】:2018-04-08 02:50:33
【问题描述】:
我目前正在尝试编写一个摄像机,让玩家处于焦点位置,并且可以在与玩家自己的动作无关的情况下四处移动。 您可以使用正确的 xBox 控制器控制相机。 相机应该在围绕玩家的轨道上的 X 轴上正常移动,但是如果您移动相机以向上或向下看(比如说向上 20°),它应该在 0° 上以再次聚焦玩家,如果您放开操纵杆并在这两个角度之间进行插值。
在我的脚本中,相机可以上下查看(但度数尚未锁定,因此您可以将其在 Y 轴上移动 360°+),但它会重置为 0°。此外,x 轴的行为不像我想要的那样,因为它能够围绕播放器旋转,但只能旋转 180°,然后它会停止,如果你放开控制器,它也会将它的值设置回来(我不想要对于 x 轴)。
相机是一个空游戏对象的子对象。该脚本附加到空游戏对象。
大约 3 天后,我一直在尝试解决这个问题,如果有任何小建议,我将不胜感激。 提前致谢,这是我的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollowPlayer : MonoBehaviour
{
public GameObject target;
public GameObject cameraRig;
public float rotateSpeedX = 90.0f;
public float rotateSpeedY = 5f;
float cameraAngle;
float startCameraAngle;
Vector3 offset;
Vector3 currentOffset;
public float minRotationY;
public float maxRotationY;
bool isCameraMoving;
void Start()
{
offset = transform.position - target.transform.position;
cameraAngle = transform.localEulerAngles.z;
startCameraAngle = cameraAngle;
currentOffset = offset;
}
void Update()
{
transform.position = target.transform.position + currentOffset; // Folgt dem Spieler
float hor = Input.GetAxis("RightJoystickX") * rotateSpeedX; // Input rechter Joystick
float ver = Input.GetAxis("RightJoystickY") * rotateSpeedY;
if (!Mathf.Approximately (hor, 0)) {
transform.RotateAround (target.transform.position, Vector3.up, hor);
currentOffset = transform.position - target.transform.position;
}
if (!Mathf.Approximately (ver, 0)) {
cameraAngle += 110f * Time.deltaTime;
transform.RotateAround (target.transform.position, Vector3.up, hor);
currentOffset = transform.position - target.transform.position;
print(ver);
}
else if (ver <= 0.8f) {
//cameraAngle = Mathf.Lerp(cameraAngle, startCameraAngle, 1f - 0.1f * Time.deltaTime);
cameraAngle = startCameraAngle;
}
transform.localEulerAngles = new Vector3(0, hor, cameraAngle);
}
}
【问题讨论】: