@art303

Как довести до ума код?

вот насочинял код, по причине того, что у меня уровень чуть выше начального он нормально не работает
требуется, чтоб персонаж ходил с учетом угла поворота. Что убрать/докрутить?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class position : MonoBehaviour
{
    float camSens = 0.25f;
    private Vector3 lastMouse = new Vector3(0, 0, 0);
    private Rigidbody rb;
    public float speed = 6.0f;
    private Vector3 moveVector;
    private Vector3 moveVector2;
    public Vector3 debug;
    public float deb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }
    void Start()
    {
    }


    void Update()
    {
        lastMouse = Input.mousePosition - lastMouse;
        lastMouse = new Vector3(0, lastMouse.x * camSens, 0);
        lastMouse = new Vector3(0, transform.eulerAngles.y + lastMouse.y, 0);
        transform.eulerAngles = lastMouse;
        lastMouse = Input.mousePosition;
        deb = Input.GetAxis("Horizontal");
     // тут начинается то, что не рабоает
        if (Input.GetAxis("Horizontal") == 0) 
        {
            moveVector.x = 0;
            moveVector.z =0;
        }
        else
        {
            moveVector.x = Input.GetAxis("Horizontal") / Mathf.Abs(transform.forward.x);
            moveVector.z = Mathf.Abs(transform.forward.x);
        }
        if (Input.GetAxis("Vertical") == 0)
        {
            moveVector2.x = 0;
            moveVector2.z = 0;
        }
        else
        {
            moveVector2.z = Input.GetAxis("Vertical") / Mathf.Abs(transform.forward.x);
            moveVector2.x = Mathf.Abs(transform.forward.x);
        }
        if (Input.GetKey("space"))
        {
            transform.position = new Vector3(0, 0, 0);
        }
        else
        {

        }
        deb = Mathf.Abs(transform.forward.x);
        rb.MovePosition(rb.position + (moveVector + moveVector2) * speed * Time.deltaTime);
    }
}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@Medovochka
Попробуй это:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float camSens = 0.25f;
    private Vector3 lastMouse = Vector3.zero;
    private Rigidbody rb;
    public float speed = 6.0f;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        
        Vector3 mouseDelta = Input.mousePosition - lastMouse;
        float mouseX = mouseDelta.x * camSens;
        float mouseY = -mouseDelta.y * camSens;
        lastMouse = Input.mousePosition;

        
        Vector3 currentRotation = transform.rotation.eulerAngles;
        currentRotation.y += mouseX;
        transform.rotation = Quaternion.Euler(currentRotation);

       
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput).normalized;
        moveDirection = transform.TransformDirection(moveDirection);

        Vector3 newPosition = rb.position + moveDirection * speed * Time.deltaTime;
        rb.MovePosition(newPosition);

        
        if (Input.GetKey("space"))
        {
            transform.position = Vector3.zero;
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы