【Unity&继承】关于继承的一些问题

本文介绍如何通过继承机制来减少代码重复并提高复用性。详细解释了如何创建父类及子类,以及如何在子类中访问父类的成员变量。

在代码中,有的 代码 需要大量重复,并且调用。这个时候 使用继承 就可以解决这个问题。

-----------------------------------------------------------------------------------------------------怎么使用继承

1.首先创建 一个 父类,也就是 大量重复 的脚本文件,里面存放 需要 多次调用的文本public class XMLBase : MonoBehaviour

2.子类继承 父类的 代码public class UI_BackP_XML_Item : XMLBase

--------------------在父类创建一个 int 变量 test ,要想在 子类中调用 父类 的 int 变量 test ,这个变量必须是 public,不能为private。

public class XMLBase : MonoBehaviour{public int test = 0;}

public class UI_BackP_XML_Item : XMLBase{ void Start() { Debug.Log(" "+ test); }}//测试是可以显示出来的。

--------------------注意,子类继承父类,是无法 改变 父类的 int 变量 test 。也就是说 子类B、C 都继承 父类 A,父类A里面有 public int 变量 test =0;那么子类 B、C 都是 可以 使用 test 变量, test 变量 的初始化 已经 在父类 A里面 初始化了。 test 变量 已经在 父类A 里面赋初值。那么在子类 B、C 中都是 0。子类 B、C 可以改变 test的值,但是 改变的值 只能 在自身的脚本中使用。

---------------------------------------------------------------------------------

### Unity 中 ScriptableObject 的父类继承与实现方式 在 Unity 中,`ScriptableObject` 是一个可以独立于类实例保存数据的数据容器。它可以被序列化并存储在资产文件中,因此非常适合用于管理游戏中的配置数据、状态数据等[^1]。如果需要让父类对象继承 `ScriptableObject`,可以通过以下方式实现。 #### 1. 父类继承 `ScriptableObject` `ScriptableObject` 本身是一个抽象类,因此可以直接被其他类继承。为了创建一个继承自 `ScriptableObject` 的父类,可以定义一个基类,并在此基础上扩展子类的功能。 以下是父类的定义示例: ```csharp using UnityEngine; [CreateAssetMenu(menuName = "MyAssets/BaseScriptableObject")] public class BaseScriptableObject : ScriptableObject { public string baseProperty; } ``` 此代码片段定义了一个名为 `BaseScriptableObject` 的父类,它继承自 `ScriptableObject` 并包含一个公共属性 `baseProperty`。通过 `[CreateAssetMenu]` 属性,可以在 Unity 编辑器中通过右键菜单创建该类型的资产[^2]。 #### 2. 子类继承父类 在定义了父类后,可以进一步创建子类来扩展功能。子类不仅可以继承父类的属性和方法,还可以添加自己的特定逻辑。 以下是子类的定义示例: ```csharp using UnityEngine; [CreateAssetMenu(menuName = "MyAssets/DerivedScriptableObject", fileName = "DerivedScriptableObject")] public class DerivedScriptableObject : BaseScriptableObject { public int derivedProperty; public void DisplayInfo() { Debug.Log($"Base Property: {baseProperty}, Derived Property: {derivedProperty}"); } } ``` 在此示例中,`DerivedScriptableObject` 继承自 `BaseScriptableObject`,并新增了一个整数属性 `derivedProperty` 和一个方法 `DisplayInfo`。通过 `[CreateAssetMenu]` 属性,也可以在 Unity 编辑器中创建该子类的资产。 #### 3. 使用继承的 ScriptableObject 在 Unity 中使用继承的 `ScriptableObject` 非常简单。只需在场景或脚本中引用这些资产即可。 以下是如何在脚本中加载和使用这些资产的示例: ```csharp using UnityEngine; public class ExampleUser : MonoBehaviour { public BaseScriptableObject baseObject; public DerivedScriptableObject derivedObject; void Start() { if (baseObject != null) { Debug.Log($"Base Object Property: {baseObject.baseProperty}"); } if (derivedObject != null) { derivedObject.DisplayInfo(); } } } ``` 在此脚本中,`ExampleUser` 类通过 `public` 字段引用了 `BaseScriptableObject` 和 `DerivedScriptableObject` 资产。在 `Start` 方法中,分别访问了父类子类的属性及方法。 #### 4. 注意事项 - 确保每个继承自 `ScriptableObject` 的类都带有 `[CreateAssetMenu]` 属性,以便在 Unity 编辑器中创建对应的资产。 - 如果需要动态创建 `ScriptableObject` 实例,可以使用 `ScriptableObject.CreateInstance<T>()` 方法[^1]。 - 在设计时应尽量避免直接修改 `ScriptableObject` 的实例,因为它们是共享的资源,修改会影响所有引用该实例的地方。 ### 示例代码总结 上述代码展示了如何定义一个继承自 `ScriptableObject` 的父类,以及如何从该父类派生子类。通过这种方式,可以有效地组织和复用数据结构,同时利用 Unity 的序列化机制保存和加载数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值