0%

前言

UI的框架大致搭好了,虽说还有许多控件还没支持,不过其实都大同小异,以后需要用到新的控件的时候再考虑支持新控件好了。

然而现在有个问题,UGUI原生的控件虽然已经很好用了,不过我们有时候还是会想有更多的功能,举个例子,UI.Button组件并没有保存这个按钮下的Text节点,我们不能方便地修改按钮的文本,当然这个是可以理解的,因为不是所有的按钮都需要文本,很多情况它会作为一个图片按钮出现在游戏中。

不过更多的情况按钮还是有包含一个文本的,为了方便地修改按钮的文本,我们需要对其作出一定扩展。

阅读全文 »

前言

项目这个东西果然还是做起来才会发现坑,尽量早填上好了

View Prefab

上一篇的vwTest这个UI预设体的根节点vwTest是一个Panel控件,内容是个背景框,这个想了下不太妥,应该改一下,包含具体内容的控件不应该在根节点中,现在把根节点改成透明panel,尺寸为整个View的尺寸。背景框相关的放到根节点下边。

0501

阅读全文 »

前言

UI在任何游戏里都是个重要的东西,作为一个程序员我们暂时先不考虑如何设计UI才好看,优先还是考虑怎么高效地实现功能。

在很多重度UI的游戏中,UI占的比重经常超过核心玩法,UI变多的时候我们需要用编辑器来设计UI,用代码生成工具来生成相关的代码,之后我们只关心如何实现相关的逻辑就行了,Unity的场景文件完全不用修改,因为所有的UI都是代码控制动态添加移除的。

这里使用MVP的架构来实现,Model为主要以单例形式存在的类,用来存储相关的数据;View为根据UI的Prefab生成出来的代码,人工不修改,纯自动生成;Presenter就是我们需要写代码逻辑的地方了。

阅读全文 »

前言

本来是想接着写UI相关的东西的,不过上一篇提到了SFUtils这个类,干脆就先介绍下有关于日志方面的封装

目的

这个游戏目前的目标平台是PC和Mac,移动平台有网络同步效果方面的顾虑,之后再考虑。

当然这不是主要问题,主要问题是Unity日志实在是太难用了,直接使用Debug.Log()是最常用的方式,然而这样做只会把日志输出到UnityEditor的Console里,实在是有点难看,唯一的好处是双击某一行可以直接跳转到响应的代码行。不过作为外貌协会成员,还是想办法把这个尽量弄的优雅吧。

想法是统一把info,warning,error这些统一为一种日志,全部记录到文件里,这样的话我们翻之前的日志也比较方便,不会丢失。如果配合实时日志查看器的话(之前还开了个坑,不过最近估计没时间填了orz),就简直完美了~

阅读全文 »

前言

之前一直在用cocos2d-x用c++写代码嘛,所以为了开发方便自己设计了一套事件系统,现在转到unity用c#了,就很自然地把之前那套东西搬过来用了XD

C#自带的event其实就完全可以用,不过功能略显简陋,Unity自带的EventSystem感觉太复杂了,而且我又不太喜欢去操作editor,所以我还是决定自己造轮子,弄一个最适合自己的事件机制

哦对了,本系列的文章仅为我个人的学习记录,大家可以在评论区指出我的错误和误区,绝对不是什么教程哦,当然还是希望大家可以在这里找到一些有价值的东西

阅读全文 »

之前那篇cocos转unity的系列算是坑了(撒花

前言

自己是在用unity去尝试做游戏的,中间也遇到了很多很多各种各样的问题,也都在努力去解决。

到目前为止也取得了很明显的成果:主流程都是通的,现在允许多个玩家同时在线,在同一个场景中移动,转向,释放技能;服务器也能妥当的同步各个玩家的信息给所有人。

不过问题也越来越多,由于现在网络通讯机制的问题,总是会出现莫名其妙的网络断开,而且断开的只是客户端接收响应的通道,客户端依然能够发给服务端消息, 服务端也可以收到,当然也正常地返回结果给客户端,然而这里客户端就收不到了。

另外一个情况是:现在的同步机制是客户端各自模拟逻辑和运动,服务端只是负责同步各自的位置,某个玩家把自己的位置告知服务端,服务端再广播给所有其他玩家。这样就会有个问题,由于网络延迟的存在,不同玩家看到的场面局势是不一样的,而且现在也没有对技能释放出来的抛出物进行同步,那些火球的攻击判定也是客户端自行判断的,而且不同客户端的判断结果很有可能不一样,这已经很难再进行优化了,要改的话必须改成由服务端计算所有移动判定逻辑,客户端只负责发送指令和显示服务端推送的位置信息,自己移动时客户端不做移动,仅当传送给服务端的指令信息被处理,服务端推送给客户端位置变化的

阅读全文 »

接上篇,继续介绍数据类型

其他数据类型

集合Set

集合包含一堆不重复的字符串,内部实现采用哈希表,增删改查的时间复杂度都是O(1)

  1. SADD key value... - 向一个集合中添加一个或多个元素,如果集合key不存在,则新建一个集合,如果集合中已经存在指定的值,这个值则会被忽略,返回成功插入集合元素的个数,如果key已经存在但是不是集合类型,则会返回一个错误WRONGTYPE
  2. SCARD key - 返回集合中元素的个数
  3. SMEMBERS key - 返回集合中的所有元素
  4. SDIFF key1 [key2...] - 返回集合key1与key2的差集,key2可以有多个
  5. SINTER key1 [key2..] - 和上面一条类似,返回所有参数集合的交集
  6. SUNION key [key2...] - 同上,返回所有参数集合的并集,另外,这三个命令还有对应的一组,即SDIFFSTORE dest key1 [key2...],以此类推,在命令后面加STORE。此时参数也要增加一个dest到第一个参数的位置,作用为把后面若干个集合key1…的差集/交集/并集储存到第一个参数指定的集合dest中,并返回dest中的元素个数
  7. SREM key value1... - 移除集合中一个或多个元素,不存在的元素会被忽略,最后返回成功移除的元素的个数
阅读全文 »

Redis安装

启动Redis

服务端

1
$ redis-server

客户端

1
$ redis-cli

远程连接时(远程主机的防火墙要配置好,否则会拒绝连接)

1
$ redis-cli -h $HOST_NAME -p $PORT -a $PASSWORD
阅读全文 »

现在macOS自带的SVN版本是1.9的了,然而项目使用的版本还是1.7的,所以为了在命令行中使用svn,就必须另外安装1.7版本的svn
首先尝试homebrew,结果发现homebrew只提供了1.8的版本

阅读全文 »

是时候拿Unity练练手做个小游戏玩儿了,顺便也多少接触一下服务端的东西

计划:做一个大乱斗的游戏,要多玩家实时对战。目标平台PC,开发工具:客户端Unity + 服务端Node.js

阅读全文 »