您的位置:首页 > 其它

山寨Besiege(七)加入零件朝向的调整操作

2016-06-25 22:33 369 查看
前文提到了一些需要处理的细节问题,今天我们来一个个解决:

一、轮子的安装位置调整

        因轮子尺寸相对立方体木块的不规整性,直接固定在立方体Trigger的位置点,明显是浮空的。我之前想过用额外规定吸附点之类的方式解决此问题,后来转念一想,冒出个最朴素的解决方案:直接对固定位置点作一个调节。

        为此我强行oop了一波,把Modules类的LinkTo方法设为virtual,从Modules继承出了MotorWheel类,子类的LinkTo额外作一个位置调节。其实原本在Modules类中设置此调节向量参数,然后像木块、转向轴这种不需调节安装位置的模块,参数直接设为0即可的,但事情在简单的时候总是不怎么需要管理,考虑到未来的扩展性和工程复杂化的可能,这里还是规范点做了个继承处理。

二、轮子的朝向调整操作

        我原本的设计方案,是拖出零件后,在界面上显示一个框,将零件拖进框内,则改变零件朝向,同时框跳转到另一位置,再次拖进去复原朝向。

        但后来想了下,EasyTouch是支持多手指操作的,那么一只手指拖出零件后,另一只手指划下屏幕改变零件朝向,这种操作方式似乎更自然些。于是决定采用第二种方案。

        EasyTouch虽然提供了PC端模拟多手指操作,但终归不好用。于是我又想到了UnityRemote,重新下载了个安装上,好消息是这东西又神奇的可以用了,坏消息是,UnityRemote不支持双手指调试!不支持双手指调试!不支持双手指调试!

……这下惨大了,凡是涉及到第二根手指的功能,只能打包安装到手机上测试,完了再修改代码,这个恶劣的问题如何解决,以后再说,现在先忍了!

        原本每个零件应该有自己的一个专用拖出提示图标的,因为之前图省事简单化了此功能,所有零件共用一个图标,现在仍然不想在这上面多费工夫,直接换了个带圆形箭头的图标,每次第二根手指拨动屏幕则左右颠倒图标。另外直接在AssemblingState脚本里设置了一标志变量,记录即将安装的零件是否需要反向,若需要,则安装上去后,y轴调整180度。这种做法其实很不oop,不过我急于进入下一阶段的演练,不想在这上头费太多精力。

三、智能化默认朝向

        Besiege随便装两个轮子在一个木块上,它们的滚动方向是一致的,这说明轮子默认朝向作了特殊调整。但同时,两个转向轴的默认朝向,却又没作调整。

        猪哥一时想不到简单的实现方法,这里偷一波懒,既然前面已经完成了朝向调整操作,那么有没有智能化也只是个用户体验的问题了,猪哥要做的事还有很多,做这个项目也只是以练技术为目标,并不是要做一个真的商业游戏,所以这个细节就暂不处理了。

四、RunningState的UI

        之前一直在用键盘操作轮子和转向轴,现在需要在手机上测试,是时候专门为RunningState切换一套UI了。

        UI的添加和动态显示/隐藏控制很简单,两下搞定。UGUI事件机制按照UGUI研究院之控件以及按钮的监听事件系统(五)中的方式封装,也不难。        

        但按钮点击事件如何与各个不同零件控制脚本中的事件绑定到一起,可能就最好是要用到观察者模式了。观察者模式我还从来没自己写过,一时不是很熟,暂时用了一种很蠢笨的给所有按钮定义一个状态变量,然后直接在各控制脚本中像GetKey一样查询的方式实现了事件绑定。明天好好再学习下订阅发布模式,给项目加上这个模块。

自此似乎又前进了一大步。

发布到手机上一玩,发现今天实现的功能都有了,但还是有好些问题要处理:

1.运行时转向轴的轴没卡死,轮子前进时会导致其弯转

2.游戏不能方便的重新开始

3.缺乏摄像机控制

4.缺乏删除模块功能

5.随便拼装个小车,跑起来显得很笨重,数值需要调整

路漫漫兮,做游戏不是那么简单的事,明天继续整理下代码,加入观察者模式,然后剩下的这些功能能解决几个是几个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: