CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
Click & play(点击&播放)

范例的描述

概述

该范例脚本将在点击物体时播放声音。

cri4u_samples_criatom_script01_main.png

操作

  • 点击左边的方体
    播放分配于该方体的声音。再次点击即可重复回放。

  • 点击右边的球体
    播放分配于该球体的声音。再次点击即可停止回放。


场景信息


中间件 CRI ADX (CRI Atom)
范例 Script sample: click & play(脚本范例:点击&播放)
存储路径 /CRIWARE/SDK/unity/samples/UnityProject/Assets/Scenes/criatom/script/ScriptSample01_ClickToPlay
场景文件 ScriptSample01_scene_ClickToPlay.unity
原始ADX数据 数据:弹球


程序的描述

该脚本可播放分配于(以 CriAtomSource )用户点击的物体的声音。
脚本在每次点击方体时都会播放声音。
然而当点击球体时,声音将会被交替播放/停止。

在每次点击时播放声音的脚本的描述

在每次点击时,脚本便会确认用户是否点击了物体。如果是的话,脚本将请求回放与该物体关联的声音 (CriAtomSource) 。
该脚本假设所播放的声音能够被简单地多次播放,例如一次性音效。

脚本文件 Scripts/PlaySoundOnClick.cs
using System.Collections;
/* 如果点击的物体拥有 CriAtomSource ,我们便会播放声音。可允许多次回放。 */
public class PlaySoundOnClick : MonoBehaviour {
void Start () {
}
void Update () {
if (Input.GetMouseButtonDown(0)){
Ray clkRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rh;
// 碰撞检测
if (Physics.Raycast(clkRay, out rh, 20)) {
GameObject target = rh.collider.gameObject;
if (target == this.gameObject) {
// 播放Cue
CriAtomSource atom_src = target.GetComponent<CriAtomSource>();
if (atom_src != null) {
atom_src.Play();
}
}
}
}
}
}

在每次点击时播放/停止声音的脚本的描述

在每次点击时,脚本将确认用户是否点击了物体。如果是的话,脚本将根据当时的回放状态,请求回放与该物体关联的声音 (CriAtomSource) 或停止该声音。
该脚本假设与物体关联的音频较长,如音乐或者旁白,而且该音频将不适于多次回放。

脚本文件 Scripts/PlayAndStopSoundOnClick.cs
using System.Collections;
/* 如果点击的物体含有 CriAtomSource ,播放声音。如果它已在播放状态,那么就停止播放 */
public class PlayAndStopSoundOnClick : MonoBehaviour {
void Start () {
}
void Update () {
if (Input.GetMouseButtonDown(0)){
Ray clkRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rh;
// 碰撞检测
if (Physics.Raycast(clkRay, out rh, 20)) {
GameObject target = rh.collider.gameObject;
if (target == this.gameObject) {
// 播放Cue
CriAtomSource atom_src = target.GetComponent<CriAtomSource>();
if (atom_src != null) {
CriAtomSource.Status status = atom_src.status;
if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {
atom_src.Play();
} else {
atom_src.Stop();
}
}
}
}
}
}
}

该范例脚本的效率

假设该范例脚本直接分配至一个物体,那么脚本便能被简单地执行。
然而,当物体的数量增加后,将使用多个脚本查看哪个物体已被点击,可导致低效率。
对于控制多种声音的游戏来说。我们推荐创建与 游戏: 弹球 中的SoundManager相似的物体,以在整个游戏中管理声音,使效率更高并且易懂。