CollisionOnEnter如何检测对象是否在碰撞?

时间:2019-08-06 12:08:37

标签: c# unity3d game-physics physics

我对C#和Unity相当陌生,我尝试制作“愤怒的小鸟”克隆版,并陷入了这个问题。

我想在鸟飞行并撞击物体时更改Gameobject(在我的情况下为木刻版)的质量,它应从Mass:1更改为Mass:0.2 here is a screenshot of the scene 我创建了两个方法,它以一种怪异的方式工作,但是每次我开始游戏时,质量不会以0.2变为1。仅当鸟与木刻相撞时才应改变。

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Wall : MonoBehaviour

private float wallMass;
private bool isHit;
private Rigidbody2D rb;

void Start()
{
    rb = gameObject.GetComponent<Rigidbody2D>();
    wallMass = 1.0f;
    isHit = false;
}

void Update()
{
    CollisionOn(isHit);
}

private void CollisionOn(bool isTrue)
{
    rb.GetComponent<Rigidbody2D>().mass = wallMass;
    if (isTrue)
    {
        DecreaseMass();
    }
}

void DecreaseMass()
{
    rb.GetComponent<Rigidbody2D>().mass = 0.2f;
}

1 个答案:

答案 0 :(得分:0)

在随附于MonoBehaviour上使用这两个事件。

发生碰撞时调用

void OnCollisionEnter2D(Collision2D col)
{
   GetComponent<Rigidbody2D>().mass = wallMass;
}

碰撞结束时的方式相同。

void OnCollisionExit2D(Collision2D other)
{
    GetComponent<Rigidbody2D>().mass = 0.2f;
}