本帖最后由 user 于 2018-1-15 21:20 编辑
定义接口
虚幻c++中不支持多继承,但是可以继承接口,也就是具有属性的类只能继承一个
(4.18坂本)在虚幻编辑器中选择添加c++类,在选择的类里面向下拉,最后一个Unreal interface,不要用搜索,搜不到
我们假设这里创建了一个名为 Learn的类
通过这种方式声明的接口类里面会有两个类,一个ULearn类,一个ILearn类
ULearn类不用动,接口函数使用(BlueprintNativeEvent参数)定义在ILearn函数中,并且不需要实现
创建子类时只需要继承ILearn类,之后在子类中重写“接口函数_Implementation”函数即可完成接口类的继承
在调用接口类的方法时需要将使用ILearn类型的指针指向子类的对象,然后使用Excute_函数名(子类对象地址)即可完成调用
广播:
单播
作用:个人拙见(当我“拥有广播变量者”达到某个条件后,可以通过“广播变量”向绑定的对象发送消息并且执行绑定的函数)
单播和多播使用的宏很相似,并且F12跟进去之后可以看到所有的宏都是相邻的我们今天也只学习了简单的定义一个参数的宏,有兴趣的可以定义一个宏然后跟进去看一眼
这里先说明一下定义多播的顺序
首先通过DECLARE_DELEGATE_OneParam(DelegateName(委托名), Param1Type(绑定的函数需要的参数类型))创建一个用于绑定事件的类型(大概是这样吧)
然后通过DelegatName 创建一个变量DeTa
然后在需要被告知的对象中写一个对应的函数,(例子中声明的变量只能绑定无返回值,且有一个参数的函数)
然后将DeTa与对应的对象和函数绑定 DeTa.BindUObject(对象指针,传入被绑定函数地址)
解绑函数 UnBind
在需要调用时使用Excute函数 DeTa.Excute(Param1Type param)则会调用对应函数,单播支持绑定无返回值函数和有返回值函数
但是多播只支持无返回值函数
定义有返回值的事件的宏 :DECLARE_DELEGATE_RetVal_OneParam(int32(返回值类型),BBB(委托名),int32(参数))
多播
定义多播事件类型 DECLARE_MULTCAST_DELEGATE_OneParam(DelegateName(委托名), Param1Type(绑定的函数需要的参数类型))
这个类型创建的变量 DeTaa添加绑定对象和函数
DeTaa.AddUObject(DelegateName(委托名), Param1Type(绑定的函数需要的参数类型))
多播的使用 broadcast()函数
可以看到,多播和单播的区别就在于,单播只能绑定一个,而多播则可以添加多个
委托的移除 Remove(FDelegateHandle),这个FDelegateHandle句柄为 在使用AddUObject的时候的返回值。
相应的类还有很多,大家可以去Vs工程里面测试,根据我个人的经验,代码这个东西,必须要动手,只停留在看的阶段绝对是不可能入门的
事件:
创建事件的宏
DECLARE_EVENT_OneParam(OwningType, EventName, Param1Type)
这里创建事件的方法和创建单播的方法类似,但是创建事件时需要传入这个事件所在的类的类名,(这里可以在定义类之前使用类名)
添加绑定也是使用AddUObject方法
官方文档上说事件只能在类里面调用,但是在我们实际使用时似乎有些出入
|