资源导入与导出
导出: 右键想要导出的物体或文件夹 –》Export Package
导入: 将对象拖入 Assets 即可
预制体实例化
游戏中大多数情况下我们都需要通过代码生成子弹,刷新小兵等,所以需要将预制体实例化到场景中
GameObject.Instantiate()
:有多个重载,根据情况选择
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class L10_2Demo : MonoBehaviour
{
public GameObject Prefab_Cube;
void Start()
{
}
private void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out RaycastHit hitinfo, 1000))
{
GameObject cube = GameObject.Instantiate(Prefab_Cube, hitinfo.point, Quaternion.identity, transform);
}
}
}
Resource 资源加载
特殊文件夹:Resource
目的:预制体、Sprite 等资源在目录中,动态的加载进来
使用:Resource.Load<GameObject>("path");
重要:Resource 进行的预制体加载,不等于实例化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class L10_2Demo : MonoBehaviour
{
private GameObject prefab_Cube;
public Sprite sprite;
void Start()
{
prefab_Cube = Resources.Load<GameObject>("Prefabs/Cube");
sprite = Resources.Load<Sprite>("Test");
}
private void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out RaycastHit hitinfo, 1000))
{
GameObject cube = GameObject.Instantiate(prefab_Cube, hitinfo.point, Quaternion.identity, transform);
}
}
}
数据存档 - PlayerPrefsr
单机游戏存放在本地,网络游戏中一般存放在服务端的数据库,一些没那么关键的数据也可以存放在本地
PlayerPrefsr 是 Unity 提供的一种存档方式
| 存储和获取
存储
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");
| 删除数据、查找数据
删除全部:
PlayerPrefs.DeleteAll();
删除指定的数据:
PlayerPrefs.DeleteKey("key");
查找有没有这个key的数值:
bool exist = PlayerPrefs.HasKey("key");
| 数据位置
存储在注册表的 HKEY_CURRENT_USER\Software[company name][product name]
下
打开方式:cmd 中 regedit.exe
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class L10_4Demo : MonoBehaviour
{
void Start()
{
// Save
PlayerPrefs.SetString("PlayerName", "Morikiiii");
PlayerPrefs.SetFloat("floatValue", 2.5f);
PlayerPrefs.SetInt("Age", 22);
//PlayerPrefs.DeleteAll();
PlayerPrefs.DeleteKey("Age");
// Load
string playName = PlayerPrefs.GetString("PlayerName");
float floatValue = PlayerPrefs.GetFloat("floatValue");
int age = -1;
if (PlayerPrefs.HasKey("Age"))
{
age = PlayerPrefs.GetInt("Age");
}
Debug.Log(playName);
Debug.Log(floatValue);
Debug.Log(age);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
PlayerPrefs.SetString("PlayerName", "Kiyoki");
}
}
}
游戏场景加载
根据功能来划分场景,比如:登录场景、游戏大厅、角斗场、战斗场景、副本场景、不同的关卡场景
场景就是 Unity 中的一个一个 Scene,我们重点需要掌握:
- 场景切换
场景切换的前提:
该场景必须被打包,也就是 File –》Build Setting 将场景拖拽进Scenes in Build,排序第一(编号 0 代表的场景)的场景会作为游戏开始的开场场景
完成场景切换::
命名空间:
using UnityEngine.SceneManagement;
加载场景:
SceneManager.LoadScene();
,多个重载方式int:场景编号
string:场景名称
数据保留
场景切换,会导致前面一个场景的全部游戏物体都销毁,但是实际开发中,有时候我们可能希望将一些游戏物体带到下一个场景中。
GameObject.DontDestroyOnLoad(object)
:加载场景不销毁- object:一般直接使用 gameObject ,即可将整个游戏物体以及数据带入下一个场景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class L10_5Demo : MonoBehaviour
{
private void Awake()
{
GameObject.DontDestroyOnLoad(gameObject);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
SceneManager.LoadScene(1);
//SceneManager.LoadScene("1.资源导入与导出");
}
}
}
声音系统
音效必不可少
AudioListener 组件:可以让我们听到音效,本身并没有其他额外功能
| Audio Source
(1)AudioClip (音频剪辑):指定播放的音频文件。在 Unity 引擎中的资源类型都是 AudioClip 类型。
(3)Mute (是否静音):主要是针对游戏中的音效,优势在于不会卸载声音数据,可以做到及时播放,音效一般比较多、占用内存小,使用静音可以让画面快速响应,且可以立刻恢复当前音效。
(7)Play On Awake (启动播放开关):勾选就会在绑定组件的GameObiect加载并启用时立刻播放音频。
(8)Loop (循环播放开关):音频播放结束自动循环。
(9)Priority(播放优先级):决定音源在场景中存在的所有音源中的播放优先级。
(10)Volume (音量):调节音量的大小。
(11)Pitch(音调):播放音频时速度的变化量,默认值1,表示正常的播放速度。(当 <1 时,慢速播放;当 >1 时,快速播放。速度越快,音调越高。)
(12)Stereo Pan(声道占比)
(13)Spatial Blend(空间混合):指定音源是2D音源(0)、3D音源(1)或者是二者插值的复合音源。
(14)Reverb Zone Mix(回音混合)
(15)3D Sound Settings(3D音频设置)
| 常用方法
play()
函数:播放音频剪辑Stop()
函数:停止播放Pause()
函数:暂停播放PlayOneShot(AudioClip)
:播放某个片段一次,可以叠加,Play是播放面板上的音效,而 PlayOneShot 适合播放射击音效这种,会重叠,并且很确定播放一次即可
案例:玩家设置保存
目标:使用 UI 控制背景音乐大小,并且音量设置要保存在本地,下次启动时依然有效
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class L10_7Demo : 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;
}
// Change Volume
// Save Setting
void SliderOnValueChanged(float value)
{
audioSource.volume = value;
PlayerPrefs.SetFloat("audioVolume", value);
}
}
Windows 打包发布
游戏发布
- 指从 Unity 中的工程项目转换为玩家可以直接打开的 exe 程序
设置发布场景
File –> Build Settings –> Scenes In Build
可以将场景文件直接拖拽进去
编号 0 就是游戏启动场景
发布常规设置
Company Name:企业 / 发布人名称
Product Name:产品名称 即游戏名称
Version:版本号
Default Icon:游戏图标
Default Cursor:游戏鼠标
常用发布分辨率设置
Resolution and Presentation:分辨率和显示 设置栏目
Fullscreen Mode:显示模式,主要设置是否全屏
Default is Native Resolution:自动设置分辨率,如果取消可以手动设置游戏分辨率
一切设置完成后,点击 Build 选择发布目录即可