В моей игре я хочу зажать камеру игрока, чтобы она не могла выполнять передние или задние смещения.Я хочу зажать ось х в диапазоне от -75 до 50, но это просто не сработает.
Каждый раз, когда я добавляю зажим, такой как в моем коде, камера не хочет перемещать еговращение на 0,0,0 дальше чем Input.GetAxisRaw говорит, что мышь движется.
Я пытался использовать операторы if как ручные зажимы, но он либо постоянно остается на уровне 0,0,0, либо -75,0,0 постоянно, если я переключаю полярность.
Я пытался заменить камеру, если она была связана с ее настройками, но ничего не изменилось.
Я не хотел публиковать это, потому что это не должно быть так сложно, но я потратил несколько дней на это, и у меня нет выбора;Любые идеи приветствуются.
Я использую Visual Studio в качестве редактора.
using UnityEngine;
public class PlayerMove : MonoBehaviour {
Rigidbody rb;
public Camera cam;
public Transform camTrans;
Vector3 movement;
Vector3 rotation;
public float sensitivityX;
public float sensitivityY;
public float playerSpeed;
public float jumpForce;
float forward;
float sideways;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate ()
{
forward = Input.GetAxisRaw("Vertical");
sideways = Input.GetAxisRaw("Horizontal");
movement = new Vector3 (forward, 0, -sideways).normalized;
float _xRot = Input.GetAxisRaw("Mouse Y");
float _yRot = Input.GetAxisRaw("Mouse X");
rotation = new Vector3(0f, _yRot, 0f) * sensitivityX;
float _jump = Input.GetAxisRaw("Jump");
if (movement != Vector3.zero)
{
MovePlayer();
}
if (rotation != Vector3.zero && Input.GetAxisRaw("Fire2") != 0 || _xRot != 0 && Input.GetAxisRaw("Fire2") != 0)
{
Rotate(-_xRot);
}
if (_jump != 0f)
{
Jump();
}
}
void MovePlayer()
{
float _playerSpeed;
_playerSpeed = playerSpeed * 0.1f;
transform.Translate(movement * _playerSpeed * Time.fixedDeltaTime, Space.Self);
}
void Jump()
{
if (IsGrounded())
{
rb.AddForce(new Vector3(0, 1 * jumpForce, 0), ForceMode.Impulse);
}
}
void Rotate(float _camRot)
{
camTrans.Rotate(new Vector3(_camRot * sensitivityY, 0, 0));
float _camPosX = camTrans.rotation.x;
Mathf.Clamp(_camPosX, -75, 50);
camTrans.rotation = Quaternion.Euler(new Vector3(_camPosX, 0, 0));
rb.MoveRotation(rb.rotation * Quaternion.Euler(rotation * sensitivityX));
}
bool IsGrounded()
{
RaycastHit hit;
return Physics.Raycast(transform.position, Vector3.down, out hit, 1.001f);
}
}