对话及任务系统3
在Blueprints创建文件夹叫character把玩家蓝图放进去点进玩家蓝图把不需要的东西删除。
再建文件夹lnterfaoe创建blueprint interact蓝图接口点进蓝图接口里面创建三个函数

1.On Ente Player Radius 2.On Leave Player Radius 3.On Interact With,
在建第一个函数是添加变量叫character类型为the third person他的作用是进入玩家半径调用的。第二个函数是离开玩家后调用的同样改变变量和类型为character,the third person。第三个函数是玩家与NPC交互时调用的同样如上。最后编译保存。

复制NPC的蓝图到character打开蓝图进行编译,添加控件命名为NPCinteractwidget,调整你需要它在的位置。

然后这个space要调到screen屏幕,控件类调到之前创建的控件interactwidget,这里调成0

这里取消勾选,意思就是控件重合没有事件发生,只是有个贴图。

然后开始编程,按P左键或右键输入even事件开始运行然后获取我们的NPC控件NPCinteractwidget,然后获取get user object然后要把它转换为我们的刚才那个类也就是Cast To InteractWidget,我的理解是显示我们之前建用户蓝图的UI设计。
添加一个变量name调成text文本形式用来存放NPC的姓名将这两个勾选上,拖入。

获取W_name,这个是之前我们创建蓝图里面的按钮变量,要把它的数据传到现在name里面需要要调用函数set text(text)设置文本(文本)这里我建议关闭情景关联找。

现在需要调用之前建的蓝图接口的三个函数,点击类设置添加蓝图接口这样就能调用那三个函数,

将函数调用获取NPC的控件设置可视度,当玩家靠近事显现,离开时隐藏,即取消勾选new visibility。最后编译保存。

回到玩家蓝图添加碰撞体,可以选球体Sphere Collision,胶囊体capsule Collision或者方体Box collision 来检测我们玩家与NPC有没有产生碰撞交互。(我认为这里也可以在NPC上设置)调整碰撞体的大小。然后当重叠时和不重叠时添加view我们需要判断这个类啊是不是有我们这个交互蓝图的这个类然后如果是,有就说明我们碰到的是NPC,没有则不实现接口,所以用bunch。有碰撞则调用函数On Enter Player Radius,没有调用On Leave Player Radius,这里的character是玩家自身与NPC重叠所以链接自己self,告诉NPC和它交互的是谁。不重叠时和重叠时的节点类似。

右键获取键盘个事件先打keyboard找到E,获取碰撞体然后获取重叠的类get overlapping Actors。然后对这个类做循环判断,For Each Loop with Break对于每个带有Break的循环,判断是否是有之前蓝图接口里面的类,是这个类就去让我们玩家与NPC交互。然后以后交互发生的事情都要写在NPC蓝图里面,每次进行交互的时候就会在这给他调出来。这个同样的character就是self。还有就是玩家与NPC交互的时候,提示要消失所以要调用函数On Leave Player Radius。首先是提示消失然后交互。然后再判断。编译保存。


在NPC蓝图里面添加如果NPC与玩家交互时,则所有运动暂停,显示鼠标,视口不能转动。编译保存。

