C# 碰撞碰撞器时Rigidbody2D停止

C# 碰撞碰撞器时Rigidbody2D停止,c#,unity3d,C#,Unity3d,我有一个带Rigidbody2D的播放器和一个圆形对撞机。玩家收集带有圆形碰撞器的硬币。我左右移动玩家。当它收集到一枚硬币时,硬币将被销毁,玩家将停止,因此我必须再次触摸以继续向左/向右移动。那么,如何在不停止玩家的情况下收集硬币呢?下面是我移动刚体的代码: void TouchMove() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); float middle

我有一个带Rigidbody2D的播放器和一个圆形对撞机。玩家收集带有圆形碰撞器的硬币。我左右移动玩家。当它收集到一枚硬币时,硬币将被销毁,玩家将停止,因此我必须再次触摸以继续向左/向右移动。那么,如何在不停止玩家的情况下收集硬币呢?下面是我移动刚体的代码:

void TouchMove()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        float middle = Screen.width / 2;

        if (touch.position.x < middle && touch.phase == TouchPhase.Began)
        {
            MoveLeft();
        }

        else if (touch.position.x > middle && touch.phase == TouchPhase.Began)
        {
            MoveRight();
        }
    }
    else
    {
        SetVelocityZero();
    }
}

public void MoveLeft()
{
    rb.velocity = new Vector2(-playerSpeed, 0);
}

public void MoveRight()
{
    rb.velocity = new Vector2(playerSpeed, 0);
}

public void SetVelocityZero()
{
    rb.velocity = Vector2.zero;
}
void TouchMove()
{
如果(Input.touchCount>0)
{
Touch-Touch=Input.GetTouch(0);
浮动中间=屏幕宽度/2;
if(touch.position.xmiddle&&touch.phase==TouchPhase.start)
{
MoveRight();
}
}
其他的
{
SetVelocityZero();
}
}
公共空间左移()
{
rb.velocity=新矢量2(-playerSpeed,0);
}
公权
{
rb.velocity=新矢量2(播放器速度,0);
}
公共无效SetVelocityZero()
{
rb.速度=矢量2.0;
}

您的硬币不能与任何物体碰撞,尤其是玩家

使硬币的碰撞器被触发,然后使用
OnTriggerInter2D
检测碰撞器何时接触玩家,以销毁硬币,而不是
OnCollisionInter2D

连接到您的硬币游戏对象:

void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        Debug.Log("Player detected. Destroying this coin");
        Destroy(gameObject);
    }
}
void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Coin"))
    {
        Debug.Log("Coin detected. Destroying coin");
        Destroy(collision.gameObject);
    }
}
或附加到您的玩家游戏对象:

void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        Debug.Log("Player detected. Destroying this coin");
        Destroy(gameObject);
    }
}
void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Coin"))
    {
        Debug.Log("Coin detected. Destroying coin");
        Destroy(collision.gameObject);
    }
}