一、相关逻辑
在登录代码中调用,资源加载代码,然后再资源加载代码中调用。
1、登陆方法中:
单例类音频调用自己的方法,然后传入配置代码中的常量
2、音频播放代码中:
首先设置为一个单例类,然后初始化一下
写一个播放声音的方法,传入参数:名称和循环条件(Bool默认循环因为是背景音乐)
然后调用资源加载中的加载音频方法
如果,当前音频组件上为空 | | 播放的音频名字不是加载出来的音频名字
那么就把加载出来的音频名字赋值给这个组件,参数也赋值给循环
最后播放声音
3、资源加载代码:
这里使用的是一个字典,用于存储路径和音频
在这个方法中,类型是一个音频类型,那最后需要返回一个音频类型的值
这个方法接受两个参数(路径、缓存)
首先把这个需要返回的值置为空
判断一下,如果在字典中没有获取到路径和音频
那么就重新加载 赋值给这个音频,并且
缓存为真,就把这个路径和音频 添加到这个字典中
这么做的好处是,需要就从字典中调用一次,不用重复加载。
最终返回的au音频被声音播放代码调用
二、优化代码
1、前言
在很多地方可能都需要对这个音频代码进行调用
那每一次进行调用单例类,然后在调用单例类中的方法,就会很麻烦
解决:把这些功能代码抽象成一个总的
把这些单例类写进去,那么在其他地方就可以优化一下了
继承这个公共的单例类
在初始化函数中,直接复用单例类中的函数方法
那么这个代码就可以改一下了。
把instance直接删除
2、动画循环播放
效果:当玩家一直处于UI这个界面,要保持这个龙的持续动画效果
在龙这个物体上,挂在一个循环代码。
代码如下:
设置为私有,然后最初获取这个组件。
在一开始延迟执行这个动画效果
而这个InvokeRepeating方法。类似于延迟循环。
//飞龙循环动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoopDragonAni : MonoBehaviour
{
private Animation ani;
private void Awake()
{
ani=transform.GetComponent<Animation>();
}
private void Start()
{
if (ani != null)
{
//方法名、延迟时间、重复频率
InvokeRepeating("PlayDragonAni", 0, 20);
}
}
private void PlayDragonAni()
{
if (ani != null)
{
ani.Play();
}
}
}