c#实现每当gameobject的activeself变化时,进行处理
时间: 2024-10-28 07:08:50 浏览: 21
在Unity C#中,如果你想要每当GameObject的SetActive()方法(控制游戏物体是否活跃)发生变化时触发某个处理过程,你可以使用`OnChange()`或自定义委托(Delegate)。这里是一个简单的示例:
```csharp
using UnityEngine;
using System.Collections;
public class GameObjectStateListener : MonoBehaviour
{
// 创建一个公共事件委托,用于处理ActiveSelf状态变化
public delegate void OnActiveSelfChanged(bool isActive);
public event OnActiveSelfChanged OnActiveSelfChangedEvent;
private void Update()
{
if (OnActiveSelfChangedEvent != null)
{
bool oldActive = activeSelf; // 获取旧的状态
SetActive(newActiveValue); // 更改GameOject的活动状态
// 触发事件,传递新状态和旧状态作为参数
OnActiveSelfChangedEvent(oldActive, activeSelf);
}
}
[SerializeField] private bool newActiveValue; // 新的活动状态设置在这里
private bool activeSelf; // 当前的游戏物体活动状态
// 让监听器处理实际的活动状态更改
public void ChangeActiveState()
{
activeSelf = newActiveValue;
// 如果已经订阅了事件处理器
if (OnActiveSelfChangedEvent != null)
{
OnActiveSelfChangedEvent(activeSelf);
}
}
}
// 使用这个组件时,在脚本上添加此行为,并通过Inspector设置新的激活状态
[AddComponentMenu("Scripts/MyScript")]
public class MyCustomScript : GameObjectStateListener
{
// 在此处实例化并设置OnActiveSelfChangedEvent事件
protected override void Awake()
{
base.Awake();
OnActiveSelfChangedEvent += HandleActiveSelfChange;
}
private void HandleActiveSelfChange(bool isActive)
{
Debug.Log($"Game object active state changed to: {isActive}");
// 这里可以添加你需要处理的具体逻辑
}
}
```
在这个例子中,当你调用`ChangeActiveState()`方法时,或当`activeSelf`字段被外部修改时,`OnActiveSelfChangedEvent`事件会被触发。
阅读全文