从上个月出现灵感,到现在断断续续开发了几天。大概想好了一些数据结构。从之前的项目中吸取了一些经验,所以上个游戏某一些问题可以在这个游戏中避免。比如说上个游戏换了语言,再接着存档玩会发现有些文本没有翻译,因为一些文本我直接存进了数据存档里,这是错误的做法。正确的做法就是所有显示的文本(文字)都不应该用任何形式存储,而是根据index读取。每次开始游戏时或者更换语言,加载不同的文本。然后根据index选择确切需要显示的文字。
上个游戏的代码写得比较乱,基本上几天不看就忘记写的什么了,很繁琐。这次游戏分了很多清晰的文件夹,尽量不同功能块用不同的文件来写,并且分类,这样修改和查找也方便多了。一个功能块,放进同一个文件,写成公共单例,比如某一个场景的所有数据显示,直接把各个控件的TEXT组件全部放到里面,并且在里面写更新数据显示的函数,当其他功能要更新数据显示时,直接调用这个单例的方法就行了,尽量同一个功能写一次就行,修改都会方便很多。不用再Find啥的,公共单例可以直接代码敲出来。关键的语句:public static XXXController instance = null;
//保证场景种只有一个这个对象
void Awake()
{
if (instance == null) {
instance = this;
} else {
Destroy (gameObject);
}
}
///////////一位热心群众说以上方法可能导致其它函数如果要在AWAKE调用这个函数,会找不到,他有更好的方式//////
上个游戏用了很多GetComponent这种低效率的方法,实际上要修改某个TEXT,直接写一个PUBLIC TEXT,再把包含Text的对象放进去就完了,根本不用再GetComponent。
用Sprite[] temp = Resources.LoadAll<Sprite> ("路径"),就可以得到一个文件夹下面的所有图片,对于图片预加载来说非常方便。可以先加载进临时数组再放入用图片名做索引的字典里,方便之后程序使用。图片名直接就是temp[index].name就能知道。
这次要做一个可以拖拽物品的背包,可以用using UnityEngine.EventSystems;来做,开始拖拽,拖拽结束都有特定的方法,直接把功能写进去就很快实现一个简易背包。鼠标进入,鼠标移出也有对应的方法。
做血条,进度条,可以直接用Image组件,选择type filled,自己再选一下其它部分的样式就行了。代码控制其中的fillAmount就可以。
其实用UNITY最大的问题就在于你没有学习过某个功能,就不知道这个功能最简便的方法是啥,没法像查字典一样定向的去找这个功能所需要的API,只有通过观看项目教程才能获取有效信息,噢,原来是这样做。这就会花不少时间。
这次的游戏从程序或者美术方面的工作量都比上个游戏多得多,特别是美术部分。
总体来说进度非常缓慢,人越来越懒了。乐观希望4月份结束前能有一个可以玩的DEMO。但是我觉得很悬,毕竟3月份都过了一半了。
乐观希望4月份结束前能有一个可以玩的DEMO,我也差不多,乐观。。。
期待
共勉啦