开源软件名称(OpenSource Name):Jin-Yuhan/MinecraftClone-Unity开源软件地址(OpenSource Url):https://github.com/Jin-Yuhan/MinecraftClone-Unity开源编程语言(OpenSource Language):C# 95.0%开源软件介绍(OpenSource Introduction):Minecraft Demo本项目使用 以下图片均为游戏内实际画面。 Features
Notice
GuideInputKeyboard
Mouse
Asset Management在编辑器下支持两种资源加载模式:
两种模式只需要在 Unity 菜单栏 代码示例: // 首先,确保场景中有挂载 AssetManagerUpdater 组件,并设置了相关属性,或者自己已经手动初始化了 AssetManager.
using Minecraft.Assets; // 全在这个命名空间里.
class Example : MonoBehaviour
{
// 直接保存资源的路径,如:Assets/MyFolder/MyAsset.asset.
public string AssetPath;
// 保存资源的“地址”(推荐).
// 在 Inspector 中,这个字段和普通的 Object 引用没有任何区别.
// 内部保存了资源的 GUID,也就是说即使资源位置被移动、名称被修改,引用仍然不会丢失!
public AssetPtr Asset;
private IEnumerator Start()
{
// 全异步架构.
// 不需要关心资源具体在哪个 AssetBundle 中.
AsyncAsset asset = AssetManager.Instance.LoadAsset<GameObject>(Asset); // 也可以用 AssetPath.
yield return asset; // 等待资源加载完成.
GameObject go = asset.GetAssetAs<GameObject>(); // 获取具体的对象.
// do something.
AssetManager.Instance.Unload(asset); // 卸载资源.(这里也可以用资源的名称来卸载)
}
} 上面的示例只是最基本的使用,更多 API 就请看源码吧(毕竟这个不是重点)。 构建 Configuration方块数据、物品数据(暂时还没用)、生物群系数据都在一个自定义的编辑器中进行配置。 在 Unity 菜单栏中点击 Tips
Lua CodesLua 代码我都放在了
Write Custom Block Behaviours首先,创建一个 Lua 文件,然后设置好它的 AssetBundleName。 然后,这里先以沙子为例: require "block" -- 引入这个模块,这里定义了方块行为的 API
local gravity = require "blocks.templates.gravity" -- 引入我提供的一个行为模板,这里用的是重力的模板
sand = create_block_behaviour(gravity) -- 直接继承,完成
-- 注意:sand 这个变量一定要是 global 变量,而且名字要和之前在编辑器配置的名称一致 写完以后,别忘记在 -- 文件路径:Assets/Minecraft Default PBR Resources/Lua Scripts/block.lua
local behaviour = {} -- 默认行为
-- 方块行为被注册时调用
function behaviour:init(world, block)
self.world = world
self.__block = block
print("init block behaviour: " .. block.InternalName)
end
-- 边上的方块刷新时调用
function behaviour:tick(x, y, z)
-- default implement
end
-- 方块被放置后调用
function behaviour:place(x, y, z)
-- default implement
end
-- 方块被破坏后调用
function behaviour:destroy(x, y, z)
-- default implement
end
-- 方块被点击后调用
function behaviour:click(x, y, z)
-- default implement
end
-- 方块实体初始化时调用
-- entity 参数就是方块实体对象
-- context 参数就是一个 LuaTable,可以用来保存一些临时数据(切勿直接 self.xxx = xxx)
-- 下同
function behaviour:entity_init(entity, context)
-- default implement
end
-- 方块实体被销毁时调用
function behaviour:entity_destroy(entity, context)
-- default implement
end
-- 方块实体的 Update 方法
function behaviour:entity_update(entity, context)
-- default implement
end
-- 方块实体的 FixedUpdate 方法
function behaviour:entity_fixed_update(entity, context)
-- default implement
end
-- 方块实体被碰撞时调用
-- flags 参数就是 UnityEngine.CollisionFlags
function behaviour:entity_on_collisions(entity, flags, context)
-- default implement
end
-- 获取该行为对应的 BlockData 对象
function behaviour:get_block_data()
return self.__block
end
--- 创建一个方块行为对象。
---
--- 如果不传入 `base` 参数,返回的对象将具有默认行为。
---
--- 如果传入 `base` 参数,返回的对象将会继承 `base` 的所有行为。
---
--- @param base? table
--- @return table
function create_block_behaviour(base)
return setmetatable({
base = base or behaviour
}, {
__index = function(table, key)
local block = rawget(table, "__block")
return block and block[key] or rawget(table, "base")[key]
end
})
end 这个模块允许我们像定义一个类一样去定义方块行为,非常方便。另外,我提供了 Terrain Generation在 End如果还有问题就提一个 issue 吧,我看到后会回复的。 References排名不分先后
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论