Unity2D: ограничение перемещения персонажей под контролем игрока - PullRequest
0 голосов
/ 26 января 2019

В настоящее время я работаю над платформой для 2d tour в стиле simillar to Worms.Есть одна вещь, которую я хотел бы воссоздать в своей игре - это способ взаимодействия членов команды друг с другом.

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

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

Ниже приведен скрипт PlayerController, отвечающий за перемещение символов:

private float MoveSpeed = 5f;
private float JumpSpeed = 15f;
private float MoveInput;

private Rigidbody2D rb;

public bool FacingRight = true;
public bool Grounded;
private bool Jump;

public Transform GroundCheck;
public Transform HealthTag;
public LayerMask Ground;

public Animator animator;

private void Start()
{
    rb = GetComponent<Rigidbody2D>();
}

private void Update()
{
    if (Input.GetButtonDown("Jump") && Grounded == true)
    {
        Jump = true;

        if (Jump == true)
        {
            rb.velocity = new Vector2(rb.velocity.x, JumpSpeed);
        }       
    }
}

private void FixedUpdate()
{
    Grounded = Physics2D.OverlapCircle(GroundCheck.position, 0.5f, Ground);

    if(Grounded == false)
    {
        Jump = false;
    }

    MoveInput = Input.GetAxis("Horizontal");

    animator.SetFloat("Speed", Mathf.Abs(MoveInput));

    rb.velocity = new Vector2(MoveInput * MoveSpeed, rb.velocity.y);

    if (MoveInput > 0 && FacingRight == false)
    {
        Flip();
    }

    else if (MoveInput < 0 && FacingRight == true)
    {
        Flip();
    }        
}

void Flip()
{
    FacingRight = !FacingRight;

    if (FacingRight == true)
    {
        transform.eulerAngles = new Vector3(0, 0, 0);
        HealthTag.transform.eulerAngles = new Vector3(0, 0, 0);

    }
    if (FacingRight == false)
    {
        transform.eulerAngles = new Vector3(0, 180, 0);
        HealthTag.transform.eulerAngles = new Vector3(0, 0, 0);
    }
}

1 Ответ

0 голосов
/ 27 января 2019

Вы должны установить жесткое тело холостого хода на кинематическое. Это предотвратит толчок движущегося игрока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...