【问题标题】:Unity partial class does not contain a definitionunity 分部类不包含定义
【发布时间】:2018-02-20 22:37:10
【问题描述】:

我在主/编辑器项目 unity 中有 2 个部分类,但 unity 向我显示错误消息“错误 CS1061:'Engine.Test' 类型不包含'radius' 的定义并且没有'radius' 类型的扩展方法'可以找到 Engine.Test'。您是否缺少程序集引用?"

./Assets/Test.cs(在主项目中):

namespace Engine {

    public partial class Test : MonoBehaviour {

        [SerializeField]
        private float radius = 1f;

    }

}

./Assets/Editor/TestEditor.cs(在项目编辑器中):

namespace Engine {

    public partial class Test {

        private void OnDrawGizmosSelected() {
            Gizmos.color = new Color(1f, 1f, 0f, 0.3f);
            Gizmos.DrawSphere(new Vector3(0,0,0), radius); // in "this" context field "radius" not found
        }

    }

}

我做错了什么?

【问题讨论】:

  • @vc74,对不起,是的,这个错字,“引擎”)|固定
  • 你为什么使用部分类?你想达到什么目的?与 SO 相比,可能更多的是对 CodeReview 的评论,但我认为部分类定义应该只真正用于 separate 逻辑片段。这似乎是一个障碍,必须从一个部分跳到另一个部分才能理解它们。
  • @Eddge 不,部分类型可以有不同的定义,只要它们是相同的类型(类)并标记为部分。见this link
  • @Sudsy1002 啊谢谢。

标签: c# unity3d


【解决方案1】:

Unity 编辑器文件包含在单独的 C# 项目中,并最终在单独的程序集中。您不能在程序集边界上定义部分类。

【讨论】:

  • 它也清楚地显示在解决方案资源管理器中,您将看到 [ProjectName][ProjectName].Editor 作为单独的程序集。
  • T_T,@PaulJan,我可以用其他方式分班吗?
  • 您的用例很可能最好实现为两个单独的类。 究竟这两个类应该如何通信/互连在很大程度上取决于您的确切用例,您可能应该提出一个单独的问题来询问这个问题,但请尝试使其具体化。挥手评论:您通常最终会通过标签和/或使用静态/单例来查找行为。
  • 这适用于编辑器。我想将 gizmos/editor-handler 移动到编辑器的代码中。但是,我想我会使用#if。谢谢你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2017-02-02
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多