/=\存图地点

游戏开发日志4月4日

【开发记录】

      取消了昨天对于障碍物渲染用cube的单独分层。并且计算了采用Quad作为背景图片所需要的图片大小和位置,动态的创建其形状和点击区域。那么对于点击是否交互到grid上的物体,给grid一个新的变量,用来记录存在于其上的障碍物。  

  •           切割时需要注意:    

  •           生成的图片应当有6个定点,分成四个三角形    

  •           生成图片存在偏移    

要解决的问题是:

  • 我希望在需要的时候可以点击到建筑物,而在另外一些时候可以点击到地板

  • 但是当建筑物的碰撞和地板处于同一层时,建筑物会遮住地板。在伪2D时,因为Z轴很短,大多数物体占格子在视窗看来会很矮,即物体实际高度会超过所占放格,而阻碍后方空的方格的碰撞相应。

  • 如果超出的障碍物部分不响应交互,那么很多时候用户将无法快速地选中该物品。

  • 如果将该障碍物单独分层,那么对于当前层的控制显然需要进一步的完善。

  • 如果不使用mesh而使用sprite那么会出现渲染的问题,因为在后期还有墙体的出现,在这里需要将墙体剥离到sprite前方来渲染。比较简单的解决办法是不同层挂载不同的相机,由相机决定渲染的先后次序。

  • 上述这些在目前看来都比较复杂,希望有跟简明的办法

又经过一番深思熟虑,我决定放弃3D的场景搭建而回到2D

  • 同上使用不同的相机渲染不同的floor来达到上下间的先后关系。同层则判断y轴坐标来决定渲染顺序

现在我回到2D了!

将每一个砖块的spirte变成了一个斜四边形,模拟3D视角的变形。直接使用多边形collider就可以获得一个菱形的有碰撞体的物体了!对于单个砖块我给他一个线条边框作为标识。在其下方加上真正的地板贴图即可。这样还可以更换地板,同理还有墙纸。

另我发现了一个新大陆,即:Collider2D[] col = Physics2D.OverlapPointAll(Camera.main.ScreenToWorldPoint(Input.mousePosition));可以返回鼠标位置的多个物体!接下来只要逐个判断处理就可以了!妈妈再也不用担心我的学习(x

那么明天我将重新完善我的障碍物类,一下是我的设想:

  • 首先给每一个障碍物类一个贴图,这个贴图就是交互时候点击的对象了。mapmanager在接受点击时,优先考虑被点击的是一个障碍物即可,而放置障碍物时经过被障碍物遮挡的格子时同样可以用上面的方法解决了。

  • 同时障碍物还有一个多边形的grid,这个grid依然有碰撞体,我们把这个grid的渲染顺序设置在最后,并调整它的z轴坐标,这样它就不会显示在画面上了,同时又拥有碰撞体,地板可以通过向z轴发射的射线来找到它!


评论

© 植物园 | Powered by LOFTER