在unity中,我有两个gameobject,一个是player上面挂了player脚本,脚本中有私有的int类型变量value和私有的bool类型变量isChanged。另一个gameobject是platform,上面挂有platform脚本,在platform脚本中有私有的成员方法ActivePlat,我在onAwake函数中为名为ChangePlat的委托下注册了ActivePlat。现在我想在player和platform发生碰撞时,player先修改value为5,修改isChanged为false,在player修改完毕后,为platform取消注册ChangePlay下的ActivePlat的方法,请问该如何实现
时间: 2024-03-05 10:53:22 浏览: 86
鼠标抓取gameobject(类似碰撞检测)1
你可以在Player脚本中添加一个OnCollisionEnter2D方法,当Player与Platform发生碰撞时,该方法会被调用。在OnCollisionEnter2D方法中,你可以先修改Player脚本中的value和isChanged变量,然后获取Platform对象并在其中调用一个新的公共方法CancelActivePlat(),该方法用于取消ActivePlat委托下的ActivePlat方法。
以下是示例代码:
```csharp
public class Player : MonoBehaviour
{
private int value;
private bool isChanged;
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Platform"))
{
value = 5;
isChanged = false;
Platform platform = collision.gameObject.GetComponent<Platform>();
platform.CancelActivePlat();
}
}
}
public class Platform : MonoBehaviour
{
private delegate void ChangePlatDelegate();
private event ChangePlatDelegate ChangePlat;
private void Awake()
{
ChangePlat += ActivePlat;
}
private void ActivePlat()
{
// Do something
}
public void CancelActivePlat()
{
ChangePlat -= ActivePlat;
}
}
```
在上述示例中,当Player与Platform发生碰撞时,OnCollisionEnter2D方法会被调用,其中获取Platform对象并调用其CancelActivePlat方法。在CancelActivePlat方法中,会将ActivePlat方法从ChangePlat委托中取消注册。
阅读全文