我正在使用 Unity,遇到了与序列化非 MonoBehaviour 类相关的问题。具体来说,我有一个从 MonoBehaviour 派生的 PlayerController 类,其中包含一个 pu...
我正在使用 Unity,遇到了与序列化非 MonoBehaviour 类相关的问题。具体来说,我有一个 PlayerController 类,它派生自 MonoBehaviour,并包含 GroundDetection 类型的公共字段。GroundDetection 类不是派生自 MonoBehaviour,而是在 Unity Inspector 中序列化的。
这是一个简化的例子:
public class PlayerController : MonoBehaviour
{
public GroundDetection groundDetection;
}
[System.Serializable]
public class GroundDetection
{
public float RayDistance;
public LayerMask GroundLayer;
public GroundDetection(float rayDistance, LayerMask groundLayer)
{
RayDistance = rayDistance;
GroundLayer = groundLayer;
}
}
当我修改 Inspector 中的 GroundDetection 字段,然后使用 new GroundDetection() 创建 GroundDetection 的新实例时,所有字段都会重置为其默认值。
例如:
groundDetection = new GroundDetection(this, groundDetection.RayDistance, groundDetection.GroundLayer);
虽然在构造函数中初始化字段(如图所示)有效,但对于多个非 MonoBehaviour 脚本来说,它并不是一个理想的解决方案。
当从 Unity Inspector 编辑非 MonoBehaviour 类中的序列化字段时,有没有更好的方法来保留这些字段的值?
任何指导或最佳实践都将不胜感激!
谢谢你!
编辑:
像这样使用构造函数也不是最好的方法,但它是目前我发现的最方便的解决方案,仍然可以控制实际上应该设置哪些字段,并且仍然保持调用足够简单以便将其用于许多不同的类和字段。例如像这样:
public class PlayerController : MonoBehaviour
{
public GroundDetection groundDetection;
void Start()
{
groundDetection = new GroundDetection(groundDetection);
}
}