002草稿 UE笔记 [2024 0605] 排版于0826

函数与宏:功能差不多

本质上是为了解决重复性事件的代码重复问题

宏没有局部变量

宏可以没有执行引脚

函数中的自定义事件

蓝图里: 在一个蓝图里可以直接调用另一个蓝图的自定义事件。

自定义事件节点 → Action 节点(例如,播放动画)→输出

在本地蓝图中实现自定义事件

  1. 创建自定义事件

    • 打开蓝图(比如角色蓝图或物体蓝图)。
    • 在蓝图编辑器中,右键单击空白区域,选择 "Add Event" > "Add Custom Event"
    • 给那个自定义事件命名(比如 MyCustomEvent)。
  2. 在蓝图中触发事件

    • 在同一个蓝图中,可以通过拖动自定义事件节点到图表中,并连接到想要的逻辑。
    • 如果想从另一个蓝图中触发这个事件,需要一个引用到这个蓝图的实例。
  3. 从另一个蓝图中触发事件

    蓝图 A → 获取对蓝图 B 的引用→调用自定义事件
    • 在另一个蓝图中,可以获取到目标蓝图的引用(例如,使用 Get All Actors of Class 节点或在蓝图中保存的引用)。
    • 通过拖动目标蓝图的引用,选择 Call Function,然后选择你之前创建的自定义事件。

在网络环境中实现自定义事件

多人游戏或网络环境中,远程触发涉及到客户端和服务器之间的通信。需要使用UE的网络功能,包括RPC(远程过程调用)。

  1. 定义自定义事件

    • 打开要定义事件的蓝图(例如,角色蓝图)。
    • 在蓝图中,创建一个自定义事件。确保这个事件是网络可用的。
  2. 设置RPC

    • 为自定义事件设置网络属性。需要使用 UFUNCTION 宏来标记事件,这样它可以在网络上调用

    • 一些常见的RPC设置:

      • Server:事件由客户端调用并在服务器上执行。
      • Client:事件由服务器调用并在客户端上执行。
      • NetMulticast:事件由服务器调用并在所有客户端上执行。
        // 服务器调用
        UFUNCTION(Server, Reliable)
        void ServerTriggerCustomEvent();
        
        // 客户端调用
        UFUNCTION(Client, Reliable)
        void ClientTriggerCustomEvent();
        
        // 多播调用
        UFUNCTION(NetMulticast, Reliable)
        void MulticastTriggerCustomEvent();
        

3.实现RPC函数(蓝图或C++)

// 服务器调用实现
void AMyActor::ServerTriggerCustomEvent_Implementation()
{
    // 服务器逻辑
    MulticastTriggerCustomEvent(); // 广播到所有客户端
}

// 客户端调用实现
void AMyActor::ClientTriggerCustomEvent_Implementation()
{
    // 客户端逻辑
}

// 多播调用实现
void AMyActor::MulticastTriggerCustomEvent_Implementation()
{
    // 广播逻辑
}
 

4.调用PRC (蓝图或C++)

// 在客户端调用服务器RPC
void AMyActor::TriggerCustomEvent()
{
    if (HasAuthority()) // 服务器调用
    {
        ServerTriggerCustomEvent();
    }
    else // 客户端调用
    {
        ClientTriggerCustomEvent();
    }
}

C++:

使用UFUNCTION宏定义自定义事件,并在需要触发该事件的地方调用

​
// 在头文件中定义自定义事件
UCLASS()
class MYGAME_API AMyActor : public AActor
{
    GENERATED_BODY()

public:
    UFUNCTION(BlueprintCallable, Category = "MyEvents")
    void MyCustomEvent();
};

// 在源文件中实现自定义事件
void AMyActor::MyCustomEvent()
{
    // 执行事件逻辑
}

        
        
          
            
          
          
        
        

​

关于上面的RPC(远程过程调用)

RPC允许在网络上远程调用函数,从而在不同的客户端或服务器上触发事件。

  • 服务器到客户端

    // 在服务器上定义并调用
    UFUNCTION(Server, Reliable)
    void ServerTriggerEvent();
    

    在服务器上定义一个RPC函数,标记为UFUNCTION,指定它在客户端上执行。这样服务器可以触发客户端的事件。

  • 客户端到服务器

    // 在客户端上定义并调用
    UFUNCTION(Client, Reliable)
    void ClientTriggerEvent();
    

    在客户端上定义一个RPC函数,标记为UFUNCTION,指定它在服务器上执行。这样客户端可以触发服务器的事件。

  • 事件广播和网络同步多播(Multicast):定义一个多播RPC,这样服务器可以广播事件到所有客户端。多播RPC会在所有客户端上执行相同的逻辑。
    UFUNCTION(NetMulticast, Reliable)
    void MulticastTriggerEvent();
    

    应用场景

  • 一个玩家的动作(如击杀敌人)可以触发其他玩家的事件或更新。
  • 当一个玩家按下按钮,所有客户端上的对应对象都会更新状态。
  • 触发物体动画或物理效果,使得所有玩家都能看到相同的动作或效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值