Задать вопрос
@edisonvanek

Unity. C#. Персонаж двигается глобально, а надо локально. Как это сделать?

Я делаю игру, с видом от первого лица, но когда персонаж поворачивается, то `Player.transform.Translate` двигает его глобально. Пробовал через rigidbody, но не помогло. Как это исправить?

using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [Header("Player")]
    public GameObject Player;

    [Header("Move")]
    public bool Move;
    public float MoveSpeed;

    private Vector3 MoveDir;

    private float PlayerSpeed;

    [Header("Run")]
    public bool Run;
    public float RunSpeed;


    [Header("Jump")]
    public bool Jump = true;
    public float JumpForce = 4f;
    [HideInInspector] public bool IsGround;

    void Awake() {
        
        if (!Move) {
            MoveSpeed = 0;
        }
        
        if (!Run) {
            RunSpeed = MoveSpeed;
        }
    }

    private void FixedUpdate() {

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

        if (Input.GetAxis("Fire3") == 0) {
            PlayerSpeed = MoveSpeed;
        }

        if (Input.GetAxis("Fire3") > 0) {
            PlayerSpeed = RunSpeed;
        }
        MoveDir = new Vector3(Horizontal * PlayerSpeed, 0f, Vertical * PlayerSpeed);
        Player.transform.Translate(MoveDir);
    }
}
  • Вопрос задан
  • 47 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
@Farawa
transform.forward и transform.right
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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