自定义模型完整指南 |
您所在的位置:网站首页 › 我的世界自定义模型模组手机版 › 自定义模型完整指南 |
注意!本文档已严重过时!教程请以最新WIKI为准http://page.cfpa.team/ysm/zh/m/ysm/zh/ 我实在是没时间更新了,见谅! 本文档原作者酒石酸菌。 Yes Steve Model 模组主模型⽂件命名必须为 main.json 。其使⽤的动画⽂件进⾏了标准化设计,只需要按照特定的布局 ⽅式来制作,即可⾃动兼容。在运⾏游戏后,游戏主⽬录下的 config\\yes_steve_model\\custom\\default ⽂件夹下会⾃动⽣成模型标准模型和动画文件,你可以在其基础上进⾏⼆次修改和分发。 如何制作自定义模型 因为社群中模型命名标准不一,故统⼀对模型命名进⾏规范。 当然,你可以不遵守这些标准,模型依旧可以安全加载,但是将会无法正常使用默认动作,当然你可以自己制作适配自己模型的动画。 1.格式规范 ①.书写格式 组名应该全部采⽤⼤写驼峰式,并采⽤规范英⽂单词描述,按照 形容词 + 名称 形式进⾏组合,⽰例如下: 左⼿臂: LeftArm 整个头部: AllHead ②.简洁原则 命名应该尽可能使⽤简洁易懂的英⽂单词,⽰例如下: 表⽰ 整个 使⽤ All ⽽不是 Whole ,因为前者更加简洁 表⽰ 眼睛 使⽤ Eyes ⽽不是 HeadEyes ,因为 眼睛 肯定处于 Head 分组中,⽆需强调 ③.⽆意义分组 部分模型中为了⽅便旋转,位移。对部分模型进⾏了分组,但并不附加动画和其他操作,可使⽤ ⽗类 + 数字编号 的⽅式命 名,⽰例如下: 某 Mouth 分组为了模型制作⽅便,设置了多个分组,但并没有特定的意义,也没有动画。可将其命名为 Mouth1 , Mouth2 , Mouth3 等 ④.特定组名 某些特定组名不允许更改,否则会导致游戏部分内容⽆法正常显⽰: 组名说明Head游戏会默认添加头部随视⻆摆动的动画LeftHand LeftHandLocator左⼿⼿持物品的定位组 LeftHandLocator 必须位于 LeftHand ⾥⾯ 由 LeftHandLocator 的旋转点定位⼿持物品 RightHand RightHandLocator 右⼿⼿持物品的定位组 RightHandLocator 必须位于 RightHand ⾥⾯ 由 RightHandLocator 的旋转点定位⼿持物品2.第⼀⼈称视⻆⼿部模型的制作 第⼀⼈称视⻆的⼿部模型必须命名为 arm.json ,可通过主模型⼆次修改获得该⽂件,它与主模型共⽤⼀套贴图。其制作⽅法 可参考如下步骤: 1. 将主模型⽂件复制⼀份; 2. 找到 LeftArm 和 RightArm 分组,将其复制到根⽬录下; 3. 删除整个 Root 分组; 4. 粘贴刚刚复制的 LeftArm 和 RightArm 分组; 5. 将 LeftArm 和 RightArm 分组的 X Y Z 旋转⻆度均修改为 0(内部分组不需要修改,修改后⼿臂应为垂直向下)。 我们还为⼿部模型添加了背景显⽰功能,在根⽬录下创建名为 Background 名字的分组,游戏将会在第⼀⼈称视⻆时将这个分 组渲染为背景。不受玩家⼿持物品、使⽤状态的影响。 最后,你做好的模型在 Blockbench ⾥⾯看起来应该是这样的:
3.贴图⽂件的制作 材质使⽤ png 格式材质,不建议使⽤半透明贴图,这会造成各种渲染错误; 材质⽂件名只能使⽤ ⼩写英⽂字符、数字、下划线 等字符,其他没有限制; 模型⽀持多个贴图,你可以放置若⼲份贴图⽂件,游戏均会智能识别 4.动画⽂件的制作 动画⽂件是可选选项。没有动画⽂件,或者缺失部分动画时,游戏均会智能调⽤默认的动画⽂件。如果你的模型是按照默认模型 ⼆次修改的,那么即可完美兼容。 游戏内只有⼀个动画是代码添加的,不可修改: 头部随⿏标摆动的动画:智能识别 Head 分组添加的动画 如果你不喜欢这个代码控制的动画,只需要将头部分组起个其他的名字即可 如下动画是⾃定义的主动画,放置于 main.animation.json ⽂件中,可进⾏⼆次修改: 名称作用备注walk 在玩家普通行走时的动画 循环播放 run 在玩家疾跑时的动画 循环播放 climbing 玩家在活板门下的动画 循环播放 sneaking 玩家潜行 ,但不移动时的动画 循环播放 sneak 玩家潜行 ,并且行走时的动画 循环播放 swim 玩家游泳时的动画 循环播放 swim_stand 玩家在水中站立式游泳的动画 循环播放 attacked 玩家被攻击时的动画 单次播放 jump 玩家离开地面时的动画 飞行和跳跃都调用此动画 ,循环播放 fly 玩家在鞘翅飞行时播放的动画 循环播放 boat 玩家坐在船上时的动画 循环播放 use_righthand 玩家使用右手时播放的动画 单次播放 use_lefthand 玩家使用左手时播放的动画 单次播放 sleep 玩家睡觉时的动画 循环播放 ride 玩家骑马 (驴) 时的动画 循环播放 ride_pig 玩家骑猪时的动画 循环播放 sit 玩家坐下时的动画 循环播放 idle 无任何操作时的动画 循环播放 以下是八个并行动画 ,并行动画与主动画互相独立 ,也放置于main .animation .json文件中。用于制作那些无论在什么情况下均会播放的内容:尾巴、耳朵的摆动 ,眨眼动画等等。 名称作用备注parallel0 parallel2 parallel4 parallel6 parallel1 parallel3 parallel5 parallel7 与主动画互相独立 ,同时播放 循环播放
以下动画是八个额外动画 ,额外动画需单独放置于 放:extra .animation .json 文件中 ,这些动画会在使用动画轮盘时进行播 名称作用备注 extra0 extra2 extra4 extra6 extra1 extra3 extra5 extra7 使用动画轮盘播放对应额外动画 依据动画文件设定的循环类型进行播放
注意:并行动画优先级高于主动画 ,如果主动画和并行动画同时操作了同⼀个骨骼 ,那么并行动画将会覆盖主动画。 MoLang 语法拓展和介绍 MoLang 是 mojang 官⽅为基岩版动画设计的⼀种极其简单的语⾔,我们可以通过 MoLang 实现各种复杂的动画。 为了更加清晰的说明什么是 MoLang,以及理解它的机制,我们从基岩版动画的机制说起。 基岩版动画的机制⾮常简单,在不同的时间点新建关键帧,设定某个组件的位置/旋转/缩放。当开始播放动画时,程序就会⾃动计算出补间动画,使组件从某个地⽅移动/旋转/缩放到另⼀个地⽅,从⽽做出动画的效果。 我们给每个关键帧设置的是⼀个具体的数字,决定了播放到此关键帧时,组件所处的位置/旋转的⻆度/缩放的⼤⼩: 但是⼀些特殊情况下,这个数字不⼀定是固定的。⽐如我们期望玩家⼿持物品时摆动⻆度为 30 度,但空⼿时摆动⻆度为 60 度,这时我们就可以使⽤ MoLang 表达式了。 ⼀个常⽤的动画设计是显⽰/隐藏模型,⽐如我们期望在玩家穿戴头盔时,显⽰头盔组件。我们可以使⽤缩放功能来隐藏组件,当 组件的 X Y Z 缩放均为 0 时,该组件就被隐藏了,所以我们可以在 BlockBench ⾥⾯这么写: 这⾥的 ysm.has_helmet 就是⼀个 MoLang 参数,它会在玩家穿戴头盔时返回数字 1,⽽在没有穿戴头盔时返回数字 0, 正好做到了我们想要的隐藏/显⽰功能。 ⼀直以来,⻓发模型是⼀个极为头疼的问题。当玩家抬头时,⻓⻓的头发就会随头转动,直戳戳的穿⼊玩家的⾝体内。我们也可 以⽤ MoLang 来巧妙的解决这个问题。思路如下: 1. 当玩家仰头时,头发不再随头转动,⽽是垂直向下(也就是头发旋转⻆度与头部正好相反,互相抵消) 2. 当玩家俯看时,头发随头转动(也就是旋转⻆度为 0) 那么我们就可以这样书写 MoLang 参数: 我们来逐条介绍这个参数的意思: 这是⼀个条件式的写法,它的格式是这样写的 判断条件 ? 如果符合时返回的结果 : 如果不符时返回的结果 (ysm.head_pitch > 0) :判断条件。玩家俯仰的⻆度是 -90 度到 90 度,这⾥判断玩家俯仰的⻆度是否⼤于 0 度,⽤ 括号括更加直观。 -ysm.head_pitch :当玩家俯仰⻆度⼤于 0 时(也就是抬头时),我们特意取反,把头发旋转⻆度抵消回去。 0 :当玩家俯仰⻆度⼩于 0 时(也就是俯视时),我们将其变成 0,这样头发就会随头旋转。 当然,MoLang 本⾝还有更为复杂的⽤法,这⾥我们暂时不再赘述。 我们在下⽅列举出本模组添加的各种变量,你可以⽅便的制作出各种动画: 参数名作用数值ysm.head_yaw玩家头部面向的角度(左右)-80到80ysm.head_pitch玩家头部俯仰的角度(上下)-90到90ysm.has_helmet玩家是否穿戴头盔穿戴时为1,否则为0 ysm.has_chest_plate 玩家是否穿戴胸甲穿戴时为1,否则为0ysm.has_leggings玩家是否穿戴护腿穿戴时为1,否则为0ysm.has_boots玩家是否穿戴靴子穿戴时为1,否则为0ysm.has_mainhand玩家主手是否持有物品有物品时为1,否则为0ysm.has_offhand玩家副手是否持有物品有物品时为1,否则为0ysm.is_close_eyes 玩家是否应当闭眼(用于眨眼和睡觉) 当闭眼时为1,不闭眼时为0 ysm.is_passenger玩家是否骑乘某个实体骑乘时为1,否则为0ysm.is_sleep玩家是否处于睡觉状态睡觉时为1,否则为0ysm.is_sneak玩家是否处于潜行状态潜行时为1,否则为0ysm.armor_value玩家护甲值0到20ysm.hurt_time玩家受伤值当玩家受伤时此值为正数,否者为0 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |