unity scrollview 遇到的问题
一个scrollview作为翻页,这样的效果调整。
一页上面有三个scrollview,这三个scrollview上的items不受下层整个页面的scrollview的裁剪,导致滚动的时候,上层items会从页面外面飞入。这个问题我还没有解决,这个问题只有第二次以及以后打开界面才会出现,第一次打开不会出现,
所以我断定是我在第一次关闭界面的时候有些内容没有释放导致的。
现在采用迂回战术,关闭的时候不关闭,而是隐藏,这样就不会出现这个问题了。
但是根本原因,后续有空再研究。
2.我翻页使用scroll,反复的调整参数,都不能达到好的效果。
后来改为Spring.Panel.Begin(xxx),效果完美。
3.childcenter要谨慎使用,一般一次显示一格的才使用,一次可以显示多格的不要随便加,不然容易出问题。
4.今天替换美术拿过来的资源,居然和策划文档的功能都不一样。忧伤,还增加了功能。
关键是遇见一个大坑。大概是上午的时候,开始学习合成atlas图集,旁边的同事教我用ngui->open->atlas maker 制作了图集,在我的电脑商运行完美。提交到svn,再被其他同事update之后,图集不能够显示。
这个坑真的是大坑,关键是我没有unity和图集相关的基础,导致我遇见问题的时候不知所措,找人解决也不知道是什么问题,后来大概7点多的时候,组长说是图集的问题。让用TexturePacker重新生成一份,我本地安装这个工具却出现dll找不到的错误,于是放弃,先让其他人生成给我用吧,解决问题先。。。
可是给我之后还是不能用。
后来就不知道什么原因了,大概8点多,客户端的人都走完了,留我一个人在这里。今天是大周星期五。我下决心一定要解决的突然我发现我电脑有安装TexturePacker,然后我自己生成了之后就可以了。 其他电脑也可以了。。。 其中还尝试了其他方法,看是不是其他问题,这些过程相当的有趣,所以找bug定位精准太重要了。。。这一点我在python上感觉到了优势。我在前公司的时候,组内大都是一年两年的新人,我是三年的老人,我看过《python源码剖析》,他们没看过。他们提出的python问题我基本都能够解答,并且那段时间给他们普及了很多python知识。
所以,理解原理真的是太重要了。
公司用的unity是版本是5.4.4.f1,ngui版本是3.10.1
visual studio:vs2015
vstounity:关联vs到unity 使得vs可以调试unity程序。
ngui3.10.1的下载地址
http://download.csdn.net/download/wxk_1054433720/9637687
先删掉原来工程目录下的ngui文件夹再import
纹理图片导入到unity中大小变小了,原来是被unity压缩了,选中纹理图片在Inspector中操作,2DSprite,然后勾选Generate mip maps,这样纹理就不能够被压缩了。
制作的界面和效果图不一样,前期是眼睛对着看,浪费了大量宝贵时间,现在改为放一张图片在下面,然后调整坐标。
美术给的资源都说按照效果图来,差评,理科生对这种不敏感,建议实际的坐标值,颜色值,文字大小数字标出来。
UIHelper.SetTexture,不用每个地方都去实现一下。
慎用居中插件,center inchild,各种恶心,还有各种毛病。
不能够用texture在unity编辑器中,打包回出现问题。
速度一定要快,给一个任务一定要按时完成,这就是效率。
什么地方可以快速熟悉unity编辑器的各种功能?
预制体的类.gameobject 报错:要实例化的对象为null。
这个原因是:
1.预制体的类是否名字和预制体一样;
2.如果一样,再看文件夹下面是否有对应的预制体,因为在unity编辑器中的Hierarchy中有的是在unity编辑器的内存中的,并不代表存在于电脑的硬盘中,所以,检查文件夹,如果没有就将预制体拖入文件夹中。
第二个任务是商城系统,简单说就是购买东西的一个界面,有n个标签,根据标签加载对应的物品,
当然是根据选择不同的标签,向服务器发送对应的标签数据,服务器返回对应的数据列表,
我拿到这些数据id之后,根据当前选中标签,或者是服务器发过来的itemtype,进行相应的设置,显示不同的内容。将需要显示的物品显示在一个scrollview中即可。
这就是显示部分。
另外一部分是对这些物品进行操作。
比如说我要查看物品的详情,或者说是购买物品。
物品显示分为物品的区域范围,这个范围点击是可以查看详情的,在详情里面可能会有购买的操作,或者是其他的操作。
另外物品区域的下方还有一个显示价格的按钮,点击可进行购买。
这种点击操作基本都是向服务器发送请求得到数据,或者根据id去读取本地的表中的数据用于显示。
这里的id是怎么得到的呢?我怎么知道我点击的是那个按钮呢?对应的id是多少呢?
我的做法是对于每一个物品,我在设置显示信息的时候同事对象保存了他的id,点击的时候在响应函数里面获取本对象的mId就可以知道点击的是哪一个物品。
然后拿到这个id之后,我就可以获取到需要显示的数据了。
还有一个问题是一个页面如何多重使用呢?即页面复用的问题,我的做法是:
如果是可以根据页面标签来进行分类的,那么 以页面标签进行分类,进行显示不同的内容。
如果不能通过页面标签来进行分类的,我就通过服务器发过来的id去对应的表里面找type,找到对应类型,然后根据类型来确定具体应该显示什么内容。
这样就能够很好的处理显示的内容了。
另外,这个商城系统里面还有一个抽奖的内容,这个浪费了我挺多时间的,大概一天半吧,现在还没有做完整。
明天继续去加班,把事情做完,自己测试几遍,现在这个公司程序员不仅仅要写代码,还要把美术给的界面资源拼接成效果图,这个过程极其恶心,然后还要负责测试。这个也是我觉得不爽的地方。十分怀念原来那种,不需要管界面,策划做好,我只需要写代码,写好功能之后直接丢给策划,策划安排测试人员一路跟着测bug,然后修bug,然后再测,直到没有bug,那种生活太奢侈了。
不过现在更能够锻炼人,仔细想一想,游戏开发,过来过去不就是那几个系统么?至少通用的系统在每个游戏里面都要用到的,所以把这些模块做得滚瓜烂熟之后,我想以后开发效率就会高了吧,嗯嗯,加油吧。新进入一行一定会有一个阵痛期的。
做游戏就是要速度快,给一个任务,很快就做完了,然后代码质量也高,bug也少,那就是非常优秀的程序员了。现在我还要向这个方向努力?。
button的背景修改,既要改变UI Sprite 的spritename,也要改变UI Sprite的spritename,否则可能会鼠标移入地时候,又变回来。
今天想了一下,发现商城系统有天大的漏洞,比如说,我买完东西之后,商城中的限购哪里应该要刷新数据,这里服务器应该要有协议发过来刷新数据,不然的话就不准确了,商城这种重要的东西,一定要处理好。
明天再去看看协议,看是否有我看漏了的协议。这里也要搞清楚。
再一个,我还要想想办法处理卡的问题,打开一个界面为什么要等那么久。
using System;
using System.Collections;
namespace HelloWorldApplication
{
class HelloWorld
{
protected static long m_timestamp=0;
static private int GetTimeStamp(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
return timeStamp;
}
static private DateTime GetDateTime(long timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = ((long)timeStamp * 10000000);
TimeSpan toNow = new TimeSpan(lTime);
DateTime targetDt = dtStart.Add(toNow);
return targetDt;
}
static void Main(string[] args)
{
DateTime dtNow = DateTime.Now;
m_timestamp = GetTimeStamp(dtNow);
Console.WriteLine(m_timestamp);
DateTime dt = GetDateTime(1506340522591);
Console.WriteLine("Hello World!"+dt.ToString("yyyy-MM-dd hh:mm:ss"));
Console.ReadKey();
}
}
}
时间戳还有毫秒级别和秒级别的区别,要注意区分。不然服务器发一个毫秒的就不行了。统一成秒
消息响应函数只能够设置成自己这个vc的函数,我本来想将所有界面的消息响应函数都设置成controller的函数,但是发现会报错,提示超出范围。应该是底层会进行一个判断,这里要注意。
另外,有一个想法先小范围实验,可行之后再大范围的去应用,不能够想当然的做事情。
上面的说响应函数只能设置为自己的vc的函数,是错误的,是因为没有实例化,所以报错。
国庆计划:
1.C#设计模式。
2.Unity官方文档。
3.ngui官方文档。
4.C#语法。
新接任务:
排行榜。三天基本功能完成,本地数据模拟阶段,服务器和策划的速度我都有意见。
接手交易系统,估计会很多坑。
思维误区:
填表的事情要问策划:
Ask:这个表我只有一条数据?我读出来只有一条数据。
Answer:n
Ask:这个表全发给我吧。
Answer:本来就有发。
Ask:那我再看看
Ask:确实只有一条数据,跑过去找服务端问情况。
Answer:表里面只有一条数据。
Ask:能不能全部都填入,然后给我。
Answer:找策划。
解读:不要找服务器,要找策划。虽然我直接面对的应该是服务器。