我试图创建此代码,以便我的Unity中的播放器浏览触发框并设置特定的音频,但是当我输入此代码时,它会提示存在一个封装错误:
[10:51:37] Assets / DoorFall.cs(7,24):错误CS0542:“ DoorFall”:成员名称不能与其封闭类型相同
我尝试过更改不同的名称并在周围移动了不同的节点,但是没有任何效果。
public class DoorFall : MonoBehaviour {
public AudioSource DoorFall;
// Use this for initializatoin
void Start() {
DoorFall = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update() {
}
void OnCollisionEnter (Collision collision) {
if (collision.gameObject.tag == "player")
{
DoorFall.play();
Destroy(collision.gameObject);
}
}
}
答案 0 :(得分:2)
您的班级名称new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [0.0, 0.0],
zoom: 6
});
与班级DoorFall
的成员相同;取个不同的名字。
有可能您也不需要该成员成为public AudioSource DoorFall
。
public
答案 1 :(得分:0)
在您的情况下,由于类型名称DoorFall
与其中一个成员的名称(公共字段)相同,导致了Compiler error CS0542。您应该重命名成员或类型。
由于名称冲突,因此会产生编译时错误。如果您编写或DoorFall.[memberHere]
,则在您的类型的方法体内,编译器将不知道是否解析该类型或该成员。这是一个更简洁的示例,说明了为什么它会产生编译时错误。
public class DoorFall {
private static string ToString() { return "A"; }
public AudioSource DoorFall = "B";
void Start() {
// what value would be assigned here?
var result = DoorFall.ToString();
}
}
另一方面,声明公共字段几乎是不可接受的。相反,您应该使用属性来显示字段值或进行设置。如果您希望公开设置/获取值,则可以使用自动获取/设置器。
public AudioSource DoorFall { get; set; }
如果从不从外部访问该类型,则将其声明为private
。