DontDestroyOnLoad(Unity3D开发之五)

本文介绍了Unity3D中的DontDestroyOnLoad函数,用于在场景切换时保持对象不被销毁,如背景音乐的持续播放。针对Unity 4.5之前的版本存在的对象多次加载问题,提出了使用static变量进行判断或采用单例模式作为解决方案。内容引用自宣雨松的博客,提供了调用此类持久化对象的方法。

Unity中我们从A场景切换到B场景的时候,A场景所有对象都会销毁,但有时候我不需要销毁某些东西。

比如一个简单的游戏的背景音乐,我不需要多次重复创建,多个场景播放这一个就行了。这个时候就需要用到DontDestroyOnLoad。

using UnityEngine;
using System.Collections;

public class MusicManager : MonoBehaviour {
    string volumeSetting;
	void Awake () 
	{
        volumeSetting = PlayerPrefs.GetString("Volume");
        if (volumeSetting == "False")
        {
            AudioListener.vo
### 需求分析与设计 闯关类游戏在开发前需进行全面的需求分析与设计。明确游戏的主题、目标受众和核心玩法,例如是动作闯关、益智闯关或者策略闯关等。确定关卡的数量、难度曲线以及每个关卡的独特目标和挑战。设计角色的外观、技能和行为,以增加游戏的趣味性和可操作性。 ### 技术选型与架构设计 Unity3D 是一款强大的游戏开发引擎,为闯关类游戏提供了丰富的工具和功能。在技术选型方面,可以采用轻量级 UI 消息框架用于 UI 通信,运用管理器设计模式和原型设计模式使代码和数据更易管理,利用 XML 可标记语言进行数据的读取和存储。以下是一个简单的管理器设计模式示例: ```csharp public class GameManager : MonoBehaviour { public static GameManager Instance; private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } // 其他游戏管理逻辑 } ``` ### 游戏页面搭建 使用 Unity 的 UGUI 等组件进行游戏页面的搭建和游戏数据的可视化显示。设计主菜单、关卡选择界面、游戏界面和游戏结束界面等。确保界面布局合理、美观,易于玩家操作。以下是一个简单的 UI 按钮示例: ```csharp using UnityEngine; using UnityEngine.UI; public class UIManager : MonoBehaviour { public Button startButton; private void Start() { startButton.onClick.AddListener(StartGame); } private void StartGame() { // 启动游戏的逻辑 } } ``` ### 功能实现 - **关卡系统**:实现关卡的加载、切换和保存功能。每个关卡可以有不同的地图布局、敌人类型和道具分布。 - **碰撞检测**:使用 Unity 的物理引擎进行碰撞检测,处理角色与敌人、道具和障碍物之间的碰撞。例如: ```csharp private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Enemy")) { // 处理与敌人的碰撞逻辑 } else if (other.CompareTag("Item")) { // 处理与道具的碰撞逻辑 } } ``` - **角色控制**:实现角色的移动、跳跃、攻击等基本操作。可以使用键盘、鼠标或触摸屏进行控制。 ### 测试与优化 对游戏进行全面测试,确保游戏基本实现预期功能,体现完整的游戏性。检查游戏的性能,如帧率、内存使用等,进行必要的优化。修复游戏中出现的漏洞和错误,提高游戏的稳定性和用户体验。 ### 后续拓展 合理的框架设计模式会让后续继续开发拓展新功能的难度大大降低。可以添加新的关卡、角色、道具和游戏模式,以保持玩家的新鲜感和参与度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值