Unity报错:PlaySounds.audio隐藏继承成员Component.audio,求解决方案
关于Unity音频变量隐藏继承成员的问题解决
嘿,我来帮你搞懂这个警告的意思,还有怎么解决它!
首先,这个警告‘PlaySounds.audio’ 隐藏了继承成员 ‘Component.audio’。若有意隐藏,请使用new关键字。的本质是:
你的PlaySounds类继承自MonoBehaviour,而MonoBehaviour又继承自Component——Unity的Component类里有一个已经被废弃的旧属性audio,它原本是用来快速获取物体上的AudioSource组件的。但你自己在类里声明了一个同名的AudioSource audio变量,这就导致你自己的变量“覆盖”了父类里的那个旧属性,编译器就会弹出这个警告,提醒你是不是故意这么做的。
解决办法有两个,看你偏好哪种:
办法一:按照提示用new关键字明确声明
直接在你的变量前面加上new,告诉编译器你是故意隐藏父类的旧成员,警告就会消失:
using UnityEngine; using System.Collections; public class PlaySounds : MonoBehaviour { public AudioClip SoundToPlay; public float Volume; // 加上new关键字 new AudioSource audio; public bool alreadyPlayed = false; void Start() { audio = GetComponent<AudioSource>(); } void OnTriggerEnter2D(Collider2D other) { if (!alreadyPlayed) { audio.PlayOneShot(SoundToPlay, Volume); alreadyPlayed = true; } } }
办法二:给变量换个更清晰的名字(更推荐)
其实Unity的那个旧audio属性早就被官方弃用了,现在官方推荐用GetComponent<AudioSource>()来获取组件,也就是你现在在Start方法里做的事。所以更稳妥也更易读的方式是给你的变量换个名字,比如audioSource,这样就不会和父类的旧成员重名了:
using UnityEngine; using System.Collections; public class PlaySounds : MonoBehaviour { public AudioClip SoundToPlay; public float Volume; // 重命名变量 AudioSource audioSource; public bool alreadyPlayed = false; void Start() { audioSource = GetComponent<AudioSource>(); } void OnTriggerEnter2D(Collider2D other) { if (!alreadyPlayed) { audioSource.PlayOneShot(SoundToPlay, Volume); alreadyPlayed = true; } } }
两种办法都能解决问题,第二种因为变量名更清晰,后续维护代码也更方便,所以更推荐哦~
内容的提问来源于stack exchange,提问作者EmmaGrealy
相关产品推荐
相关产品推荐

