Юнити от первого лица

Рейтинг: 1Ответов: 0Опубликовано: 28.04.2023

Делаю игру от первого лица Но есть проблема Когда я начинаю ходить возле какого-то объекта Например Квадрата и ходить вокруг него то мой персонаж возвращается и разные стороны Я понимаю что это физика но можно ли как-то это убрать, чтобы персонаж вертелся только когда мне нужно

Код передвижения Персонажа:

using UnityEngine;

public class Movement : MonoBehaviour
{
    
     public float Speed = 5f;
    public Rigidbody rb;
    private bool _isGrounded;
    
    void FixedUpdate()
    {
        
        MovementLogic();
    }

    private void MovementLogic()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");

        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        transform.Translate(movement * Speed * Time.fixedDeltaTime);
    }

    void OnCollisionEnter(Collision collision)
    {
        IsGroundedUpate(collision, true);
    }

    void OnCollisionExit(Collision collision)
    {
        IsGroundedUpate(collision, false);
    }

    private void IsGroundedUpate(Collision collision, bool value)
    {
        if (collision.gameObject.tag == ("Ground"))
        {
            _isGrounded = value;
        }
    }
}

Код вражения камеры:

using UnityEngine;

public class CameraControl : MonoBehaviour
{
    public Transform player;
    public float mouseSensitivity = 2f;
    float cameraVerticalRotation = 0f;

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

    // Update is called once per frame
    void Update()
    {
        MouseControl();
    }

    void FixedUpdate()
    {

    }

    private void MouseControl()
    {
        float inputX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float inputY = Input.GetAxis("Mouse Y") * mouseSensitivity;
        
        cameraVerticalRotation -= inputY;
        cameraVerticalRotation = Mathf.Clamp(cameraVerticalRotation , -90f , 90f);
        transform.localEulerAngles = Vector3.right * cameraVerticalRotation;

        player.Rotate(Vector3.up * inputX);

Код слежения камеры за персонажем:

using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    
    public Transform player;
    public Vector3 offset;
    public float rotation;

    // Update is called once per frame
    void Update()
    {
        transform.position = player.position + offset;
    }
}

Ответы

Ответов пока нет.