我想在每次将gameObject.renderer.isVisible设置为false时调用函数而不使用Update(){
if(gameObject.renderer.isVisible == false)
FunctionToCall();
}
这很难看。
所以我想知道如何为一般的GameObject属性和脚本变量创建像OnValueChanged(bool)这样的监听器/事件? 也许有一种更简单的方法,我是Unity的新手,所以也许我错过了一些东西。
谢谢,抱歉我的英语不好
答案 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);
}