Cocos2d-x利用Unity轻松快速设计复杂2D地形

本教程用到的工具:Cocos2d-x 3.7、Unity插件Ferr2D Terrain Tool 1.0.8

http://blog.csdn.net/final5788
热爱技术的童鞋可以来,
http://jq.qq.com/?_wv=1027&k=TW60Dg

原理:将Unity的优势为Cocos2d-x所用。使用Unity强大插件轻松拖出复杂2D地形,然后将地形点导出到plist文件给Cocos2d-x使用。

效果如图:

http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdHnr7nX61

Cocos2d-x效果图
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdHnEeAk14


利用Unity轻松快速制作地形

一、Unity 结合 Ferr2D Terrain Tool快速设计2D地形

1.打开Unity并导入Ferr2D Terrain Tool插件:

2.创建一个带有物理属性的2D地形:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdIBbIWA98

创建一个带有物理属性的2D地形
弹出对话框,这里我们做如图选择
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdIUP0X1f3


填写图片摘要(选填)

3.为了让地形更平滑精致,做如图设置:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdJdCrFZd7


填写图片摘要(选填)
这里只需要顶部的顶点,只保留Top勾选
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdJuN6SM54

填写图片摘要(选填)

4.根据需求拖动设计地形:
Ferr2D Terrain Tool插件使用很简单,详细教程自行Google
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdK59Mtf5d

填写图片摘要(选填)

5.导出地形数据到plist文件,代码实现:

脚本下载链接:http://pan.baidu.com/s/1gdGp1mzhttp://pan.baidu.com/s/1gdGp1mz 密码:zeka
代码中注释非常清楚了,这里不再详细说明。

6.将脚本拖给地形:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdMYpTbEe6

填写图片摘要(选填)
注意:由于要将Unity世界坐标系的点转换为屏幕坐标系(以像素为单位的点),所以场景中一定要有个Camera,操作如图: 将Camera拖到脚本的Camera位置
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdNFYmOM74

填写图片摘要(选填)

7.点击Unity运行按钮运行游戏,然后点击导出地图按钮:

默认导出路径是C://TerrainPoints.plist
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdNZC2L02a

导出地形到plist文件

8.Cocos2d-x读取地形plist文件:
Cocos2d-x读取plist文件很简单,代码如下:

//创建
Dictionaryauto dic = Dictionary::createWithContentsOfFile("TerrainPoints.plist");
//定义一个Vector容器,用于存放所有地形点
std::vector terrainPointsVector;
//读取点的数组
auto arr = (Array*)dic->objectForKey("points");for (int i = 0; i < arr->count(); i++)
{
auto pointStr = (String*)arr->getObjectAtIndex(i);
auto point = PointFromString(pointStr->getCString());
//将点放入vector容器
terrainPointsVector.push_back(point);
}
```



然后就可以通过容器terrainPointsVector创建物理地形曲线:
以Cocos2d-x封装物理为例:

auto terrainBody = PhysicsBody::create();//物理Body

auto terrainShape = PhysicsShapeEdgeChain::create(&terrainPointsVector, terrainPointsVector.size());
//通过地形点创建物理
shapePhysicsMaterial mater;
//设置地形的摩擦力等属性
mater.friction = 3.0f;mater.restitution = 0.1f;
terrainShape->setMaterial(mater);
terrainBody ->addShape(terrainShape);//将物理shape绑定到物理Body
```

这样就创建了带有物理属性的地形曲线,效果如图:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdPLCxCa62
![](http://img.blog.csdn.net/20151017081802216?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
*填写图片摘要(选填)*

当然,为了美观还要以terrainPoints容器中的顶点,用OpenGL来填充贴图:
最终效果:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdPSOdZFd3
![](http://img.blog.csdn.net/20151017081841816?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
 *填写图片摘要(选填)**
*

看起来挺nb的那,不知道有没有别的方法能实现这种类型的地图。

图都爆了, 可否更新下:922:

:3:然后就直接上u3d开发了岂不是更加容易?

请问下,这个地图的插件怎么下载啊?

目前最新版:http://download.csdn.net/detail/final5788/9395698

好的,谢谢啦,这个需要收费么,还是免费版的unity也能用的?

求源码626266603

什么源码?上面已经提供下载了

当然,为了美观还要以terrainPoints容器中的顶点,用OpenGL来填充贴图:

当然,为了美观还要以terrainPoints容器中的顶点,用OpenGL来填充贴图: 这部分源码。 再请教下,在unity里面怎样实现制作出来地形的碰撞呢?我现在给一个cube加一个刚体,直接就掉到地下面去了

unity3d的配置文件全部是标准的yaml格式,用yaml解析库可以在任意代码里面使用。

这个插件最新的u3d可以用吗?

通过解析yaml我可以把unity3d的整个场景加载到cocos2dx里面

mark