夏令营补给 05 | 模型相关难点,其实真的很难

网易游戏学院

2021-08-182087次浏览

0评论

1收藏

1点赞

分享

《我的世界》高校开发者夏令营进行中!为了让大家更系统地学习,除课堂知识外,学院君还将联合发发菌,为大家投放额外的干货补给。本期为第5期。

有的开发者表示,在制作自己的模组时,一些最头痛的问题往往来自模型:去除贴图闪烁、计算序列帧播放时间、计算rot……

今天的重难点笔记中,学院君和发发菌将通过经典实例来解答这些让人头大的难题!

 Q1  生物贴图闪烁如何处理?

去除在模型内两面完全重叠的面,且不要制作太多细节。

 Q2  “原版中可以设置子类物品,点开物品可以查看下级物品”这种需求怎么实现?

需要到1.16(下界更新)有可能可以做,但也只是放到原版的堆叠区,还不能自定义。中国版暂时没有开放过类似的接口来做,替换原版贴图(等于一种材质包的效果)。

 Q1  如何将inflate膨胀模型挂载到玩家身上?

首先可以添加新的render_controller,然后挂载新的模型到玩家身上。每个render_controller都有自己的geometry、material、texture,需要自定义挂载上去就好了。

 Q2  如下情况有没有方法优化?

模型只能设置成1格所占大小,但模型可能会大于1格,这就会导致放置两个方块会有重合问题。

有开发者的组件里做过占多个方块位置的方块模型,是用生成空方块来占位的,所以还是得需要一个空方块来占位置,collision还是得写。

 Q3  Blockbenck模型是如何通过Python播放相应动作动画的?如何实现普攻和技能这方面的动画效果?

用queryVariable,首先需要自制一个自定义生物,并且尝试添加动画上去,与行为搭配一起,达到你想要的效果。

queryVariable具体用法能说一下吗?自定义生物用Blockbenck模型,能实现对于同一个生物切换不同的Blockbenck模型吗?类似于同种生物实现不同状态模型。3DMax可以通过切换模型骨骼来实现吗?Blockbenck这块不太清楚如何实现。

首先要在玩家客户端加载后,register一个query.mod.xxx的变量,假设已经拿到了生物ID,需要广播给全部客户端,然后queryComp.Set这个query变量为真,打开一个timer,和做的动画时间长度一样,然后动画播放结束时timer再把这个query设置为假,再然后回到client_entity材质文件中,在scripts: {animate: [anim_name: query.mod.xxxx]},当动画满足这个变量为真时就播放。所以因此需要把动画的loop设置为true,并且如果这个动画要覆盖掉之前其他的动画,还需要在动画文件里将override_previous_animation也设置为true。

https://bedrock.dev/docs/1.14.0.0/1.14.30.51/Animations(复制到浏览器打开)这个网站有非官方收集的文档,很详细,覆盖很多概念。例如,你有一个平时会一直播放的休息动画,但是当一个生物在施法时,你不希望这个休息动画还在播,就得用到override_previous_animation,它会覆盖掉之前所有动画,把生物骨骼全部设置回原点,然后播放这个施放动画。

同个生物切换Blockbenck模型也是通过queryVariable吗?也是和动作一样在scripts里进行相关定义吗?

对的,同样的可以在render_controller里做,render_controller是管理自定义生物渲染资源的中继器。三元运算符是比较常见的,如果要有好几个模型的话,可能需要写的比较长,比如大部分没有这么极端的现象,所以手写就好了,不然就是写个脚本输出成字符串出来粘贴上去。

 Q4  策划案中我们想把“物理学圣剑”做成有实体模型的不是贴图的那种,有方法能够实现么?

解决方案1:
https://wiki.bedrock.dev/tutorials/custom-item-models#3d-item-models

解决方案2:
http://mc.163.com/mcstudio/mc-dev/【ModSDK模组开发→资源制作→模型和动作→骨骼模型的使用】(以上链接请复制到浏览器打开)

此方法可以用这里说的“第一人称模型",但需要玩家替换成fbx模型。

 Q5  特效怎么制作物理拉长的效果?

比如射出去的是道“光束”不是一个点。

