刚体被拖回弹性物体

时间:2015-11-15 18:15:43

标签: unity3d 2d bounce

我有一个标记为“Bouncy object”的对象,它会让我的玩家碰撞;它可以工作但是在碰撞之后,我的玩家就像被拖回到被标记为“Bouncy对象”的对象,然后像循环那样再次做同样的事情。我使用的代码是:

void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Bouncy object")
        GetComponent<Rigidbody2D>().AddForce(transform.right * 38, ForceMode2D.Impulse);
}

然后我将玩家Rigidbody上的阻力设置为:1.49。我怎么能阻止这种情况发生?我想要的是标记为“Bouncy object”的对象将我的玩家推入碰撞(触发器)然后冻结Rigidbody2D 2秒钟,然后允许我控制我的玩家。

1 个答案:

答案 0 :(得分:0)

这是您想要的代码。我刚刚测试过。

如果Cube与Block发生碰撞,它会反弹0.1秒并冻结1秒。

关键是'-GetComponent()。speedocity'。

Here is the screenshot of editor.

public class PlayerController : MonoBehaviour {

public float force = 10f;

float speed = 5f;
float freezeTime = 1f;

bool isCollide = false;

void FixedUpdate () 
{
    float dirX = Input.GetAxis ("Horizontal");
    float dirY = Input.GetAxis ("Vertical");

    Vector3 movement = new Vector2 (dirX, dirY);

    if(isCollide==false)
        GetComponent<Rigidbody2D> ().velocity = movement * speed;
}

void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Boundary") {
        isCollide = true;
        GetComponent<Rigidbody2D> ().AddForce (-GetComponent<Rigidbody2D> ().velocity * force, ForceMode2D.Impulse);
        Invoke("StartFreeze", 0.1f);

    }
}

void StartFreeze()
{
    GetComponent<Rigidbody2D> ().constraints = RigidbodyConstraints2D.FreezeAll;
    Invoke("ExitFreeze", freezeTime);
}

void ExitFreeze()
{
    GetComponent<Rigidbody2D> ().constraints = RigidbodyConstraints2D.None;
    isCollide = false;
}
}