在游戏开发中经常会碰到生成和销毁游戏对象,例如:刷怪笼、怪物的死亡。
public GameObject prefab; // 预制体
public GameObject objectToDestroy; // 需要销毁的游戏对象
void Start()
{
GameObject newObject = Instantiate(prefab); // 使用预制体实例化一个新的GameObject
// 下一步操作
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Destroy(objectToDestroy); // 销毁指定的GameObject
Destroy(objectToDestroy,4f)// 4秒后销毁
}
}
场景的控制常见有:进入下一个场景、返回上一个场景、退出场景、返回主界面等。
刚刚提到的这四种情况中进入下一个场景、返回上一个场景、返回主界面其实都是一个逻辑,可以归为一类去讲,另外不一样的就是退出场景、退出游戏的操作了。
private void QuitGame()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
这里需要注意的是:
在Unity编辑器中,将UnityEditor.EditorApplication.isPlaying
设置为false
可以停止游戏运行;而在发布的应用程序中,则使用Application.Quit()
退出应用程序。所以需要注意环境!!!
场景能够跳转的前提是需要在unity编辑器中进行场景的Build绑定。
绑定完成之后才可以进行场景的跳转操作。
//需要引入库
using UnityEngine.SceneManagement;
private void LoadNextScene()
{
// 获取当前场景的索引
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
// 加载下一个场景(当前场景索引 + 1)
SceneManager.LoadScene(currentSceneIndex + 1);
// 也可以直接传入场景的索引
SceneManager.LoadScene(2);
}
这个比较简单,前面的文章也有提到。就是void OnTriggerEnter
一系列API。
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player") // 判断是否是玩家
{
// 下一步操作...
}
}
除此之外还有其一系列的,使用方法都是一样的。
通过给Time.timeScale
进行赋值可以对游戏进行暂停的控制。
private void PauseGame()
{
Time.timeScale = 0;
Debug.Log("游戏已暂停");
}
private void ResumeGame()
{
Time.timeScale = 1;
Debug.Log("游戏已恢复");
}
另外除了0和1,也可以赋值0到1之间的任何浮点数。
举个例子:游戏主角在击败最后大BOSS的时候,通常会有一个动作慢放,让玩家清楚的看到大BOSS被击败,亦或者是对打游戏中的GAMEOVER,被打败的一方慢动作倒地。
这里给给Time.timeScale赋值0.5,放慢游戏,以达到游戏效果。
Time.timeScale = 0.5f;
简单来说就是控制游戏对象的激活状态(就是下面的打勾和不打勾),以达到显示和不显示的预期游戏效果。
示例代码:
public GameObject gameObject;
// 获取当前物体的激活状态
bool isActive = gameObject.activeSelf;
//例如控制菜单界面打开与关闭
if(Input.GetButtonDown("tab")){
gameObject.SetActve(!gameObject.activeSelf);
}