cs:source吧 关注:1,538贴子:16,057
  • 2回复贴,共1

CSGO制图经验分享3 - 用Hammer实现骰子的功能

只看楼主收藏回复

在不使用logic_case实体或者VScript脚本的随机数函数的情况下,有没有办法只靠Hammer的物理功能来模拟乱数呢?最广为人知的乱数模拟器当然是骰子了,抱着试一试的心理,我就做出了这个模拟骰子的地图。


IP属地:福建1楼2018-04-01 23:33回复
    这个经验并不只适用于CSGO,其他用Source引擎制作的V社的游戏理当也适用。但是,因为有的游戏不支持VScript所以最终对于骰子点数的利用方式会有不同。
    在地图中,在任意时间,对着按钮按下E,骰子便会停止旋转从空中落下,按下按钮的4秒之后,墙上的文字会显示出骰子的点数。结合I/O事件,可以写出别的花样,具体请各位自行脑补,我只分享骰子的实现方法。
    如图,首先现在地图的适当高度上放上一个骰子。我的骰子由func_physbox加上六个面的贴图制成。骰子的点数是1对6,2对5,3对4。

    然后,在骰子的每个面外侧加上一层薄薄的(厚度为1就够了)的func_physbox作为点数的标记。如图,比如该面是1点的话,就把触发器的targetname改成brush1(或者你喜欢别的targetname也可以,但是要具有唯一性)。如果该面是2点的话,就把薄层的targetname改成brush2,以此类推。注意,记得将每个薄层的parent设置为骰子实体(dice)本身。还有,薄层一定要为固态!

    然后,以骰子实体为中心,创建两个大小相同的func_rotating实体。将第一个旋转实体命名为rot1并且将其作为骰子实体(dice)的parent。将第二个旋转实体命名为rot2,将rot2作为rot1的parent。将2个旋转实体的最大旋转速度都设置为500,然后在rot1的spawnflags中勾选【Start ON】、【X Axis】、【Y Axis】、【Not Solid】,在rot2的spawnflags中勾选【Start ON】、【Not solid】。最后,将dice的parent设置为rot1。(这两个旋转实体的作用是使得骰子在落下之前不断旋转,从而使得骰子点数不可知)。

    然后,如图,在骰子下方的地板上铺上一层薄薄的trigger_multiple,命名为trigger,高度为1或者2,然后在x/z视图中,使得trigger的顶部与地面完全重合。trigger的spawnflags勾选【Physics Objects】,并将class info中的“Start Disabled”勾选为Yes。这个trigger是骰子点数的探测器。如果怕被误触发的话,可以加个targetname过滤器。

    如图,然后在地图中创建一个logic_script实体,脚本的关联方法这里不再赘述,脚本文件内容如下图。前面说了1对6,2对5,3对4,所以可以通过探测骰子的着地面的点数来推知骰子的顶面的点数。


    然后,在地图的墙上创建一个point_worldtext实体,作为点数的显示器,如图。

    之后,在地图上创建一个func_button实体,flags记得勾选【Don't move】,其Outputs如下图。

    最后,将刚刚的trigger的Outputs设置成下图的样子,就完成了。然后编译地图即可。当然,如果你只是单纯想要获得乱数而不是游戏性的话,直接用logic_case或者VScirpt的随机数函数会更方便。


    IP属地:福建2楼2018-04-01 23:41
    回复
      好评


      IP属地:广东3楼2018-05-14 16:17
      回复