这个经验并不只适用于CSGO,其他用Source引擎制作的V社的游戏理当也适用。但是,因为有的游戏不支持VScript所以最终对于骰子点数的利用方式会有不同。
在地图中,在任意时间,对着按钮按下E,骰子便会停止旋转从空中落下,按下按钮的4秒之后,墙上的文字会显示出骰子的点数。结合I/O事件,可以写出别的花样,具体请各位自行脑补,我只分享骰子的实现方法。
如图,首先现在地图的适当高度上放上一个骰子。我的骰子由func_physbox加上六个面的贴图制成。骰子的点数是1对6,2对5,3对4。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=f3ae457fa0af2eddd4f149e1bd110102/f496b9a1cd11728bc2b7b75bc4fcc3cec2fd2c42.jpg)
然后,在骰子的每个面外侧加上一层薄薄的(厚度为1就够了)的func_physbox作为点数的标记。如图,比如该面是1点的话,就把触发器的targetname改成brush1(或者你喜欢别的targetname也可以,但是要具有唯一性)。如果该面是2点的话,就把薄层的targetname改成brush2,以此类推。注意,记得将每个薄层的parent设置为骰子实体(dice)本身。还有,薄层一定要为固态!
![](http://imgsrc.baidu.com/forum/w%3D580/sign=8e76901803b30f24359aec0bf894d192/7c783e6d55fbb2fbb6e9636b434a20a44723dc1b.jpg)
然后,以骰子实体为中心,创建两个大小相同的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。(这两个旋转实体的作用是使得骰子在落下之前不断旋转,从而使得骰子点数不可知)。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=0ad1798fabefce1bea2bc8c29f51f3e8/a45d3adbb6fd52664a28066da718972bd50736d9.jpg)
然后,如图,在骰子下方的地板上铺上一层薄薄的trigger_multiple,命名为trigger,高度为1或者2,然后在x/z视图中,使得trigger的顶部与地面完全重合。trigger的spawnflags勾选【Physics Objects】,并将class info中的“Start Disabled”勾选为Yes。这个trigger是骰子点数的探测器。如果怕被误触发的话,可以加个targetname过滤器。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=c6f1c5c969380cd7e61ea2e59145ad14/b29c334e251f95caa747a8cfc5177f3e660952aa.jpg)
如图,然后在地图中创建一个logic_script实体,脚本的关联方法这里不再赘述,脚本文件内容如下图。前面说了1对6,2对5,3对4,所以可以通过探测骰子的着地面的点数来推知骰子的顶面的点数。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=524cbbc6805494ee87220f111df4e0e1/b2bdd70735fae6cdda1b911803b30f2443a70fb5.jpg)
![](http://imgsrc.baidu.com/forum/w%3D580/sign=1a34322459fbb2fb342b581a7f4b2043/0ab8ba389b504fc296b88a7ce9dde71191ef6d7d.jpg)
然后,在地图的墙上创建一个point_worldtext实体,作为点数的显示器,如图。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=e80c8794ad44ad342ebf878fe0a20c08/f45ea486c9177f3e1e26d9747ccf3bc79e3d56ca.jpg)
之后,在地图上创建一个func_button实体,flags记得勾选【Don't move】,其Outputs如下图。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=2a652194afcc7cd9fa2d34d109002104/e887718b4710b9124e36cc87cffdfc039345226d.jpg)
最后,将刚刚的trigger的Outputs设置成下图的样子,就完成了。然后编译地图即可。当然,如果你只是单纯想要获得乱数而不是游戏性的话,直接用logic_case或者VScirpt的随机数函数会更方便。
![](http://imgsrc.baidu.com/forum/w%3D580/sign=248ca2fedca20cf44690fed746094b0c/429fca3d70cf3bc7e233e895dd00baa1cd112a29.jpg)