【Unity入门】脚本引用组件
大家好,我是Lampard~~
欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢
(一)脚本引用普通组件
(1)点击控制音频播放
还记得我们的车载音乐AudioSource吗?之前我们给小车加了这个组件使之在游戏运行的时候可以播放BGM
但是如果我们不想一开始就播放,想在某个时间(比如鼠标点击的时候)播放音乐,那这一步需要怎么做呢?
这个过程需要分成三步:首先需要获取这个音乐AudioSource组件,然后建立鼠标监听事件,最后在点击事件的回调中执行播放BGM的操作,下面我们一步步实现
(2)GetComponent方法
在脚本中获取当前物体其它挂载组件的方式,是通过一个叫GetComponent的方法
GetComponent() 是 Unity 中的一个方法,用于获取物体上的组件。它的语法如下:
```
GetComponent<ComponentType>()
```
其中,`ComponentType` 表示要获取的组件的类型
因此我们想要获取AudioSource组件我们就可以这样写:
AudioSource audio = this.GetComponent<AudioSource>();
播放的方法是audio.Play(),加上我们上节课学习的鼠标点击事件,完整的代码就是这个样子:
if (Input.GetMouseButtonDown(0))
{
Debug.Log("播放背景音乐");
AudioSource audio = this.GetComponent<AudioSource>();
audio.Play();
}
在测试之前我们需要先在编译器把组件上的playOnAwake方法给取消勾选掉,因为本身组件是会默认播放的
看看结果,没什么问题
现在一直点击都是在一直在播放,我们可以加上这个逻辑,如果正在播放那就暂停播放,如果没有播放那就播放背景音乐
if (Input.GetMouseButtonDown(0))
{
AudioSource audio = this.GetComponent<AudioSource>();
if (audio.isPlaying)
{
Debug.Log("停止播放音乐");
audio.Stop();
}
else
{
Debug.Log("播放背景音乐");
audio.Play();
}
}
(二)引用脚本组件
(1)在Main方法中获取小车的AudioSource组件
比如我们现在不想在小车的脚本上控制音乐的是否播放,想在MainLogic中控制小车的音乐播放,那我们需要怎么做呢?
很简单,只需要多做一步,先获取小车这个对象,然后执行再执行GetComponent方法就可以了。
之前我们学过,获取一个对象方法有两种:一个是执行GameObject.Find方法
GameObject car = GameObject.Find("小车");
或者定义一个全局游戏对象,在编译器把小车引用到对象中,这种方式会更可靠
获得了小车之后执行小车的GetComponent方法就可以了
if (Input.GetMouseButtonDown(0))
{
AudioSource audio = car.GetComponent<AudioSource>();
if (audio.isPlaying)
{
Debug.Log("停止播放音乐");
audio.Stop();
}
else
{
Debug.Log("播放背景音乐");
audio.Play();
}
}
(2)引用小车的脚本
我们这样做虽然可以实现功能,但是就相当于把所有逻辑都放到Main代码里面写了,会非常耦合。播放背景音乐的逻辑应该还是放在小车的脚本上面,我们只不过是想在MainLogic中监听鼠标点击事件而已
这样子,我们把播放音乐封装成一个小车的方法,写在小车的脚本中,然后在Mian监听鼠标点击事件,回调执行小车的方法
public void PlayMusic()
{
AudioSource audio = this.GetComponent<AudioSource>();
if (audio.isPlaying)
{
Debug.Log("停止播放音乐");
audio.Stop();
}
else
{
Debug.Log("播放背景音乐");
audio.Play();
}
}
在MainLogic中调用
void Update()
{
if (Input.GetMouseButtonDown(0))
{
FirstLogic carLogic = car.GetComponent<FirstLogic>();
carLogic.PlayMusic();
}
}
可以看到脚本和普通组件并没有什么区别,同样的可以获取~
好啦今天就到这里,感谢阅读!!!
点赞,关注!!!