[Unity][继承]

探讨在Unity引擎中,如何通过接口来查找并操作继承自同一父类的不同子类的数组。测试表明,利用接口可以实现对这些不同类别子类的管理。

 

 

 

继承父类的子类的数组,是否能够通过 接口找到 这些不同类别的子类

如下测试所示

using UnityEngine;

public class Test_SkillManage : MonoBehaviour {
    public Test_Skill[] list_Skill;
	// Use this for initialization
	void Start () {

        if (list_Skill != null)
        {
            foreach (Test_Skill t in list_Skill)
            {
                Debug.Log("      name:" + t.name);
                //t.num
                t.Use();
            }
        }
	}
}

 

using UnityEngine;

public class Test_Skill : MonoBehaviour {
    public string name;
    public virtual void Use()
    {
        Debug.Log(" Using :"+name);
    }
}
using UnityEngine;

public class Test_Skill001 : Test_Skill
{
    public int num;
    public override void Use()
    {
        base.Use();
        Debug.Log(name+"/1//"+nu
### 如何在 Unity 中通过继承实现 Event 功能 #### 创建自定义事件类 为了创建一个可以被可视化的事件,在Unity中通常会创建一个新的类并让其继承`UnityEvent`。这允许开发者能够方便地在Inspector面板上配置响应该事件的方法。 ```csharp using UnityEngine; using UnityEngine.Events; public class CustomGameEvent : UnityEvent<int> { // 自定义游戏事件,携带整型参数 } ``` 上述代码展示了如何定义一个带有特定签名的自定义事件类型[^1]。 #### 实现事件触发逻辑 当希望某个组件能够在满足条件时发出这个自定义事件,则可以在脚本内部编写相应的业务逻辑,并调用`Invoke()`方法来激活已注册的所有监听者。 ```csharp using UnityEngine; public class GameEventManager : MonoBehaviour { public CustomGameEvent onScoreChanged; // 定义公共字段以便编辑器访问 private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { int scoreChangeValue = 10; onScoreChanged?.Invoke(scoreChangeValue); } } } ``` 这段示例说明了怎样利用按键输入作为契机去广播分数变化的消息给所有订阅者。 #### 注册回调函数 为了让其他对象能接收到此类通知,就需要向对应的`CustomGameEvent`实例添加处理器。可以通过编程方式完成这一操作;也可以直接在Unity Inspector界面里指定目标方法。 ```csharp using UnityEngine; public class ScoreReceiver : MonoBehaviour { public void HandleScoreChange(int changeAmount) { Debug.Log($"Received score update: {changeAmount}"); } private void OnEnable() { var gameManager = FindObjectOfType<GameEventManager>(); if(gameManager != null && gameManager.onScoreChanged!=null){ gameManager.onScoreChanged.AddListener(HandleScoreChange); } } private void OnDisable() { var gameManager = FindObjectOfType<GameEventManager>(); if(gameManager != null && gameManager.onScoreChanged!=null){ gameManager.onScoreChanged.RemoveListener(HandleScoreChange); } } } ``` 这里给出了接收端应该如何连接至发送方的具体做法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值