通过一周多的时间研究,我发现,unreal对isometric的支持真的很不友好~


一、贴图

把一张图片导入后,先右键Sprite操作。应用paper2D纹理设置。之后就可以进行创建sprite,或者提取,瓦片集的操作。


二、动画,图片序列视图

图片提取之后,就可以对多张sprite创建图片序列视图。这就是动画了。的确很方便。


三、自定义game_mode


四、角色 继承paperCharacter

控制人物行根据当前状态,来控制对应的动画。


五、tilemap的使用

unreal 的tilemap真心不好用。主要是在45度 isometric 里面比较难处理。只能用层,没有对象层的概念。这可就为难了。想要动态加载需要自己脑补很多办法。碰撞可以运用它里面提供的3d碰撞。但是遮挡就麻烦了。

也不能直接引用


六、遮挡问题。

在unreal里,可以设置半透明排序优先级,来控制遮挡。所用的材质必须要设置为TranslucentUnlitSpriteMaterial。才有效。

主要是建立一个actor 继承PaperSprite,然后设置一个自定义的sprite变量来设置对象。再设定一个sortPoint变量,根据sortPoint,来设置半透明排序优先级。这两个变量都要可见,和生成时公开,以便后面动态生成时使用。

角色类在移动时根据坐标实时设置半透明排序优先级。



动态生成

我设置在了关卡蓝图,目前只是简单支持,墙壁。实在不想一个个拖进去。如何动态获取图片的宽高,都难以解决。最后估计还是靠数据表格来解决吧。


由于有些是长方体的。遮挡的ac面还是比较难以控制。暂时,我是把其切割成两半,这样就行了。


又得重新自己建立坐标系。

大概从tilemap editor里面的坐标转换是这样的。

var tileWith = 64;
var tileHeight = 47;
function getPinouter(x,y,width,height){
    var n = (x) / tileHeight 
    var m = (y) /tileHeight
    return {
        x:(n-m)*32 , 
        y:-(m+n)*23.5 + height/2-23.5
    }
}


七、CVS和JSON的使用

蓝图里面只有结构和枚举。在编辑器里,数据量大时非常不好修改。很浪费时间。

数据表格,第一行必须大写Name,不然Json里面的第一行字段可能会丢失。

对比一下建立的结构,数据表格以及导出json、csv文件。


八、其他一些小问题。由于是在2d,可以取消掉重力,不然,在没有地面时,人物就会一直往下掉。


九、摄像机的设定需要使用正交模式。垂直对着玩家。正面。



我这又时何苦呢?

0条评论