Камера Unity телепортируется к правому пределу при достижении левого пределаC#

Место общения программистов C#
Ответить
Anonymous
 Камера Unity телепортируется к правому пределу при достижении левого предела

Сообщение Anonymous »

Итак, я пытаюсь создать игру, похожую на Sea of ​​Thieves, и пытаюсь установить ограничение на камеру. Все работает нормально, пока я не присвою ycamlimitwheensteering значение больше 90. Я схожу с ума здесь. Кто-нибудь, пожалуйста, помогите. Когда оно превышает 90 и вы достигаете левого предела, камера телепортируется к правому пределу.

Код: Выделить всё

using UnityEngine;

public class MouseLook : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;

float xRotation = 0f;
float yRotation = 0f;

private bool isLerping = false;

private bool isSteeringWheel;

[SerializeField] public int YCamLimitWhenSteering = 70;

// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}

// Update is called once per frame
void Update()
{
if (isLerping) return; // Zablokuj kontrolę nad kamerą, jeśli jest lerpowanie

float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

// Rotacja osi X (pionowa)
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

if (isSteeringWheel)
{
yRotation += mouseX;

// Oblicz nowe ograniczenia

float minY = 90f - YCamLimitWhenSteering;
float maxY = 90f + YCamLimitWhenSteering;

if (yRotation < minY)
{
yRotation = minY;
}
else if (yRotation > maxY)
{
yRotation = maxY;
}

playerBody.localRotation = Quaternion.Euler(0f, yRotation, 0f);
}
else
{
playerBody.Rotate(Vector3.up * mouseX);
}

}

public void SetSteering(bool isAtWheel)
{
isSteeringWheel = isAtWheel;

// Jeśli gracz zaczyna sterować, ustaw yRotation na aktualną rotację
if (isAtWheel)
{
yRotation = playerBody.localRotation.eulerAngles.y;
}
}

public void SetLerping(bool lerping)
{
isLerping = lerping;
}

}
Я ожидал, что он заблокируется, когда достигнет некоторого значения, но это не сработало. Кроме того, он использует дополнительный 90f, потому что, когда я его не использую, вид спереди похож на левый, поэтому мне нужно добавить 90, чтобы фактически создать ограничения на виде спереди.

Подробнее здесь: https://stackoverflow.com/questions/790 ... left-limit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»