Заикание в Unity 2D - PullRequest
       6

Заикание в Unity 2D

0 голосов
/ 14 ноября 2018

Так что в основном я пытаюсь сделать систему движений игрока такой же, как в RPG Maker с 8 направлениями.Каким-то образом мне это удалось, но только частично.Когда я пытаюсь внезапно изменить направление для экс.Сверху налево, персонаж заикается и не хочет двигаться, не отпуская сначала все клавиши.

Гравитационная шкала отключена или больше похожа на 0, тип кузова - динамический.

Воткод:

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

public class MoveChar : MonoBehaviour {

Rigidbody2D rigid;

public float Speed;

// Use this for initialization
void Start () {

    rigid = GetComponent<Rigidbody2D>();

}

// Update is called once per frame
void Update () {

//        float horiz = Input.GetAxis("Horizontal");

//        float vert = Input.GetAxis("Vertical");

    if(Input.GetKeyDown(KeyCode.W)) //________________________________________MOVING UP

    {
        rigid.velocity = new Vector2(rigid.velocity.x, 1 * Speed);
    }
    else if(Input.GetKeyUp(KeyCode.W))
    {
        rigid.velocity = new Vector2(0, 0);
    }

    if (Input.GetKeyDown(KeyCode.S)) //_______________________________________MOVING DOWN
    {
        rigid.velocity = new Vector2(rigid.velocity.x, -1 * Speed);
    }
    else if (Input.GetKeyUp(KeyCode.S))
    {
        rigid.velocity = new Vector2(0, 0);
    }


    if (Input.GetKeyDown(KeyCode.A)) //_______________________________________MOVING LEFT
    {
        rigid.velocity = new Vector2(-1 * Speed, rigid.velocity.y);
    }
    else if (Input.GetKeyUp(KeyCode.A))
    {
        rigid.velocity = new Vector2(0, 0);
    }

    if (Input.GetKeyDown(KeyCode.D)) //_______________________________________MOVING RIGHT
    {
        rigid.velocity = new Vector2(1 * Speed, rigid.velocity.y);
    }
    else if (Input.GetKeyUp(KeyCode.D))
    {
        rigid.velocity = new Vector2(0, 0);
    }
}

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Существует только небольшая проблема с отпуском кнопки. Добавьте исходную силу в направлении, на которое ключ не влияет. Весь скрипт должен выглядеть так:

void Update()
{
    if (Input.GetKeyDown(KeyCode.W)) //________________________________________MOVING UP
    {
        rigid.velocity = new Vector2(rigid.velocity.x, 1 * Speed);
    }
    else if (Input.GetKeyUp(KeyCode.W))
    {
        rigid.velocity = new Vector2(rigid.velocity.x, 0);
    }

    if (Input.GetKeyDown(KeyCode.S)) //_______________________________________MOVING DOWN
    {
        rigid.velocity = new Vector2(rigid.velocity.x, -1 * Speed);
    }
    else if (Input.GetKeyUp(KeyCode.S))
    {
        rigid.velocity = new Vector2(rigid.velocity.x, 0);
    }


    if (Input.GetKeyDown(KeyCode.A)) //_______________________________________MOVING LEFT
    {
        rigid.velocity = new Vector2(-1 * Speed, rigid.velocity.y);
    }
    else if (Input.GetKeyUp(KeyCode.A))
    {
        rigid.velocity = new Vector2(0, rigid.velocity.y);
    }

    if (Input.GetKeyDown(KeyCode.D)) //_______________________________________MOVING RIGHT
    {
        rigid.velocity = new Vector2(1 * Speed, rigid.velocity.y);
    }
    else if (Input.GetKeyUp(KeyCode.D))
    {
        rigid.velocity = new Vector2(0, rigid.velocity.y);
    }
}

Надеюсь, это вам поможет.

0 голосов
/ 14 ноября 2018

Используйте Input.GetAxis(axisName), чтобы избежать конфликтующих случаев во входном коде. Кроме того, используйте AddForce для приятной игры с другими твердыми телами.

Vector2 oldV = rigid.velocity;
float horiz = Input.GetAxis("Horizontal");
float vert = Input.GetAxis("Vertical");

Vector2 newV = new Vector2(horiz * Speed, vert * Speed);
rigid.AddForce(newV-oldV, ForceMode2D.Impulse);

В качестве альтернативы, отслеживайте свои собственные оси, когда клавиши поднимаются / нажимаются

public float horiz;
public float vert;

void Start() {
    horiz = 0f;
    vert = 0f;
    if (Input.GetKey(KeyCode.A)) horiz -= 1f;
    if (Input.GetKey(KeyCode.D)) horiz += 1f;
    if (Input.GetKey(KeyCode.S)) vert -= 1f;
    if (Input.GetKey(KeyCode.W)) vert += 1f;
}

void Update () {
    Vector2 oldV = rigid.velocity;

    if(Input.GetKeyDown(KeyCode.W)) vert += 1f;
    else if(Input.GetKeyUp(KeyCode.W)) vert -= 1f;

    if (Input.GetKeyDown(KeyCode.S)) vert -= 1f;
    else if (Input.GetKeyUp(KeyCode.S)) vert += 1f;

    if (Input.GetKeyDown(KeyCode.A)) horiz -= 1f;
    else if (Input.GetKeyUp(KeyCode.A)) horiz += 1f;

    if (Input.GetKeyDown(KeyCode.D)) horiz += 1f;
    else if (Input.GetKeyUp(KeyCode.D)) horiz -= 1f;

    Vector2 newV = new Vector2(horiz * Speed, vert * Speed);
    rigid.AddForce(newV-oldV, ForceMode2D.Impulse);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...