游戏开发中常用的脚本API

2023-12-23 18:13:50

生成和销毁游戏对象

在游戏开发中经常会碰到生成和销毁游戏对象,例如:刷怪笼、怪物的死亡。

刷怪笼-图片来源于网络

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);
}
 

文章来源:https://blog.csdn.net/xks18232047575/article/details/135170082
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。