zoukankan      html  css  js  c++  java
  • UE4复习4_射线检测

    假如游戏中有一个需要我们进行交互的物体,可以通过射线检测来判断角色与改物体是否满足条件(比如面向它且在一定距离之内)

    首先创建了一个雕像,并且添加了两个粒子系统,smoke和fire,还有一个旋转的text。

    当我们靠近该雕像且正视它时,按鼠标左键会使得smoke,fire,text被激活。

    雕像的蓝图:

     

      

     雕像的蓝图如上,游戏开始时smoke,fire,text都是不可见的。

    写了一个函数active all,如果传入值是true,那么会将三者的值改为可见,且将控制text 是否旋转的text rotate布尔值也修改为true。

    然后就是射线检测了,思路是首先需要在角色身上创建一个插槽作为射线的起始点,然后在将control rotation的作为视角方向。

    这样发出的射线起始点为插槽,终点为 control rotation的vector * 长度 +插槽起始点。步骤如下:

    在角色的骨骼里找到head,并且创建一个插槽,命名为socket_head;(如图,可以通过控制柄来自定义插槽的位置,不一定非在头上)

    在角色蓝图中右键trace,会发现许多射线检测的函数,这里使用的是 line trace by channel;

    通过上述确定了射线的起始点和终点,这里射线的长度为400;输出的是布尔值是射线是否被阻挡,如果被阻挡,强制转换阻挡射线的物体为statue,如果转换成功,说明是雕像阻挡了射线,再调用它的active all函数将smoke,fire,text激活。

     刚进入游戏是这样的:

     靠近并点击鼠标左键后被激活:

    注意因为法线选择的是control rotation,所以我们必须将屏幕中心点对准该雕像才有用。

    法线也可以选择其他方向。比如下面这个,是以鼠标在场景中的三维坐标为起点,方向为该点到摄像机

     我们也可以把 draw debug type 打开,这样就能看到射线的具体位置了。

    再比如这样些,使法线的方向一直为角色的forward方向,这样即使我们旋转control 也不会改变射线的发射方向

  • 相关阅读:
    2015/11/2用Python写游戏,pygame入门(2):游戏中的事件和显示
    2015/11/1用Python写游戏,pygame入门(1):pygame的安装
    2015/10/13 算法习题:最大子列和问题
    2015/10/9 Python核编初级部分学习总结
    2015/10/9 Python基础(21):可调用和可执行对象
    2015/9/29 Python基础(20):类的授权
    2015/9/28 Python基础(19):类的定制和私有性
    2015/9/22 Python基础(18):组合、派生和继承
    2015/9/21 Python基础(17):绑定和方法调用
    MVC 依赖注入
  • 原文地址:https://www.cnblogs.com/reluctante1/p/12719734.html
Copyright © 2011-2022 走看看