这个经验并不只适用于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的随机数函数会更方便。
