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("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.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

  1. Company Name:企业/发布人名称
  2. Product Name:产品名称,也可理解为游戏名称
  3. Version:游戏的版本号
  4. Default Icon:游戏图标
  5. Default Cursor:游戏鼠标

4. 常用发布分辨率设置

Resolution and Presentation:分辨率和显示 设置栏目

  • Fullscreen Mode:显示模式,主要设置是否全屏
  • Default is Native Resolution:自动设置分辨率,如果取消可以手动设置游戏分辨率

一切设置完成后,点击 Build 选择发布目录即可。

你可能感兴趣的:(unity,游戏引擎,c#)