光束粒子做的光线其实就是在实体模型上绑一个超长方块,可以用一个透明的抛射物(本体:造成伤害)加一个能够匹配上飞行速度的,会把自己scale变长的光线(假生物:只有视觉效果),MCStudio可以做光束那样的粒子,绑定在抛射物身上。

 Q6  原版特效大小可以调么?

因为boss比较大,希望特效能搭配一下。

原版特效的话,要变大就只能把它的内容抄一遍,然后调整里面的特效大小,再改成自己的名称域的粒子。不然直接修改原版特效的话,如果原版在其他地方应用到这个,马上就会被玩家察觉,从而感到怪异。

如上图所示,大小是这个,可以不写变量,可以直接写数值比如0.25,1.0,2.5。如果不是调整贴图大小而是粒子的发射数量或者初始加速度移动到更大的范围里,那也就要动到这里minecraft:particle_initial_speed,这里可以不写表达式,直接写数字0.25,1.0等。

 Q7  请问这个雪的粒子的密度和雨怎么算?

假如我要写自定义天气,这种粒子在客户端生成的密度是多少?在保证性能的情况下,完成效果。

这跟群系文件里的温度值有关。一般来说可能没有稀疏的雪、稀疏的雨这种概念。只有下雪→下雨→既不下雪也不下雨。

 Q8  ResetFogLength这个接口为什么不是直接恢复成没有雾的情况?

建议尝试重置雾的颜色。

 Q9  CreateEngineParticle可以使用原生的particles文件夹下的粒子吗?

目前我用command播放原生的particles。

这种情况得用particle指令来实现。

 Q10  animationControllers是让生物根据相关行为自动播放相应动画(比如走和攻击等)。如果需要实现定时播放特定动画(比如技能动画)就需要用到queryVariable吗?

是的,需要从Python里获得一个播放动画的开关。

 Q11  想请教下netease:frame_animation组件是否可以控制序列帧的播放间隔时间,如果不能默认的播放速度是多少秒或者tick一帧呢?

不可以。默认的这个要问官方文档策划或通过计算出来。

 Q12  下面这个rot怎么算?

想给Boss做一个技能——毒刃突刺:用毒刃向正前方移动4格突刺,对范围内命中的实体造成15点伤害并获得麻痹效果,无法移动3s,这个位移写法好像是有那个给实体添加速度的接口的,但是没找到,求助一下:已知Boss的pos和玩家的pos,算rot,想问个物理算法(就是boss向着玩家位移)。

这个是给玩家的还是给生物的,生物技能还是玩家技能?如果是给boss的技能,要是不要求太高,获取玩家和boss相对距离再比个权值,就好了。如果直接用addon做的话也不是不行,麻痹效果和无法移动其实可以整合为一个255的缓慢药水效果。组件里rot是用三角函数确定生物正前方,move的组件参数是设置xyz的分速度。当获取了相对坐标,比如10 10 -10,把它设置为0.1 0.1 -0.1就是比了100的权值。这看你想让他飞多远了。

不然就如上图所示这样写吧。这样就是你要朝向的方向了,只要知道xz就行。这个写法是处理一个实体朝它眼睛看的方向飞出去的东西,就是坐标相减最后就会得到一个方向——那就是生物要飞到那个目标的方向。但最好把这个向量换成单位向量,不然会飞出去很远。

以上回答均来自Spcoo境界,感谢他们的细心解答~

今天的重难点笔记复盘就到这里,面对这满满的干货,开发者们有没有感觉制作组件的方法增加很多?赶快去试一试吧!

(本文来源于公众号“我的世界Minecraft开发者”,作者发发菌)


往期回顾

夏令营补给 01 | 你们要悄悄学会改造武器工具,惊艳所有人!

夏令营补给 02 | 如何设计一个优秀的用户界面,让玩家眼前一亮?

夏令营补给 03 | 打破常规,只需一个Add-on!

夏令营补给 04 | 大头滤镜?不,为你的自定义生物加点动画!


网易游戏学院官方讨论QQ群:780916962
欢迎各位同学加群,与众多游戏爱好者一同学习交流~

评论 0

0/1000
网易游学APP
为热爱赋能
扫描二维码下载APP