{"id":13534787,"url":"https://github.com/stalomeow/MinecraftClone-Unity","last_synced_at":"2025-04-02T00:30:56.321Z","repository":{"id":38304070,"uuid":"286945784","full_name":"stalomeow/MinecraftClone-Unity","owner":"stalomeow","description":"A Minecraft clone in Unity","archived":true,"fork":false,"pushed_at":"2023-11-21T02:47:05.000Z","size":199868,"stargazers_count":153,"open_issues_count":0,"forks_count":52,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-08-02T08:09:39.233Z","etag":null,"topics":["minecraft","minecraft-clone","minecraft-unity","unity","unity3d","voxels"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stalomeow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-12T07:23:20.000Z","updated_at":"2024-07-08T05:50:02.000Z","dependencies_parsed_at":"2023-01-19T15:32:15.272Z","dependency_job_id":null,"html_url":"https://github.com/stalomeow/MinecraftClone-Unity","commit_stats":null,"previous_names":["stalomeow/minecraftclone-unity"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stalomeow%2FMinecraftClone-Unity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stalomeow%2FMinecraftClone-Unity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stalomeow%2FMinecraftClone-Unity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stalomeow%2FMinecraftClone-Unity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stalomeow","download_url":"https://codeload.github.com/stalomeow/MinecraftClone-Unity/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222784453,"owners_count":17037192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minecraft","minecraft-clone","minecraft-unity","unity","unity3d","voxels"],"created_at":"2024-08-01T08:00:41.086Z","updated_at":"2024-11-02T22:31:00.159Z","avatar_url":"https://github.com/stalomeow.png","language":"C#","funding_links":[],"categories":["Uncategorized","Awesome Unity Games [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)"],"sub_categories":["Uncategorized","Sandbox"],"readme":"# Minecraft Demo\n\n**高二时候写的，随便看看就好。停止维护了。**\n\n本项目使用 `Unity 2021.3.8f1c1` 制作。\n\n**以下图片均为游戏内实际画面。**\n\n\n![游戏内截图(1920x1080)](/Recordings/Capture.png)\n\n\n![生物群系交界处(1920x1080)](/Recordings/biome.png)\n\n\n![经典火柴盒(1920x1080)](/Recordings/house.png)\n\n\n![火柴盒内饰(1920x1080)](/Recordings/house_inside.png)\n\n\n\n# Features\n\n* 无限世界，随机地形\n* 生物群系（热带稀树草原、沙漠、森林、沙滩、MORE+）\n* 矿洞、矿脉（钻石矿、煤矿、金矿、MORE+）\n* 光照、环境光遮蔽、阴影\n* 萤石、火把\n* 飘动的树叶\n* 树木\n* 半砖（暂不支持合并）\n* 支持弹性碰撞的粘液块（项目未使用 Unity 内置的物理系统，自己写了一个简单版）\n* 能爆炸的 TNT（有粒子特效）\n* 受重力影响的沙子和沙砾\n* 可流动的水和岩浆（有最大流动格数的限制，一格水不会淹没整个世界（笑））\n* 方块朝向（旋转）\n* 昼夜更替\n* URP渲染管线 + 全 PBR 材质（[支持 NVIDIA 的 Minecraft PBR 材质包](https://www.nvidia.cn/geforce/guides/minecraft-rtx-texturing-guide/)）\n* 后处理特效\n* 可自定义的资源包\n* 方块数据、生物群系数据、物品数据高度可配置\n* 一些 ~~bug~~ 特性\n\n\n\n# Notice\n\n* 项目使用的材质包是在 [“我的世界 (Minecraft)”Windows 10 RTX Beta版：基于物理效果的渲染纹理答疑和免费资源包下载 (nvidia.cn)](https://www.nvidia.cn/geforce/news/minecraft-with-rtx-beta-your-pbr-questions-answered/) 下载的 `RTX Vanilla Conversion`，其创作者为：u/TheCivilHulk。也可以直接在 [TheCivilHulk/Minecraft-RTX-Vanilla-Conversion-and-Patches: Converted all (currently working) vanilla textures to the Minecraft Bedrock RTX format for testing/playing purposes. (github.com)](https://github.com/TheCivilHulk/Minecraft-RTX-Vanilla-Conversion-and-Patches) 下载。\n* 随缘更新！\n\n\n\n# Guide\n\n## How To Play In Unity?\n\n1. 打开 SinglePlayer 场景\n2. 点击播放按钮\n3. 根据屏幕上的键位提示进行游戏\n\n## Asset Management\n\n在编辑器下支持两种资源加载模式：\n\n* 从 `AssetDatabase` 加载（适合开发时使用，不需要构建 `AssetBundle`，对资源的修改立即生效）\n\n* 从 `AssetBundle` 文件中加载（适合测试时使用，需要构建 `AssetBundle`）\n\n两种模式只需要在 Unity 菜单栏 `Minecraft-Unity/Assets/Load Mode` 中切换即可，它们共享同一套 API，上层逻辑不需要在意。\n\n代码示例：\n\n```c#\n// 首先，确保场景中有挂载 AssetManagerUpdater 组件，并设置了相关属性，或者自己已经手动初始化了 AssetManager.\nusing Minecraft.Assets; // 全在这个命名空间里.\n\nclass Example : MonoBehaviour\n{\n    // 直接保存资源的路径，如：Assets/MyFolder/MyAsset.asset.\n    public string AssetPath;\n\n    // 保存资源的“地址”（推荐）.\n    // 在 Inspector 中，这个字段和普通的 Object 引用没有任何区别.\n    // 内部保存了资源的 GUID，也就是说即使资源位置被移动、名称被修改，引用仍然不会丢失！\n    public AssetPtr Asset;\n\n    private IEnumerator Start()\n    {\n        // 全异步架构.\n        // 不需要关心资源具体在哪个 AssetBundle 中.\n        AsyncAsset asset = AssetManager.Instance.LoadAsset\u003cGameObject\u003e(Asset); // 也可以用 AssetPath.\n        yield return asset; // 等待资源加载完成.\n\n        GameObject go = asset.GetAssetAs\u003cGameObject\u003e(); // 获取具体的对象.\n\n        // do something.\n\n        AssetManager.Instance.Unload(asset); // 卸载资源.（这里也可以用资源的名称来卸载）\n    }\n}\n```\n\n上面的示例只是最基本的使用，更多 API 就请看源码吧（毕竟这个不是重点）。\n\n构建 `AssetBundle`：在 Unity 菜单栏中点击 `Minecraft-Unity/Assets/Build AssetBundles` 就行了，会自动打包为当前发布平台的资源包，然后放到指定路径。\n\n\n\n## Configuration\n\n方块数据、物品数据（暂时还没用）、生物群系数据都在一个自定义的编辑器中进行配置。\n\n在 Unity 菜单栏中点击 `Minecraft-Unity/MC Config Editor` 即可打开，界面如下图：\n\n\n\n![编辑器-方块](EditorRecordings/mc_config_editor_block.png)\n\n\n\n![编辑器-物品](EditorRecordings/mc_config_editor_item.png)\n\n\n\n![编辑器-生物群系](EditorRecordings/mc_config_editor_biome.png)\n\n\n\n### Tips\n\n1. 工具栏左边的下拉菜单可以切换当前编辑的数据（Blocks / Items / Biomes）\n2. 点击工具栏上的 加号 或者 减号 可以 添加 或者 删除 一个数据项（Block / Item）\n3. 工具栏右侧从左往右分别是：搜索框、保存按钮、设置按钮\n4. 点击设置按钮可以修改配置文件的保存路径，在一开始用的时候记得先把保存路径设置好\n5. 我做好的配置文件都保存在：`Assets/Minecraft Default PBR Resources/Tables/Configs`\n6. 如果你不想另起炉灶的话，在刚打开这个编辑器后就把路径设置为第5条中的路径\n7. 保存的配置文件有一大坨，其中文件名前加了 `[editor]` 的都是只在 Unity Editor 下使用的\n8. 如果想知道第7条中提到的文件有啥作用的话，请看源码吧，这里空间太小，我写不下（费马行为）\n9. 如果还有啥问题就提个 issue 问我吧，我想不出来了\n\n\n\n## Lua Codes\n\nLua 代码我都放在了 `Assets/Minecraft Default PBR Resources/Lua Scripts` 路径下。其中 `main.lua` 作为 Lua 代码的 Entry Point，`cleanup.lua` 用来释放资源。如果想修改这些设置，可以在 Hierarchy 中找到 `Lua Manager` 来修改。\n\n`Minecraft.Lua` 命名空间下提供了 `ILuaCallCSharp`、`ICSharpCallLua`、`IHotfixable` 这些空接口，相信熟悉 xlua 的人马上可以看懂。举个栗子，实现 `ILuaCallCSharp` 这个接口，等于给类打上了 `XLua.LuaCallCSharpAttribute`。\n\n\n\n### Write Custom Block Behaviours\n\n首先，创建一个 Lua 文件，然后设置好它的 AssetBundleName。\n\n然后，这里先以沙子为例：\n\n```lua\nrequire \"block\" -- 引入这个模块，这里定义了方块行为的 API\nlocal gravity = require \"blocks.templates.gravity\" -- 引入我提供的一个行为模板，这里用的是重力的模板\nsand = create_block_behaviour(gravity) -- 直接继承，完成\n-- 注意：sand 这个变量一定要是 global 变量，而且名字要和之前在编辑器配置的名称一致\n```\n\n写完以后，别忘记在 `main.lua` 里 `require` 一下。最后再提一下 `block` 这个模块，先看下简短的源码：\n\n```lua\n-- 文件路径：Assets/Minecraft Default PBR Resources/Lua Scripts/block.lua\n\nlocal behaviour = {} -- 默认行为\n\n-- 方块行为被注册时调用\nfunction behaviour:init(world, block)\n    self.world = world\n    self.__block = block\n    print(\"init block behaviour: \" .. block.InternalName)\nend\n\n-- 边上的方块刷新时调用\nfunction behaviour:tick(x, y, z)\n    -- default implement\nend\n\n-- 方块被放置后调用\nfunction behaviour:place(x, y, z)\n    -- default implement\nend\n\n-- 方块被破坏后调用\nfunction behaviour:destroy(x, y, z)\n    -- default implement\nend\n\n-- 方块被点击后调用\nfunction behaviour:click(x, y, z)\n    -- default implement\nend\n\n-- 方块实体初始化时调用\n-- entity 参数就是方块实体对象\n-- context 参数就是一个 LuaTable，可以用来保存一些临时数据（切勿直接 self.xxx = xxx）\n-- 下同\nfunction behaviour:entity_init(entity, context)\n    -- default implement\nend\n\n-- 方块实体被销毁时调用\nfunction behaviour:entity_destroy(entity, context) \n    -- default implement\nend\n\n-- 方块实体的 Update 方法\nfunction behaviour:entity_update(entity, context)\n    -- default implement\nend\n\n-- 方块实体的 FixedUpdate 方法\nfunction behaviour:entity_fixed_update(entity, context)\n    -- default implement\nend\n\n-- 方块实体被碰撞时调用\n-- flags 参数就是 UnityEngine.CollisionFlags\nfunction behaviour:entity_on_collisions(entity, flags, context)\n    -- default implement\nend\n\n-- 获取该行为对应的 BlockData 对象\nfunction behaviour:get_block_data()\n    return self.__block\nend\n\n--- 创建一个方块行为对象。\n---\n--- 如果不传入 `base` 参数，返回的对象将具有默认行为。\n---\n--- 如果传入 `base` 参数，返回的对象将会继承 `base` 的所有行为。\n---\n--- @param base? table\n--- @return table\nfunction create_block_behaviour(base)\n    return setmetatable({\n        base = base or behaviour\n    }, {\n        __index = function(table, key)\n            local block = rawget(table, \"__block\")\n            return block and block[key] or rawget(table, \"base\")[key]\n        end\n    })\nend\n```\n\n这个模块允许我们像定义一个类一样去定义方块行为，非常方便。另外，我提供了 `blocks.templates.gravity` 和 `blocks.templates.fluid` 两种模板，用于快速实现重力和流体的行为。如果要实现更复杂的行为，就要自己写代码了。\n\n\n\n## Terrain Generation\n\n在 `Assets/Minecraft Default PBR Resources/WorldGen` 路径下保存了许多地形生成相关的配置文件，可以自己修改参数、增加生成器来改变地形。\n\n\n\n# End\n\n如果还有问题就提一个 issue 吧，我看到后会回复的。\n\n\n\n# References\n\n**排名不分先后**\n\n* [TrueCraft](https://github.com/ddevault/TrueCraft)\n* [xLua](https://github.com/Tencent/xLua)\n* [MineCase](https://github.com/dotnetGame/MineCase)\n* [MineClone-Unity](https://github.com/bodhid/MineClone-Unity)\n* [MinecraftClone](https://github.com/Shedelbower/MinecraftClone)\n* [Making a Minecraft Clone](https://www.shedelbower.dev/projects/minecraft_clone/)\n* [Minecraft_Wiki](https://minecraft-zh.gamepedia.com/Minecraft_Wiki)\n* [炒鸡嗨客协管徐的CSDN博客](https://blog.csdn.net/xfgryujk)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstalomeow%2FMinecraftClone-Unity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstalomeow%2FMinecraftClone-Unity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstalomeow%2FMinecraftClone-Unity/lists"}