【Unity入门】16.脚本引用组件

news2024/11/13 10:59:18

 

【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();
        }
    }

    可以看到脚本和普通组件并没有什么区别,同样的可以获取~

好啦今天就到这里,感谢阅读!!!
点赞,关注!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix搭建

1.环境 本实验使用一台centos7主机&#xff0c;关闭了firewalld和selinux服务&#xff0c;zabbix版本为5.0版本&#xff0c;mysql使用版本为5.7版本 若要搭建6.0以上版本的zabbix&#xff0c;则需要使用mysql 8.0以上的版本 其它版本的zabbix可参考zabbix官网:Download and…

YOLOv5+单目实现三维跟踪(python)

YOLOv5单目跟踪&#xff08;python&#xff09; 1. 目标跟踪2. 测距模块2.1 设置测距模块2.2 添加测距 3. 主代码4. 实验效果 相关链接 1. YOLOv5单目测距&#xff08;python&#xff09; 2. YOLOv7单目测距&#xff08;python&#xff09; 3. YOLOv7单目跟踪&#xff08;pytho…

C++练级之初级:第四篇

C练级之初级&#xff1a;第四篇 引用 C练级之初级&#xff1a;第四篇1.引用1.1引用的介绍1.2引用的使用场景1.3常引用 2.引用的底层3.引用的与指针的比较 总结 1.引用 1.1引用的介绍 &#x1f914;首先还是一个问题&#xff0c;引用是解决C语言什么不足&#xff1f; 指针在&am…

Python自动化sql注入:布尔盲注

在sql注入时&#xff0c;使用python脚本可以大大提高注入效率&#xff0c;这里演示一下编写python脚本实现布尔盲注的基本流程&#xff1a; 演示靶场&#xff1a;sqli-labs 布尔盲注 特点&#xff1a;没有回显没有报错&#xff0c;但根据sql语句正常与否返回不同结果&#x…

新手做电商直播带货怎么和快递合作谈价格

新手做电商直播带货怎么和快递合作谈价格达人带货一般怎样的合作模式&#xff1f;#达人带货 #直播带货 #红人 #百收网 跟快递谈价其实是有方法的&#xff0c;快递的价格不是说不能打下来&#xff0c;就是需要你们多一点点的心机。这个视频我就再给你们补充三个方法&#xff0c;…

HCIP之STP

企业网三层架构 线路冗余—二层网络桥接环路 因为路由器的路由表是由相对完善的计算所得&#xff0c;且存在防环规则&#xff1b;故路由器物理链路上实施备份时&#xff0c;一般不会出现环路&#xff1b;但交换转发数据依赖MAC表&#xff08;CAM表&#xff09;&#xff0c;该表…

【模式识别4】YOLO目标检测数据集xml格式转txt格式

YOLO目标检测数据集xml格式转txt格式 1. 转换前的xml格式2. xml格式转txt格式代码2.1 源代码2.2 需要修改的地方 3. 转换后的txt格式 代码资源&#xff1a;voc2txt.py 1. 转换前的xml格式 如果我们使用LabelImg工具标注数据集&#xff0c;生成的xml文件如下&#xff1a; xml…

Linux运维:推荐八款Linux远程连接工具

目录 2、XShell 3、SecureCRT 4、PuTTY 5、WindTerm 6、iTerm2 7、MobaXterm 8、Termius 今天给大家推荐八款Linux远程连接工具&#xff0c;非常实用&#xff0c;希望对大家能有所帮助&#xff01; 1、NxShell NxShell是一款开源的Linux远程管理工具&#xff0c;是我日…

Spring Boot 接口加解密

1. 介绍 在我们日常的Java开发中&#xff0c;免不了和其他系统的业务交互&#xff0c;或者微服务之间的接口调用 如果我们想保证数据传输的安全&#xff0c;对接口出参加密&#xff0c;入参解密。 但是不想写重复代码&#xff0c;我们可以提供一个通用starter&#xff0c;提…

【python数据可视化】基于networkx的10个绘图技巧

一、说明 networkx在02年5月产生&#xff0c;是用python语言编写的软件包&#xff0c;便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络…

解决java.lang.IllegalStateException: Failed to load ApplicationContext错误~

错误描述&#xff1a; Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\SSM\SSM_3.22\spring_transaction\target\classes\spring_txAnnotation\Controller\BookController.class]; nested …

装饰器模式C++用法示例

六.装饰器模式 一.装饰器模式1.原理2.适用场景 二.C程序示例1.语法组成2.C示例 一.装饰器模式 1.原理 装饰器模式是一种结构性设计模式&#xff0c;其目的是通过包装对象来扩展其行为而不改变其接口。该模式可以动态地将责任附加到对象上&#xff0c;从而提供一种灵活的替代方…

SQL Server基础 第三章 数据表基本操作(增删改查,不允许保存更改异常!)

往表里插数据我们现在有两种方式第一种是编辑直接修改&#xff0c;第二种是通过查询来修改数据 两种方法的区别 第一种更直接&#xff0c;如果数据量小那么直接改就好了&#xff0c;那如果数据量稍微庞大我们就需要用新建查询来进行表内容的修改了&#xff01;&#xff01;&a…

【Linux】进程信号 --- 信号的产生 保存 捕捉递达

被爱情困住的是傻子 文章目录 一、信号的预备知识1.通过生活例子来理解信号2.迁移到进程上来理解信号 二、信号的发送&#xff08;修改PCB的信号位图&#xff09;1.通过键盘发送信号&#xff08;kill指令 和 热键&#xff09;2.通过系统调用发送信号&#xff08;kill系统调用 和…

前端技术的miniui 和bootstartp

前端技术的miniui 和bootstartp 目录概述需求&#xff1a; 设计思路实现思路分析1.前端技术boostatrp2.miniui: 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better re…

1686_MATLAB处理Excel文件

全部学习汇总&#xff1a; GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

opencv交叉编译,支持ffmpeg、libjpeg,实现取流及写入jpeg文件

一、准备工作 1、虚拟机交叉编译连 2、在虚拟机目录下创建工作目录&#xff0c;注意不要选择windows共享目录&#xff0c;比如这里选择&#xff1a; /home/cxyazhou/work 3、虚拟机安装cmake cmake-gui pkg-config&#xff0c;直接apt install即可 4、源码下载&#xff0c;需要…

Mongodb的部署

MongoDB下载包获取 https://www.mongodb.com/try/download/community 安装配置 第一步&#xff1a;在服务器 /usr/local 下创建 MongoDB 文件夹&#xff0c;用来存放安装包、服务以及之后 MongoDB 的数据库和日志文件。 cd /usr/local // 进入安装目录 mkdir MongoDB // 创…

【LeetCode: 2369. 检查数组是否存在有效划分 | 暴力递归=>记忆化搜索=>动态规划 | 线性dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

OpenCV(14)-OpenCV4.0中文文档学习2(补充)

相机校准和3D重建 相机校准 标定 findChessboardCorners() 它返回角点和阈值&#xff0c;如果成功找到所有角点&#xff0c;则返回 True。这些角落将按顺序放置&#xff08;从左到右&#xff0c;从上到下&#xff09;cornerSubPix()用以寻找图案&#xff0c;找到角点后也可以…