专栏/[UE4图文系列] 6.WorldContextObject(世界上下文对象)

[UE4图文系列] 6.WorldContextObject(世界上下文对象)

2021年02月04日 07:15--浏览 · --点赞 · --评论
粉丝:1865文章:95
  1. 首先要了解Actor和UObject的一个区别

    Actor具备挂载组件的能力,它可以通过Scene组件,拥有Transform(坐标)的概念,它还可以通过Mesh组件,拥有实体概念,换而言之,Actor具有可见,可被放置的特性,它像是一件物品,能够被看到,能够被改变坐标信息.

    而UObject不能够挂载组件,不具备坐标概念,没有实体,因此也不能被放置.

    Actor能够被放置到Level(关卡)中,存在于关卡(世界)中,因此Actor能够获得自身所在的世界信息 ,就想你能知道你居住的城市一样.

  2. WorldContextObject作用

    如上面所说,UObject无法获得世界信息(实例),那么如果我们想在UObject中实现一个获取当前世界中某种类型所有实例的功能(GetAllActorsOfClass)该怎么办?

    这个时候我们就需要有个中介,不能直接获取世界信息,那么我们尝试间接获取,让能够直接获得世界实例的实例把世界信息间接告诉UObject,这个中介就是WorldContextObject.

  3. 案例分析

UGameplayStatics中的GetAllActorsOfClass函数

如上图我们可以看到,该函数的使用元说明符:meta=(WorldContext="WorldContextObject")


如注释所说,制定一个参数,通过这个参数来确定这个发生该操作的世界


我们在一个名为NewBlueprint的Actor中调用,断点看看WorldContextObject到底是什么
可以看到,WorldContextObject是调用这个函数的蓝图类

这就是WorldContext的特性,自动获取调用它的对象,将其赋值给它指定的参数(meta=(WorldContext="WorldContextObject")),这样我们就能通过WorldContextObject来间接获取当前的世界了.

这就是WorldContext的作用:作为UObject获取世界实例的媒介


投诉或建议