本教程用到的工具: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

*填写图片摘要(选填)*
当然,为了美观还要以terrainPoints容器中的顶点,用OpenGL来填充贴图:
最终效果:
http://blog.photo.sina.com.cn/showpic.html#url=http://album.sina.com.cn/pic/004aKPVHzy6UdPSOdZFd3

*填写图片摘要(选填)**
*
然后就直接上u3d开发了岂不是更加容易?