Unity基础笔记(7)—— 资源管理

这篇具有很好参考价值的文章主要介绍了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

  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 选择发布目录即可。文章来源地址https://www.toymoban.com/news/detail-569606.html

到了这里,关于Unity基础笔记(7)—— 资源管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity资源管理方案-YooAsset的使用

    我们在开发项目时,会发现资源管理模块往往在项目架构中扮演着重要的角色,而且一个游戏的流畅性和内存方面的性能优化,往往也能看到资源管理的影子,所以一个优秀强大的资源管理方案对一个项目开发者来说是一个强大的轮子。 YooAsset是一套用于Unity3D的资源管理系统

    2024年01月20日
    浏览(35)
  • Unity AssetBundles资源管理和热更新

    项目中的做法,在项目中一般会把资源按照文件目录去划分资源,以文件路径的名字作为AB的名字,一般都是把资源的这些放到预处理中。 一般会分为几个类型,比如把单个文件夹下的每个资源进行打bundle,把单个文件夹下的所有资源打成bundle,还有自定义bundle名字的类型啥

    2024年01月21日
    浏览(31)
  • Unity 如何基于addressable来做资源管理

    一、什么是Addressable系统 Addressable系统是Unity 2018.3版本中推出的一种资源管理方案,它可以帮助我们更好地管理游戏中的资源。在以往的游戏开发中,我们通常使用Resources来进行资源加载,但是这种方式存在很多问题,比如加载速度慢、内存占用高等。Addressable系统可以解决这

    2024年02月16日
    浏览(23)
  • Unity Addressables资源管理 安装和使用本地加载

    Addressables资源管理总目录 1.安装 打开Unity内置的 PackagerManager窗口 搜索Add即可找到 安装版本为1.19.19 2.添加Group 点击 Group 菜单 打开窗口 点击 Create Addressables Settings 创建可寻址设置 Assets下会生成一个  AddressableAssetsData 文件夹 其中可以看见面板中的  Default Local Group  默认组 资

    2023年04月13日
    浏览(23)
  • Unity资源管理(AssetBundle加载和卸载)及内存管理(内存的申请和释放)

    GameObject, Transform, Mesh, Texture, Material, Shader, Script和各种其他Assets。 静态引用,在脚本中加一个public GameObject变量,在Inspector面板中拖一个prefab到该变量上,然后在需要引用的地方Instantiate; Resource.Load,资源需要放在Assets/Resources目录下; AssetBundle.Load, Load之后Instantiate。 GameOb

    2024年02月16日
    浏览(28)
  • .NET C#基础(9):资源释放 - 需要介入的资源管理

       IDisposable 接口是一个用于约定可进行释放资源操作的接口,一个类实现该接口则意味着可以使用接口约定的方法 Dispose 来释放资源。其定义如下:   上述描述中可能存在两个问题:   1. 什么是“资源”?   2. C#是一个运行在含有垃圾回收(GC)平台上的语言,为

    2024年02月09日
    浏览(27)
  • 鸿蒙学习笔记之资源管理器(十一)

    本次要点: 1.什么是资源管理器 2.资源管理器的应用 资源管理器是系统提供的 资源管理工具 ,我们可以用它查看本台 电脑的所有资源 ,特别是它提供的 树形的文件系统结构 ,使我们能更清楚、更直观地认识电脑的文件和文件夹,这是“我的电脑”所没有的 实现一个随机

    2024年02月13日
    浏览(26)
  • 小游戏资源上传工具:Unity上传OSS管理详解

    本文将为您提供使用Unity上传OSS(对象存储服务)管理的详细步骤和说明。通过这个工具,您可以方便地将小游戏资源上传至OSS,并进行管理和访问。 使用前置步骤在《微信小游戏游戏上线之路:教你如何免费获得CDN服务器》 确保您已经在阿里云上创建了一个OSS存储空间,并

    2024年01月21日
    浏览(34)
  • Unity的AssetBundle资源运行内存管理的再次深入思考

      大家好,我是阿赵。   这篇文章我想写了很久,是关于Unity项目使用AssetBundle加载资源时的内存管理的。这篇文章不会分享代码,只是分享思路,思路不一定正确,欢迎讨论。   对于Unity引擎的资源内存管理,我猜很多朋友都存在一定的疑惑。疑惑的点有非常多,包

    2024年03月22日
    浏览(25)
  • Kubernetes学习笔记-计算资源管理(4)监控pod的资源使用量20230219

    前面学了设置资源的requests和limits,这节课学习如何监控资源,根据监控资源使用情况,对requests和limits进行合理配置。 kubelet包含一个agent,名为cAdvisor,它会收集整个节点上运行的所有单独容器的资源消耗情况,这些信息可以通过一个附加组件Heapster来集中统计整个集群的监

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包