游戏制作中遇到的问题记录

功能:根据玩家的选择得到不同结果

思路:

使用PlayerPrefs类(用于本地持久化保存与读取的类)记录变量yes,no,记录问题个数q和问题个数c(几个变量的初始化写在start方法中)。

编写一个choiceClick类用于监听按钮行为,其中yesClick()方法记录点击首选项的次数,方法noClick()记录点击第二个选项的次数。游戏过程中问题出现个数设置为有限个(五个),当选择到第五个选项时跳至final()方法比较两个按钮的数值从而实现跳转至不同结果的场景。(话音外:emmm应该还有更简便的方法,,)

大概代码:

public void yesClick()
    {
        if (PlayerPrefs.GetInt("q") < c)//c为问题个数
        {
            PlayerPrefs.SetInt("yes", PlayerPrefs.GetInt("yes")+1);//更新y的值
            //Debug.Log("yes");
            if (PlayerPrefs.GetInt("q")==0)
            {
                //动作1
              } 
            if(PlayerPrefs.GetInt("q") == 1)
            {
                //动作2
            }
            PlayerPrefs.SetInt("q",++i);
        }
        else
        {
            final();
        }
    }

问题:同一场景中进行第三个选择时q的数值不会改变,仍然为0

原因:在按钮中添加了choiceClick类,相当于第二个选择和第三个选择(该场景中的选择从第二个开始)都是独立调用,并不是调用同一个,所以数值只会在重复点击该按钮时才会更新。

解决方法:remove该类,建立名为script对象并将其拉至prefab中作为预制体,将类放置进该对象中,再拉进onclick()中将该类中的方法与该按键关联起来。


项目整合后,场景转换时q的数值没有进行叠加而是像上面所出现的问题一样重新开始记录

原因:每次转换场景时,start()方法会运行一次,也就是说每次场景转换的时候这些变量都会被重新初始化一次

解决方法:

在第一个场景中新建一个类对这些变量进行初始化,意味着整个游戏过程中这些变量只被初始化一次



你可能感兴趣的:(Unity问题集)