资源导入:将打包好的unitypackage
文件直接拖拽至窗口中,Unity 会自动解析包,再点击 import 即可导入资源。
资源导出:右键点击要导出的资源文件夹,点击 export 导出资源。预制体身上自带的材质会随着预制体一并导出。
游戏中大多数情况下我们都需要通过代码生成子弹、刷新小兵等,所以需要将预制体实例化到场景中去。
GameObject.Instantiate()
:有多个重载,根据情况选择。
public class PrefabTest : MonoBehaviour
{
public GameObject Prefab_cube;
void Start()
{
// 预制体实例化
// 可在一个空的游戏中挂载此脚本,放入预制体,运行就会出现该预制体
GameObject cube = GameObject.Instantiate(Prefab_cube);
}
}
特殊文件夹:Resource
目的:预制体、Sprite等资源在目录中,动态的加载进来。
使用:Resources.Load
注意:Resource 进行的预制体加载,并不等于实例化。
大多数游戏都会保存玩家游戏过程中的数据,其中单机游戏存放在本地,而网络游戏中一般存放在服务端的数据库,一些没那么关键的数据也可以存放在本地。
PlayerPrefs 是 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");
bool exist = PlayerPrefs.HasKey("Key");
PlayerPrefs 中的数据并不是存放于项目路径下Windows平台下,而是存储在注册表中的 **HKEY_CURRENT_USER\Software[company name][product name]
**下。
打开方式:cmd 中 regedit.exe
很多时候并不能在一个场景中完成所有的事情,所以会根据功能来划分场景,比如:登录场景、游戏大厅、竞技场、战斗副本、不同关卡等等。
场景就是Unity中的一个个 Scene,学习重点是:场景切换 与 数据保留
场景切换的前提:该场景必须被打包,也就是点击File -> Build Setting 进入打包设置界面。再将场景拖拽进 Scenes in Build,排序第一的场景会作为游戏开始的开场场景。
完成场景切换:
using UnityEngine.SceneManagement;
SceneManager.LoadScene()
,多个重载方式
using UnityEngine.SceneManagement;
public class SwitchScene : MonoBehaviour
{
void Start()
{
}
void Update()
{
if(Input.GetKeyDown(KeyCode.A))
{
SceneManager.LoadScene(1);
SceneManager.LoadScene("SceneName");
}
}
}
场景切换,会导致前面一个场景的全部游戏物体都销毁,但是在实际开发中,有时候我们可能希望将一些游戏物体带到下一个场景中。
GameObject.DontDestoryOnLoad(object)
:加载场景不销毁。
object:一般直接使用gameObject,即可将整个游戏物体以及数据带入下一个场景。
游戏中音效是必不可少的重要元素
AudioListener 组件可以让我们听到音效,本身并没有其他额外功能。
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);
}
}
这里指的发布指的是,从 Unity 中的工程项目转换为玩家可以直接打开的 exe 程序。
但是 Unity 的发布和 C#控制台应用程序基于VS的发布方式完全不同。
有些场景可能是测试场景,并不需要打包进游戏中。
File -> Build Settings -> Scenes In Build,可以将场景文件直接拖拽进去。其中第一个场景就是游戏启动的场景。
File -> Build Settings -> Player Settings
Resolution and Presentation:分辨率和显示 设置栏目
一切设置完成后,点击 Build 选择发布目录即可。