【发布时间】:2020-06-22 03:16:24
【问题描述】:
我正在使用 Unity 2019.3.13f1 和 Visual Studio Community 2019 版本 16.5.4。我的脚本 InterfaceContainer.cs 如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InterfaceContainer : MonoBehaviour {
// Start is called before the first frame update
void Start() {
}
// Update is called once per frame
void Update() {
}
}
public interface IItem {
public string Name { get; }
public string Path { get; }
public GameObject Icon { get; }
public void Open();
}
Visual Studio 没有给出编译错误。
在 Unity 中,脚本检查器会显示“文件中没有 MonoBehaviour 脚本,或者它们的名称与文件名不匹配。”当我将脚本拖入游戏对象时,它显示“无法添加脚本组件“InterfaceContainer”,因为找不到该脚本类。确保没有编译错误,并且文件名和类名匹配。”
名称绝对匹配,因为当我删除界面部分时,错误不再存在。
我也尝试删除类部分。它没有帮助。
添加的任何后续脚本都有完全相同的错误,无论它们是否包含任何接口或引用此脚本。
奇怪的是当我删除这个脚本的界面部分,刷新Unity,再次添加这部分,再次刷新Unity,错误消失了。但是所有随后添加的脚本仍然有相同的错误。
我不知道是什么导致了这个错误,并且用谷歌搜索了很长时间没有结果。任何帮助将不胜感激。
编辑:当我删除界面部分并再次添加时,错误并没有消失;我仍然可以将脚本作为组件拖动,当我尝试进入播放模式时,它会要求我修复所有编译器错误。
【问题讨论】:
-
控制台还有其他错误吗?在修复所有编译器错误之前,Unity 不会重新编译所有内容!
-
嘿,不是 100% 确定,但我认为你不应该为每个文件声明超过 1 个 Monobehaviour 类,否则 Unity 不喜欢它。尝试将
IItem移动到单独的文件中,看看是否有帮助 -
@Ron
IItem不是class,也不是MonoBehaviour,虽然 ;) 在MonoBehaviour文件中有一个接口并不美观,但没有问题 -
@derHugo 我同意,但我确实在使用旧版本的 Unity 之一时遇到了这个问题,这就是我问的原因
-
@Ron 几岁了?至少自从 Unity 4 以来,这从来都不是问题 ^^ 你甚至可以在一个文件中拥有多个
MonoBehaviour类...... Unity 只会“知道”与文件名匹配的那个(有时对于通用或抽象有意义)类型)