这里我们首先就简易的制作一个非常简单的3D按钮![这里写图片描述](https://img-blog.csdn.net/20170915120955448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfNDAyNTI1Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)图中就一个cube 加个3DText,然后我们就编写代码
[RequireComponent(typeof(CompoundButton))]//特效用语public class CompoundButtonSounds : ProfileButtonBase<ButtonSoundProfile>//泛型类需求T必须符合 where T 的要求{//这里说明下 定义的ButtonSoundProfile就一个声音源数组和声音值float数组 - -!这里就是为了装b用的//CompoundButton 是摄像机检测用的组件(相当于事件源了)这个可以根据不同插件的事件源不同做处理//Button的事件详细 我也在研究。。 - -!很蛋疼 (不同的插件可以选择不同的事件接口)const float MinTimeBetweenSameClip = 0.1f;//常量最小按钮播放值[SerializeField]//序列化private AudioSource audioSource;private static string lastClipName = string.Empty;//全局变量private static float lastClipTime = 0f;private Button.ButtonStateEnum lastState = Button.ButtonStateEnum.Disabled;//表示按钮交互的状态void Start (){Button button = GetComponent<Button>();//以下是定义的按钮事件button.OnButtonCancelled += OnButtonCancelled;button.OnButtonHeld += OnButtonHeld;button.OnButtonPressed += OnButtonPressed;button.OnButtonReleased += OnButtonReleased;button.StateChange += StateChange;audioSource = GetComponent<AudioSource>();}/// <summary>/// 状态改变/// </summary>/// <param name="newState"></param>void StateChange(Button.ButtonStateEnum newState){// 不能在同一个状态重复多次if (lastState == newState)return;lastState = newState;// 不活跃的按钮 不播放声音if (!gameObject.activeSelf || !gameObject.activeInHierarchy)return;if (Profile == null){Debug.LogError("Sound profile was null in button " + name);return;}switch (newState){case Button.ButtonStateEnum.Observation:PlayClip(Profile.ButtonObservation, Profile.ButtonObservationVolume);break;case Button.ButtonStateEnum.ObservationTargeted:PlayClip(Profile.ButtonObservationTargeted, Profile.ButtonObservationTargetedVolume);break;case Button.ButtonStateEnum.Targeted:PlayClip(Profile.ButtonTargeted, Profile.ButtonTargetedVolume);break;default:break;}}//按钮取消void OnButtonCancelled(GameObject go){PlayClip(Profile.ButtonCancelled, Profile.ButtonCancelledVolume);}//按钮按住void OnButtonHeld(GameObject go){PlayClip(Profile.ButtonHeld, Profile.ButtonHeldVolume);}//按钮按下void OnButtonPressed(GameObject go){PlayClip(Profile.ButtonPressed, Profile.ButtonPressedVolume);}void OnButtonReleased (GameObject go){PlayClip(Profile.ButtonReleased, Profile.ButtonReleasedVolume);}void PlayClip (AudioClip clip, float volume){if (clip != null){// 声音源是垃圾源,就不要做 Time.realtimeSinceStartup 静态属性表示 游戏开始实时时间if (clip.name == lastClipName && Time.realtimeSinceStartup < MinTimeBetweenSameClip)return;lastClipName = clip.name;lastClipTime = Time.realtimeSinceStartup;if (audioSource != null){audioSource.PlayOneShot(clip, volume);//这个不陌生吧(适合播放小源声音)}else{AudioSource.PlayClipAtPoint(clip, transform.position, volume);//这个是AudioSource的静态方法//在transform.position位置创建一个空物体,并自动添加AudioSource组件,播放完成就会自动销毁}}}}

表述的也很明确了,最后就拖拽声音源到对应的属性中就行了,最后点击运行,点击按钮就ok了,下次带来动物(老鼠)和气球的动态Mesh按钮还有文本图片等3D交互UI。最后搭建一个功能完善的UI组件

Unity3D开发之3D按钮的声音播放相关推荐

  1. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  2. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  3. iOS开发之3D Touch(快速添加3D Touch功能)

    1. 概述 在支持3D Touch的设备上,用户可以通过对触摸屏施加不同程度的压力来访问其他功能,应用程序可以通过显示上下文菜单(或支持Peek和Pop)来响应,以显示一些可供用户操作的选项或者行为. ...

  4. 微信网页开发之video标签[HTML5微信播放器video]

    先了解一下w3c video标签 大致主要的也就这么点,更详细的请去自己W3C去阅览: 先说为什么会写这篇文章,因为公司最近有个需求,就是微信页面上要有APP端录制的视频. 说白了就是微信网页要有视频 ...

  5. [记录]Hololens开发之“Pin”按钮(点完之后同名应用再也无法打开)

    今天开部署到Hololens上是,原本要删除一个应用,结果不小心点到了Pin按钮.然后重新安装了一个与删除的应用同名的新应用,结果打开之后是白色框框,光标变成月亮与睡眠符号"z". ...

  6. Unity3D开发之Error while reading movie Bug解决

    之前一个老项目要加一个播放视频的需求.美工那面给我的视频文件名字以及格式如下:热是如何传递到居民家中的_最终成品.mp4.我直接就把视频导入到Unity项目文件夹下.然后,就报出了如下error:Er ...

  7. Unity3D开发之OnPointerClick事件

    OnPointerClick是unity事件系统自带的点击推送事件.继承IPointerClickHandler接口,并在脚本中实现接口,点击挂此脚本的物体系统会调用实现的OnPointerClick ...

  8. java点击按钮发出声音_java – 按下按钮时播放声音-android

    我有这个代码 package com.tct.soundTouch; import android.app.Activity; import android.media.MediaPlayer; im ...

  9. Kinect开发之PowerPoint播放助手

    前言: 之前写过一篇关于姿势(pose)识别的博文,之后又定义了几个姿势实现了体感俄罗斯方块.姿势识别是通过关节点与关节点之间的相对位置关系来进行判断.当判断成立,即执行指定的指令.那么,我们就可以指 ...

最新文章

  1. 在线实时大数据平台Storm集成redis开发(分布锁)
  2. Canal解析数据报错:column size is not match for table xxxx 59 vs 57
  3. 不需要SFU实现WebRTC联播实践
  4. 第六次课作业(质量管理、项目人力资源管理)
  5. 在碰撞中成长 - 北京银行的DevOps实践之路
  6. vue导入html登陆页,Vue 实现 登陆后打开主页面(登陆组件 + 主页面组件)
  7. 敏捷数据科学pdf_敏捷数据科学数据科学可以并且应该是敏捷的
  8. 前端学习(713)创建数组
  9. easyui刷新几种方式
  10. jlabel字怎么变化_不懂书法“疏密”变化,你的造诣只能是初学者
  11. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
  12. Linux中常用命令(初学者必备)
  13. 矩阵转置相关公式_透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵
  14. SEO人员,如何搭建你的网站基础框架?
  15. 已解决(Python运行报错)SyntaxError: expression cannot contain assignment, perhaps you meant “==“?
  16. 现在有哪些好用的企业报表软件?
  17. smartgit官方下载地址
  18. Excel对比Python实现方差分析
  19. h5盲盒商城源码完整版-附带详细教程
  20. java服装连锁店后台管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署

热门文章

  1. 人脸检测:人脸检测算法综述
  2. XML Publisher 模板设计技巧
  3. 关于Qt6.2中的所有属性绑定
  4. Rocket.Chat接收消息流程
  5. mysql数据库实战演练_SQL 语句实战演练
  6. mac系统清理优化软件iMacCleaner Mac中文版
  7. 增量更新对开发者有何影响?
  8. python中ipo模型有,python ipo模型是指什么?-Python教程
  9. SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group
  10. JavaScript中的jQuery