我的世界命令方块普通disco作品展示与制作原理
小编为大家带来了《我的世界》命令方块普通disco作品展示与制作原理,乙烯_中国的命令方块简直是牛爆了啊,这里我们先来看看这次为大家带来了这个普通Disco In Minecraft。
其实吧,这个作品的结构非常简单粗暴,差不多就是图中这三个命令方块,其中命令结构基本如下
tp @a ~ ~ ~1
复制代码
clone ~1 ~ ~ ~1 ~ ~ ~1 ~ ~1 replace move
复制代码
这俩是移动玩家和传送信号(红石块),其实这里不得不说一句,这里完全可以不tp玩家的,但是呢,由于不加上这个看上去实在是没有mc的感觉,所以你们在视频背后看到的“cb在抖动”是因为mc在不停的tp玩家。
然后传送信号保证了每tick播放一帧。
接下来是核心命令。
/replaceitem entity @a slot.weapon.offhand minecraft:diamond_axe 1 3
复制代码
损害值不停的改变。
这里应用的是1.9不同损害值的物品能够被附上不同的材质的特性。所以其实真正的名堂在资源包内部。
这个地图用了总大小大约为150MB的三个资源包。是的,三个。为啥会变成这么纠结的情况呢,我本来呢,资源包的大小是一个0.5GB大小的文件,但是MC并带不动。于是在不停的尝试下做出了这种妥协。每个资源包所代替的为单独的一把钻石工具。每个工具有1560帧。这也是为什么你会在视频里看到有三排单元的原因。
那么现在来解包这个资源包,我们来看一下我是怎么做出这样的效果的。首先呢,我们需要一个资源包。【什么鬼
我们如果要在mc里面播放视频的话我们就需要视频,那么我们需要把视频拆成每帧的图,最好还是20fps的,那么其实呢,这种软件很方便的,网上一搜大的小的有源码没源码的都有,我就不在这里班门弄斧了。
这里是拆成图的视频。
那么如果我的视频是30fps呢,那我需要怎么办呢。这解决办法是很简单的。
这么一划拉,然后选中删除1/3就好了。
强行20fps。恩
然后我们又要注意一件事,这些图片的格式都是jpg,而且长宽并不是是2的指数。所以我们需要转换格式,教程请自行百度Photoshop批处理,讲的绝对比我详细。
那么这里我们准备好了材质,那么我们是不是该准备模型了呢?
那么我的模型使用的是什么呢?是修改物品拿在手里的模型,实现玩家拿到屏幕的效果,相信类似的效果大家也见识过吧,比如盘灵古域里面的金箍棒。而玩家手持屏幕这种效果我也并非首创,不过闲到像我这么用的估计没几个。。。
这里是json代码。
{
"__comment": "ethylene_china",
"textures": {
"texture": "blocks/disco (1)"
},
"elements": [
{
"from": [ 18, 4, 6 ],
"to": [ 19, 21.5, 23.5 ],
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture"}
}
}
],
"display": {
"firstperson_lefthand": {
"rotation": [ 0, -90, 0 ],
"translation": [ 5.1, 7.75, -6.05 ],
"scale": [ 0.44, 2.02, 2.08 ]
}
}
}
复制代码
这里的代码就是刚好能够实现一个基础的手持屏幕。
这里是效果。
这里使用了材质丢失的贴图以便于读者体会这个屏幕在屏幕中的大致位置。
很显然中间这个位置并不是和指针对齐的,相反,差了很多。而且我的UV写的是一个完整的贴图,那么我为什么要这么做呢?
答案很简单,因为mc的机制,一般玩家都会注意到有这样的一个动画——物品的拾起。那么如果物品模型是现在这样的话,这个动画效果是怎样的呢?
答案我就不截动态图了,是一个物品模型向上移动的过程,而大家应该也知道,我这个模块是20fps的视频,很明显我们不能让屏幕抖动,而实际操作过程也确实实现了这点。
那么一旦工作起来,这个模型就会显示这样的效果。
对齐的非常完美。
那么这里我们解决了单帧的问题,那么我们需要将其整合起来了。
这是一个整合的例子。
{
"parent": builtin/generate",
"textures": {
"layer0": "items/apple"
},
"overrides": [
{ "predicate": { "damaged": 0, "damage": 0.000640615 }, "model": "item/disco1"},
{ "predicate": { "damaged": 0, "damage": 0.00128123 }, "model": "item/disco2"},
{ "predicate": { "damaged": 0, "damage": 0.001921845 }, "model": "item/disco3"},
{ "predicate": { "damaged": 0, "damage": 0.00256246 }, "model": "item/disco4"},
{ "predicate": { "damaged": 0, "damage": 0.003203075 }, "model": "item/disco5"},
…
{ "predicate": { "damaged": 0, "damage": 0.9993594 }, "model": "item/disco1560"}
]
}
复制代码
别的大家应该都耳熟能详了,其中的damage后面的数字是1/1561的倍数,其正好锁定了每个损害值都拥有其自己的材质。这个json对应着1560个单独的模型文件。
查看所有0条评论>>