版权声明:本文为博主原创文章,转载请声明原创网址。 https://blog.csdn.net/lagoon_lala/article/details/86031835
Intro and Setup
游戏逻辑与游戏数据分离
基于简单UI
完成效果:
菜单场景(作为持久场景)
DataController持续存在于场景中
在游戏场景回答问题,计分、计时
游戏结束后可以回到menu
第一节课程的得分不存储,之后将会读取Json数据
扫描二维码关注公众号,回复:
4822602 查看本文章
Setup
分别创建预制件、场景、脚本文件夹
创建三个场景:
默认场景删除主相机,命名为持久场景(Persistent),
新建场景MenuScreen、Game,
保存在场景文件夹。
将分别完成Persistent、MenuScreen、Game设置
Persistent场景中:
创建DataController对象,附加DataController脚本,在三个场景之间保存数据
创建AnswerData脚本,作为纯数据类,只存储答案信息
Data Classes
编写AnswerData类
using UnityEngine;
using System.Collections;
[System.Serializable]//添加序列化则能编辑他们,在检查器inspector显示值
public class AnswerData //纯类不继承MonoBehaviour,类中没有方法
{
public string answerText;
public bool isCorrect;//该回答是否为正确的那个答案
}
创建QuestionData类并编写
using UnityEngine;
using System.Collections;
[System.Serializable]
public class QuestionData
{
public string questionText;
public AnswerData[] answers;//每个问题有一个答案数组
}
创建RoundData类并编写
using UnityEngine;
using System.Collections;
[System.Serializable]
public class RoundData
{
public string name;//玩到哪一关
public int timeLimitInSeconds;//每关限制用时
public int pointsAddedForCorrectAnswer;//回答正确得分分数
public QuestionData[] questions;//每关有一系列问题
}
编写DataController
提供显示关卡数据给GameController
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;//需要加载场景
public class DataController : MonoBehaviour //行为类,附加到对象
{
public RoundData[] allRoundData;//可以扩展为多轮游戏
// Use this for initialization
void Start ()
{
DontDestroyOnLoad (gameObject);//一般加载新场景时会销毁旧场景中所有对象。设置后加载时不再销毁该游戏对象,并被移动到单独的不破坏场景(DontDestroyOnLoad场景)
SceneManager.LoadScene ("MenuScreen");//然后加载初始场景
}
public RoundData GetCurrentRoundData()
{
return allRoundData [0];//只返回0的数据,稍后可传入索引值确定
}
// Update is called once per frame
void Update () {
}
}
Persistent添加DataController脚本
设置Menu相机背景为黑色
打开Build Setting,将所有场景放入(若不放入,调试运行时无法跳转)
运行看是否跳转到Menu,且保留对象