# myue521Character.h #

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"

#include "GameFramework/Character.h"

#include "InputActionValue.h"

#include "myue521Character.generated.h"

UCLASS(config=Game)

class Amyue521Character : public ACharacter

{

public:

void NotifyServer();

virtual void myJump();

public:

FString Str = TEXT("walawala");

FString topicLogKey = TEXT("log");

FString walkLogKey = TEXT("walk");

FString Forward = TEXT("Forward");

FString Right = TEXT("Right");

void TriggeredBySocketMsg(FString jsonString);

void doMyForward(int f);// 1或者-1

void doMyRight(int r);// 1或者-1

};

# myue521Character.cpp #

// Copyright Epic Games, Inc. All Rights Reserved.

#include "myue521Character.h"

#include "Camera/CameraComponent.h"

#include "Components/CapsuleComponent.h"

#include "Components/InputComponent.h"

#include "GameFramework/CharacterMovementComponent.h"

#include "GameFramework/Controller.h"

#include "GameFramework/SpringArmComponent.h"

#include "EnhancedInputComponent.h"

#include "EnhancedInputSubsystems.h"

#include "UObject/ConstructorHelpers.h"

#include "UWebSocketGameInstance.h"

//

// Amyue521Character

void Amyue521Character::myJump()

{

bPressedJump = true;

JumpKeyHoldTime = 0.0f;

this->NotifyServer();

}

void Amyue521Character::Look(const FInputActionValue& Value)

{

// input is a Vector2D

FVector2D LookAxisVector = Value.Get();

if (Controller != nullptr)

{

// add yaw and pitch input to controller

AddControllerYawInput(LookAxisVector.X);

AddControllerPitchInput(LookAxisVector.Y);

}

}

void Amyue521Character::NotifyServer() {

//从Character里获取UGameInstance的例子

UUWebSocketGameInstance* GameInstance = Cast(GetGameInstance());

if (GameInstance) {

if (GameInstance->WebSocket->IsConnected()) {

GameInstance->WebSocket->Send("FROM UnrealEngine 5");

}

}

}

void Amyue521Character::TriggeredBySocketMsg(FString jsonString)

{

//UE_LOG(LogTemp, Warning, TEXT("%s 事件触发调用了我的函数CallBackFunMul。%s-%s"), *FString(__FUNCTION__), *(this->Str), *jsonString);

//GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Cyan, FString::Printf(TEXT("事件触发调用了我的函数CallBackFunMul,%s-%s"), *(this->Str), *jsonString));

TSharedRef< TJsonReader<> > Reader = TJsonReaderFactory<>::Create(jsonString);

TSharedPtr Root;

if (FJsonSerializer::Deserialize(Reader, Root))

{

if (Root->HasField(TEXT("Topic"))) {

FString Topic = Root->GetStringField(TEXT("Topic"));

TSharedPtr Data = Root->GetObjectField(TEXT("Data"));

// TSharedPtr ObjectField = Object->GetObjectField(TEXT("realtime"));

FString KeyField = Data->GetStringField("Key");

FString ValueField = Data->GetStringField("Value");

// log类型打印log

if (this->topicLogKey.Equals(KeyField, ESearchCase::IgnoreCase)) {

GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Cyan, ValueField);

}else if (this->walkLogKey.Equals(KeyField, ESearchCase::IgnoreCase)) {

FString DirectionField = Data->GetStringField("Direction");

if (this->Forward.Equals(DirectionField, ESearchCase::IgnoreCase)) {

this->doMyForward(FCString::Atoi(*ValueField));

}else if (this->Right.Equals(Right, ESearchCase::IgnoreCase)) {

this->doMyRight(FCString::Atoi(*ValueField));

}

}

else {

GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Cyan, "1-Key: " + KeyField + ",Value:" + ValueField);

}

}

else {

GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Cyan, "解析json异常");

}

}

}

void Amyue521Character::doMyForward(int f) // 1或者-1

{

FVector2D MovementVector = FInputActionValue::Axis2D(0, f);

if (Controller != nullptr)

{

// find out which way is forward

const FRotator Rotation = Controller->GetControlRotation();

const FRotator YawRotation(0, Rotation.Yaw, 0);

// get forward vector

const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);

// get right vector

const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

// add movement

AddMovementInput(ForwardDirection, MovementVector.Y);

AddMovementInput(RightDirection, MovementVector.X);

}

}

void Amyue521Character::doMyRight(int r)// 1或者-1

{

FVector2D MovementVector = FInputActionValue::Axis2D(r, 0);

if (Controller != nullptr)

{

// find out which way is forward

const FRotator Rotation = Controller->GetControlRotation();

const FRotator YawRotation(0, Rotation.Yaw, 0);

// get forward vector

const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);

// get right vector

const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

// add movement

AddMovementInput(ForwardDirection, MovementVector.Y);

AddMovementInput(RightDirection, MovementVector.X);

}

}

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: