Проблемы в движении 2д персонажа

Общие вопросы о Unity3D

Проблемы в движении 2д персонажа

Сообщение Flash14243 20 окт 2019, 20:36

Привет, снова нужна ваша помощь. Нашёл код на управление 2д персонажем. Но там были записаны только движение вправо и влево. Я решил немного разобраться в коде и добавил движения вверх и вниз. Но они странно работают, если нажать вниз/вверх он поедет вниз . Если задержать вправо и вверх/низ , он едет вверх и прочее.
Может кто-нибудь исправить код, сам только начинаю разбираться в C# , курсы начал смотреть. Если есть возможность, добавьте комментарии пожалуйста в код и напишите в чём проблема была

Код:
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;

public class player_Control : MonoBehaviour
{
    public Rigidbody2D RigBud;
    public float movespeed;
    public bool moveright;
    public bool moveleft;
    public bool moveup;
    public bool movedown;
    public bool jump;
    public Transform groundCheck;
    public float groundCheckRadius;
    public LayerMask WoIG;

    // Use this for initialization
    void Start()
    {
        RigBud = GetComponent<Rigidbody2D>();
    }
    void FixedUpdate()
    {
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            RigBud.velocity = new Vector2(-movespeed, RigBud.velocity.y);
            transform.rotation = Quaternion.Euler(0, 0, -270);
            Debug.Log("moving left");
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            RigBud.velocity = new Vector2(movespeed, RigBud.velocity.y);
            transform.rotation = Quaternion.Euler(0, 0, 270);
            Debug.Log("moving right");
        }
        if (Input.GetKey(KeyCode.UpArrow))
        {
            RigBud.velocity = new Vector2(-movespeed, RigBud.velocity.x);
            transform.rotation = Quaternion.Euler(0, 0, 0);
            Debug.Log("moving up");
        }

        if (Input.GetKey(KeyCode.DownArrow))
        {
            RigBud.velocity = new Vector2(-movespeed, RigBud.velocity.x);
            transform.rotation = Quaternion.Euler(0, 0, 180);
            Debug.Log("moving down");
        }
        if (moveright)
        {
            RigBud.velocity = new Vector2(movespeed, RigBud.velocity.x);
            transform.rotation = Quaternion.Euler(0, 0, 270);
        }
        if (moveleft)
        {
            RigBud.velocity = new Vector2(-movespeed, RigBud.velocity.x);
            transform.rotation = Quaternion.Euler(0, 0, -270);
        }
        if (moveup)
        {
            RigBud.velocity = new Vector2(movespeed, RigBud.velocity.y);
            transform.rotation = Quaternion.Euler(0, 0, 0);
        }
        if (movedown)
        {
            RigBud.velocity = new Vector2(movespeed, RigBud.velocity.y);
            transform.rotation = Quaternion.Euler(0, 0, 180);
        }
    }
    }
 


Скрины проекта и настройки RigidBody(Может в них проблема):
https://imgur.com/a/dmKgj2D

Скорее всего зайду на форум завтра, заранее спасибо за помощь
Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Проблемы в движении 2д персонажа

Сообщение 1max1 20 окт 2019, 21:42

Делать привязку по осям:
Input.GetKey(KeyCode) -->> Input.GetAxis("Horizontal/Vertical").

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблемы в движении 2д персонажа

Сообщение Flash14243 21 окт 2019, 07:58

Спасибо, посмотрел видео , движение работает. И я добавил к скрипту ещё повороты во время нажатия разных стрелочек, очень рад, что пока всё получается)
Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12