Unity基础笔记(7)—— 资源管理
Unity资源管理
一、资源导入和导出
资源导入:将打包好的unitypackage
文件直接拖拽至窗口中,Unity 会自动解析包,再点击 import 即可导入资源。
资源导出:右键点击要导出的资源文件夹,点击 export 导出资源。预制体身上自带的材质会随着预制体一并导出。
二、预制体实例化
游戏中大多数情况下我们都需要通过代码生成子弹、刷新小兵等,所以需要将预制体实例化到场景中去。
GameObject.Instantiate()
:有多个重载,根据情况选择。
public class PrefabTest : MonoBehaviour
{
public GameObject Prefab_cube;
void Start()
{
// 预制体实例化
// 可在一个空的游戏中挂载此脚本,放入预制体,运行就会出现该预制体
GameObject cube = GameObject.Instantiate(Prefab_cube);
}
}
三、Resource 资源加载
特殊文件夹:Resource
目的:预制体、Sprite等资源在目录中,动态的加载进来。
使用:Resources.Load<GameObject>("path");
注意:Resource 进行的预制体加载,并不等于实例化。
四、数据存档-PlayerPrefs
大多数游戏都会保存玩家游戏过程中的数据,其中单机游戏存放在本地,而网络游戏中一般存放在服务端的数据库,一些没那么关键的数据也可以存放在本地。
PlayerPrefs 是 Unity 为我们提供的一种存档方式。
1. PlayerPrefs 存储和获取
- 存储
PlayerPrefs.SetInt("Key", 999);
PlayerPrefs.SetFloat("Key", 1.11f);
PlayerPrefs.SetString("Key", "Hello");
- 获取
int value = PlayerPrefs.GetInt("Key");
float value = PlayerPrefs.GetFloat("Key");
string value = PlayerPrefs.GetString("Key");
2. 删除和查找数据
- 删除全部:
PlayerPrefs.DeleteAll();
- 删除指定数据:
PlayerPrefs.DeleteKey("Key");
- 查找有没有这个Key的数值:
bool exist = PlayerPrefs.HasKey("Key");
3. PlayerPrefs 的数据位置
PlayerPrefs 中的数据并不是存放于项目路径下Windows平台下,而是存储在注册表中的 HKEY_CURRENT_USER\Software[company name][product name]
下。
打开方式:cmd 中 regedit.exe
五、游戏场景加载
很多时候并不能在一个场景中完成所有的事情,所以会根据功能来划分场景,比如:登录场景、游戏大厅、竞技场、战斗副本、不同关卡等等。
场景就是Unity中的一个个 Scene,学习重点是:场景切换 与 数据保留
1. 场景切换
场景切换的前提:该场景必须被打包,也就是点击File -> Build Setting 进入打包设置界面。再将场景拖拽进 Scenes in Build,排序第一的场景会作为游戏开始的开场场景。
完成场景切换:
- 命名空间:
using UnityEngine.SceneManagement;
- 加载场景:
SceneManager.LoadScene()
,多个重载方式- int:场景编号
- string:场景名称
using UnityEngine.SceneManagement;
public class SwitchScene : MonoBehaviour
{
void Start()
{
}
void Update()
{
if(Input.GetKeyDown(KeyCode.A))
{
SceneManager.LoadScene(1);
SceneManager.LoadScene("SceneName");
}
}
}
2. 数据保留
场景切换,会导致前面一个场景的全部游戏物体都销毁,但是在实际开发中,有时候我们可能希望将一些游戏物体带到下一个场景中。
GameObject.DontDestoryOnLoad(object)
:加载场景不销毁。
object:一般直接使用gameObject,即可将整个游戏物体以及数据带入下一个场景。
六、声音系统
游戏中音效是必不可少的重要元素
1. AudioListener 组件
AudioListener 组件可以让我们听到音效,本身并没有其他额外功能。
2. AudioSource 组件
- AudioClip(音频剪辑):指定播放的音频文件。在 Unity 引擎中的资源类型都是 AudioClip 类型。
- Mute(是否静音):主要是针对游戏中音效,优势在于不会卸载声音数据,可以做到及时播放,音效一般比较多、占用内存小,使用静音可以让画面快速响应,且可以立刻恢复当前音效。静音不是暂停。
- Play On Awake(启动播放开关):勾选就会在绑定组件的 GameObject 加载并启用时立刻播放音频。
- Loop(循环播放开关):音频播放结束自动循环。
- Priority(播放优先级):决定音源在场景中存在的所有音源中的播放优先级。
- Volume(音量):调节音量大小。
- Pitch(音调):播放音频时速度的变化量,默认值为1,表示正常的播放速度。(当 <1 时,慢速播放;当 >1 时,快速播放。速度越高,音调越高)
- Stereo Pan(声道占比):左右声道占比,0代表正常声道,-1是左声道,1是右声道。
- Spatial Blend(空间混合):指定音源是2D音源(0)、3D音源(1)或者是二者差值的符合音源。
- Reverb Zone Mix(回音混合)
- 3D Sound Settings(3D音频设置)
3. 常用方法
Play()
函数:播放音频剪辑Stop()
函数:停止播放Pause()
函数:暂停播放PlayOneShot(AudioClip)
:播放某个片段一次,可以叠加。Play是播放面板上的音效,而 PlayOneShot 适合播放射击音效这种,会重叠且只播放一次的。
public class AudioTest : MonoBehaviour
{
private AudioSource audioSource;
public AudioClip clip;
void Start()
{
audioSource = GetComponent<AudioSource>();
audioSource.clip = clip;
auidoSource.Play();
}
void Update()
{
if(Input.GetKeyDown(KeyCode.S))
{
audioSource.Stop();
}
else if(Input.GetKeyDown(KeyCode.P))
{
if(audioSource.isPlaying)
{
audioSource.Pause();
}
else
{
audioSource.UnPause();
// 如果用Play()方法,会从第一帧开始播放
}
}
if(Input.GetMouseButtonDown(0))
{
audioSource.PlayOneShot(clip);
}
}
}
七、案例:玩家设置保存
使用 UI 控制背景音乐大小,并且音量设置要保存在本地,下次启动游戏时依然有效。
public class AudioSourceDemo : MonoBehaviour
{
public AudioSource audioSource;
public Slider slider;
void Start()
{
slider.onValueChanged.AddListener(SliderOnValueChanged);
float volume = 1;
if (PlayerPrefs.HasKey("audioVolume"))
{
volume = PlayerPrefs.GetFloat("audioVolume");
}
audioSource.volume = volume;
slider.value = volume;
}
// 修改音量
// 保存设置
void SliderOnValueChanged(float value)
{
audioSource.volume = value;
PlayerPrefs.SetFloat("audioVolume", value);
}
}
八、Windows 打包发布
1. 游戏打包发布
这里指的发布指的是,从 Unity 中的工程项目转换为玩家可以直接打开的 exe 程序。
但是 Unity 的发布和 C#控制台应用程序基于VS的发布方式完全不同。
2. 设置发布场景
有些场景可能是测试场景,并不需要打包进游戏中。
File -> Build Settings -> Scenes In Build,可以将场景文件直接拖拽进去。其中第一个场景就是游戏启动的场景。
3. 发布常规设置
File -> Build Settings -> Player Settings
- Company Name:企业/发布人名称
- Product Name:产品名称,也可理解为游戏名称
- Version:游戏的版本号
- Default Icon:游戏图标
- Default Cursor:游戏鼠标
4. 常用发布分辨率设置
Resolution and Presentation:分辨率和显示 设置栏目
- Fullscreen Mode:显示模式,主要设置是否全屏
- Default is Native Resolution:自动设置分辨率,如果取消可以手动设置游戏分辨率
一切设置完成后,点击 Build 选择发布目录即可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