9月9日软件、游戏限免资讯
限免具有时效性,由于公众号机制,有可能你看到的时候已经恢复原价了,更多限免信息可以登录我们网站进行查看 https://free.apprcn.com...
2024-09-20
最近,用四周的双休时间,写了个类的游戏。
所以,在这里分享一下开发经验。类MC游戏,最重要的就是地形生成与优化,和装备合成。
关于地形生成
首先定义不同Block的属性,比如各个方向的材质。 (在Unity中 用 就就行了)
然后,给不同Block一个ID编号
然后,就能开始下一步,渲染世界了。首先,准备一个三维数组 ,然后给它填满
数组的值就是Block ID
var data = new int[mapData.max_height, mapData.max_width, mapData.max_length];
for (var heightIndex = 0; heightIndex < mapData.max_height; heightIndex++)
{
for (var i = 0; i < mapData.max_width; i++)
{
for (var j = 0; j < mapData.max_length; j++)
{
var blockID = 0;
if (heightIndex == 0)
{
blockID = 3;
}
else if (heightIndex < 15)
{
blockID = 1;
}
data[heightIndex, i, j] = blockID;
}
}
}
//生成山地
for (var heightIndex = 15; heightIndex < mapData.max_height; heightIndex++)
{
for (var i = 0; i < mapData.max_width; i++)
{
for (var j = 0; j < mapData.max_length; j++)
{
Random.InitState(mapData.seed);
var seed = Random.value * 100;
var scale = 5.5f;
var maxHeight = Mathf.PerlinNoise(i * scale / mapData.max_width + seed, j * scale / mapData.max_length + seed) * 8 + 15;
if (heightIndex < maxHeight)
{
data[heightIndex, i, j] = 1;
}
}
}
}
我将三维数组的数据,储存在了中(需要将三维数组转换为一维数组才可以保存),方便调试。
然后地形的生成上,只需要对三维数组做遍历,判断每个Block的前后左右是否还有Block,没有Block就把这一个面渲染出来,类似于下面的方法,徒手写面片
//渲染顶部面片
runtimeData.vertices.Add(pivot + new Vector3(0, 1, 1) + mapData.startPos);
runtimeData.vertices.Add(pivot + new Vector3(1, 1, 1) + mapData.startPos);
runtimeData.vertices.Add(pivot + new Vector3(0, 1, 0) + mapData.startPos);
runtimeData.vertices.Add(pivot + new Vector3(1, 1, 0) + mapData.startPos);
runtimeData.triangles.Add(verIndex);
runtimeData.triangles.Add(verIndex + 1);
runtimeData.triangles.Add(verIndex + 2);
runtimeData.triangles.Add(verIndex + 2);
runtimeData.triangles.Add(verIndex + 1);
runtimeData.triangles.Add(verIndex + 3);
runtimeData.uvs.Add(new Vector2(0, 1));
runtimeData.uvs.Add(new Vector2(1, 1));
runtimeData.uvs.Add(new Vector2(0, 0));
runtimeData.uvs.Add(new Vector2(1, 0));
然后,就大功告成了。不过,各个面片对应的坐标,需要记录一下。否则,你就无法删除渲染了。
关于碰撞,寻找将最外层的Block,然后各自加个就行了。也需要记录下对应的坐标。
接着,就是合成系统。首先,写一个的。保存不同的装备信息,接着写合成信息。
[CreateAssetMenu(fileName = "RecipeData", menuName = "RecipeData")]
public class RecipeData : ScriptableObject
{
public Inventory[] Recipe = new Inventory[9];
public Inventory CraftedInventory;
public int CraftedCount = 1;
}
在游戏内,只要比对用户装备放的位置,是否与合成信息相同就行了。
这样,自制的MC就大功告成了。
具体的算法,还需各位看官自己去琢磨,本文已给出了大致的开发思路。
最后,给各位看下目前的成品。 编辑于 2019/6/02
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,请告知我们,本站将立刻删除涉嫌侵权内容。
相关文章
限免具有时效性,由于公众号机制,有可能你看到的时候已经恢复原价了,更多限免信息可以登录我们网站进行查看 https://free.apprcn.com...
2024-09-20
限免具有时效性,由于公众号机制,有可能你看到的时候已经恢复原价了,更多限免信息可以登录我们网站进行查看 https://free.apprcn.com...
2024-09-20
植物大战僵尸e版支线下载,《植物大战僵尸e版支线》,这是一款玩家魔改版的植物大战僵尸,相比其他魔改版,这款游戏中的植物和僵尸同时得到了加强,玩起来非常带感...
2024-09-20
热评文章
2022年专属火龙之神途新版
1.80龙神合击传奇
1.76永恒小极品+5复古传奇
1.76双倍魔天大极品第三季单职业
1.76神梦传奇三职业
1.80聖统圣统合击三职业传奇