如何在 Unity 中正确使用 SerializeReference 字段?

问题描述 投票:0回答:2

我正在尝试让一个类包含一系列具有相同界面的脚本。

这是我目前使用的三个脚本:

ICollisionScript.cs:

public interface ICollisionScript {
    public void OnCollision(BallController ball) {
        
    }
}

这是实现该接口的脚本框架示例,RandomEffect.cs:

public class RandomEffect: ICollisionScript {
    public void OnCollision(BallController ball) {
        // some random effect
    }
}

最后,在“基本”脚本 BallController.cs 中,我想查看这些脚本的列表:

[SerializeReference] public List<ICollisionScript> collisionScripts;

我在 Unity 检查器中看到了这个;但是,如果我尝试将 RandomEffect.cs 文件/脚本拖到列表中,它根本不起作用。这是为什么?

c# unity3d
2个回答
0
投票

Unity 不允许您将脚本直接拖到检查器中。您需要将它应用到一个游戏对象,然后您可以将其拖到列表中。

Unity 仅在脚本附加到对象时执行 Update() 和 MonoBehaviour 中的其他函数。这就是它不起作用的原因。


0
投票

如果你想在 Unity 中引用脚本作为非单一行为对象,你可以使用 ScriptableObject

© www.soinside.com 2019 - 2024. All rights reserved.