Unity2D:限制玩家控制的角色彼此移动

时间:2019-01-26 19:56:43

标签: c# unity3d

我目前正在制作类似于蠕虫游戏的2d巡回平台游戏。我想在游戏中重新创建一件事,那就是团队成员相互交流的方式。

我正在寻找一种解决方案来锁定字符之间的速度传递。假设当前处于玩家控制之下的一个角色正在向处于空闲状态的另一个角色移动。当这些角色发生碰撞时,可控制的角色应该不能进一步前进。但是,当第一个移动时,它开始移动第二个。

所以我正在寻找一种解决方案,以防止当当前控制的字符的速度转移到其他字符时出现这种情况。

下面是负责移动角色的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 :(得分:1)

您必须将闲置播放器的刚体设置为运动学的。这样可以防止它被移动的玩家推动。