unity 接触一个月的感受和心得

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:找策划。

解读:不要找服务器,要找策划。虽然我直接面对的应该是服务器。

 

转载于:https://www.cnblogs.com/hackerl/p/7445562.html

你可能感兴趣的:(unity 接触一个月的感受和心得)