Unity侦听器/事件,如OnValueChanged,用于GameObject属性

时间:2015-05-26 15:19:18

标签: c# events unity3d

我想在每次将gameObject.renderer.isVisible设置为false时调用函数而不使用Update(){ if(gameObject.renderer.isVisible == false) FunctionToCall(); } 这很难看。

所以我想知道如何为一般的GameObject属性和脚本变量创建像OnValueChanged(bool)这样的监听器/事件? 也许有一种更简单的方法,我是Unity的新手,所以也许我错过了一些东西。

谢谢,抱歉我的英语不好

1 个答案:

答案 0 :(得分:0)

使用MonoBehaviour.OnBecameInvisible()

public delegate void OnBooleanChanged(bool state);
public event OnBooleanChanged OnVisibilityChangedEvent;
private bool _isVisible;

void Start()
{
    _isVisible = renderer.isVisible;
    OnVisibilityChangedEvent += OnVisibilityChanged;
}

void Update()
{
    if((_isVisible && !renderer.isVisible) | (!_isVisible && renderer.isVisible))
    {
        _isVisible = !_isVisible;

        // example of custom function call
        OnVisibilityChanged(_isVisible); 

        // example of event call
        if(OnVisibilityChangedEvent != null) OnVisibilityChangedEvent(_isVisible); 
    }
}

private void OnVisibilityChanged(bool isVisible)
{
    // ...
}

或使用MonoBehaviourEvents

void OnBecameVisible()
{
    if(OnVisibilityChangedEvent != null)
        OnVisibilityChangedEvent(true);
}

void OnBecameInvisible()
{
    if(OnVisibilityChangedEvent != null)
        OnVisibilityChangedEvent(false);
}