• 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 也不会改变射线的发射方向

  • 相关阅读:
    字符串匹配的KMP算法
    附加数据库出错
    SQL Server 2005
    OpenFileDialog对话框Filter属性
    flink run 报错java.lang.NoSuchMethodError: org.apache.hadoop.ipc.Client.getRpcTimeout(Lorg/apache/hadoop/conf/Configuration;)I
    修改cdh5集群中主机节点IP或hostName
    oracle 自增序列 在 mybatis中应用
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    java远程连接hadoop,kerbers认证失败 报no supported default etypes for default_tkt_enctypes
    hive distribute by sort by 去重
  • 原文地址:https://www.cnblogs.com/reluctante1/p/12719734.html
Copyright © 2020-2023  润新知