Unity2D:限制玩家控制的角色相互移动



我目前正在制作基于2d巡回赛的平台游戏,其风格类似于Worms游戏。我想在我的游戏中重现一件事,那就是团队成员之间的互动方式。

我正在寻找一种解决方案来锁定角色之间的速度传输。假设当前受玩家控制的一个角色正在向另一个处于空闲状态的角色移动。当这些角色发生冲突时,可控的角色应该无法进一步前进。但相反,当第一个仍在移动时,它开始移动第二个。

因此,我正在寻找一种解决方案来防止当前控制字符的速度转移到其他角色的情况。

下面是负责移动字符的玩家控制器脚本:

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);
    }
}

您必须将空闲玩家的刚体设置为运动学。这将防止它被移动的玩家推动。

最新更新