当前位置: 首页 > news >正文

UE5- c++ websocket里实现调用player里的方法

# UGameInstance里直接调用


获取到引用了,就可以自然的调用。忽略

# UGameInstance里间接调用,通过代理调用


  1. 前置已经添加了websocket,具体步骤参考,链接
  2. 在UWebSocketGameInstance.h里新增代理,并在链接成功后进行绑定。
    #pragma once#include "myue521Character.h"
    #include "CoreMinimal.h"
    #include "Engine/GameInstance.h"
    #include "WebSockets/Public/IWebSocket.h"
    #include "UWebSocketGameInstance.generated.h"DECLARE_DELEGATE_OneParam(JSONMessageTrigger, FString)
    /*** */
    UCLASS()
    class MYUE521_API UUWebSocketGameInstance : public UGameInstance
    {GENERATED_BODY()
    public:JSONMessageTrigger JSONMessageTrigger;public:virtual void Init() override;virtual void Shutdown() override;TSharedPtr<IWebSocket> WebSocket;void OnConnected();void OnConnectionError(const FString& Error);void OnClosed(int32 StatusCode, const FString& Reason, bool bWasClean);void OnMessage(const FString& Message); // 接收消息时void OnMessageSent(const FString& MessageString); // 发送消息时
    private:Amyue521Character* myCharacher;
    public: Amyue521Character* getMyCharacher();};

    说明,

    1. 声明一个代理。DECLARE_DELEGATE_OneParam(JSONMessageTrigger, FString)

    2. 声明触发器。public:
          JSONMessageTrigger JSONMessageTrigger;

    3. 下面到实现类里进行绑定,我这里是在UWebSocketGameInstance.cpp里,socket链接成功后进行绑定。

  3. 绑定,并调用。这里尝试着获取到目标characher.
    Amyue521Character* UUWebSocketGameInstance::getMyCharacher() {if (this->myCharacher != nullptr) {return this->myCharacher;}
    //获取player,并转化为Amyue521CharacterACharacter* character = UGameplayStatics::GetPlayerCharacter(this->GetWorld(), 0);this->myCharacher = Cast<Amyue521Character>(character);if (this->myCharacher != nullptr) {
    //转化成功后则进行绑定JSONMessageTrigger.BindUObject(this->myCharacher, &Amyue521Character::CallBackFunMul);//模拟触发,这个触发实际应该放到收到message方法里执行FString TestHUDString = FString(TEXT("my json msg"));JSONMessageTrigger.ExecuteIfBound(TestHUDString);}return this->myCharacher;}void UUWebSocketGameInstance::OnConnected()
    {UE_LOG(LogTemp, Warning, TEXT("%s"), *FString(__FUNCTION__));GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Green, "Successfully Connected");this->getMyCharacher();}

    说明:

    1. 这里进行了代码简化,链接成功后将获取的player转化为目标Characher

      ACharacter* character = UGameplayStatics::GetPlayerCharacter(this->GetWorld(), 0);
      this->myCharacher = Cast<Amyue521Character>(character);
    2. 绑定

      if (this->myCharacher != nullptr) {JSONMessageTrigger.BindUObject(this->myCharacher, &Amyue521Character::CallBackFunMul);}
    3. 触发,这个触发实际应该放到收到OnMessage方法里执行

      if (this->myCharacher != nullptr) { FString TestHUDString = FString(TEXT("my json msg"));JSONMessageTrigger.ExecuteIfBound(TestHUDString);
      }

http://www.lryc.cn/news/157750.html

相关文章:

  • 线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)
  • Centos 6.5 升级到Centos7指导手册
  • 详解python中的映射类型---字典
  • gdal求矢量图形的形心
  • <深度学习基础> Batch Normalization
  • Ubuntu yolov5 环境配置
  • 【自执行闭包JS逆向】某网站登录MD5加密分析
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明
  • 【Linux】- 一文秒懂shell编程
  • CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决
  • 关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
  • mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器
  • Unix System V BSD POSIX 究竟是什么?
  • 数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
  • 【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}
  • 获取对象占用内存
  • mysql UUID 作为主键的问题
  • 2023高教社杯全国大学生数学建模竞赛选题建议
  • 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测
  • 低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证
  • 如何修复老照片?老照片修复翻新的方法
  • MySQL:区分大小写
  • 刷题笔记19——优势洗牌和去重保持字典序
  • 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀
  • 腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书
  • C#上位机开发目录
  • 网络通信基础
  • 框架分析(10)-SQLAlchemy
  • Linux/Windows中根据端口号关闭进程及关闭Java进程
  • 基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件,然后通过邮件发送通知的功能