killf 1 year ago
parent
commit
47b5681517

BIN
Content/BP/VRCharacter.uasset


BIN
Content/BP/VRHUD.uasset


+ 1 - 1
Source/TetreeseDemo/TetreeseDemo.Build.cs

@@ -8,7 +8,7 @@ public class TetreeseDemo : ModuleRules
 	{
 		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
 	
-		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
+		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ProceduralMeshComponent" });
 
 		PrivateDependencyModuleNames.AddRange(new string[] {  });
 

+ 43 - 16
Source/TetreeseDemo/VRCharacterBase.cpp

@@ -9,6 +9,8 @@
 #include "Components/CapsuleComponent.h"
 
 #include "VRHUDBase.h"
+#include "VRGroupBase.h"
+
 
 static FName FirstPersonCameraName(TEXT("FirstPersonCamera"));
 
@@ -30,21 +32,21 @@ AVRCharacterBase::AVRCharacterBase(const FObjectInitializer& ObjectInitializer):
 		FirstPersonCamera->SetupAttachment(GetCapsuleComponent());
 	}
 
-	MyTimeline.SetTimelineLength(2);
+	BeginWaitConnected_Timeline.SetTimelineLength(2);
 
-	MyCurveFloat = CreateDefaultSubobject<UCurveFloat>(FName("MyCurveFloat"));
-	if (MyCurveFloat) {
-		MyCurveFloat->FloatCurve.AddKey(0, 0);
-		MyCurveFloat->FloatCurve.AddKey(2, 100);
+	CurveFloat = CreateDefaultSubobject<UCurveFloat>(FName("CurveFloat"));
+	if (CurveFloat) {
+		CurveFloat->FloatCurve.AddKey(0, 0);
+		CurveFloat->FloatCurve.AddKey(2, 100);
 	}
 
 	FOnTimelineFloatStatic onTimelineUpdate;
-	onTimelineUpdate.BindUFunction(this, FName("OnTimelineUpdate"));	
-	MyTimeline.AddInterpFloat(MyCurveFloat, onTimelineUpdate);
+	onTimelineUpdate.BindUFunction(this, FName("OnBeginWaitConnected_TimelineUpdate"));	
+	BeginWaitConnected_Timeline.AddInterpFloat(CurveFloat, onTimelineUpdate);
 
 	FOnTimelineEventStatic onTimelineFinished;
-	onTimelineFinished.BindUFunction(this, FName("OnTimelineFinished"));	
-	MyTimeline.SetTimelineFinishedFunc(onTimelineFinished);
+	onTimelineFinished.BindUFunction(this, FName("OnBeginWaitConnected_TimelineFinished"));	
+	BeginWaitConnected_Timeline.SetTimelineFinishedFunc(onTimelineFinished);
 }
 
 // Called when the game starts or when spawned
@@ -59,7 +61,7 @@ void AVRCharacterBase::Tick(float DeltaTime)
 {
 	Super::Tick(DeltaTime);
 
-	MyTimeline.TickTimeline(DeltaTime);
+	BeginWaitConnected_Timeline.TickTimeline(DeltaTime);
 }
 
 // Called to bind functionality to input
@@ -98,23 +100,48 @@ void AVRCharacterBase::LookUp(float value) {
 void AVRCharacterBase::BeginWaitConnected() {
 	UE_LOG(LogTemp, Warning, TEXT("AVRCharacterBase::BeginWaitConnected"));
 
-	MyTimeline.PlayFromStart();
+	BeginWaitConnected_Timeline.PlayFromStart();
+}
+
+void AVRCharacterBase::CreateGroup() {
+	if (IsInGroup()) {
+		UE_LOG(LogTemp, Warning, TEXT("已在阵列中"));
+		return;
+	}
+
+	GetCapsuleComponent()->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Overlap);
+
+	AVRGroupBase* group = GetWorld()->SpawnActor<AVRGroupBase>();
+	group->SetActorTransform(GetActorTransform());
+
+	AttachToActor(group, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, true), NAME_None);
+	AddActorLocalOffset(FVector(0, 0, 0));
+	SetActorRotation(FRotator(0, 0, 0));
 }
 
-void AVRCharacterBase::OnTimelineUpdate(float value) {
+bool AVRCharacterBase::IsInGroup() {
+	AActor* parent = GetAttachParentActor();
+	return parent != nullptr;
+}
+
+void AVRCharacterBase::OnBeginWaitConnected_TimelineUpdate(float value) {
 	UE_LOG(LogTemp, Warning, TEXT("AVRCharacterBase::OnTimelineUpdate: %f"), value);
 
+	AVRHUDBase* hud = Cast<AVRHUDBase>(UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHUD());
+	hud->UpdateProgress((int)value);
 }
 
-void AVRCharacterBase::OnTimelineFinished() {
+void AVRCharacterBase::OnBeginWaitConnected_TimelineFinished() {
 	UE_LOG(LogTemp, Warning, TEXT("AVRCharacterBase::OnTimelineFinished"));
 
+	AVRHUDBase* hud = Cast<AVRHUDBase>(UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHUD());
+	hud->UpdateProgress(100);
+
+	CreateGroup();
 }
 
 void AVRCharacterBase::Test() {
 	UGameInstance *gameInstance = GetGameInstance();
-	
-	AVRHUDBase* hud = Cast<AVRHUDBase>(UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHUD());
-	hud->Test();
+		
 
 }

+ 9 - 5
Source/TetreeseDemo/VRCharacterBase.h

@@ -40,21 +40,25 @@ private:
 
 	void BeginWaitConnected();
 
+	void CreateGroup();
+
+	bool IsInGroup();
+
 	void Test();
 
 private:
 
 	UPROPERTY(Category = Component, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
-		TObjectPtr<UCameraComponent> FirstPersonCamera;
+	UCameraComponent* FirstPersonCamera;
 
-	FTimeline MyTimeline;
+	FTimeline BeginWaitConnected_Timeline;
 
 	UPROPERTY()
-	UCurveFloat* MyCurveFloat;
+	UCurveFloat* CurveFloat;
 
 	UFUNCTION()
-	void OnTimelineUpdate(float value);
+	void OnBeginWaitConnected_TimelineUpdate(float value);
 
 	UFUNCTION()
-	void OnTimelineFinished();
+	void OnBeginWaitConnected_TimelineFinished();
 };

BIN
Source/TetreeseDemo/VRGroupBase.cpp


+ 13 - 1
Source/TetreeseDemo/VRGroupBase.h

@@ -1,9 +1,12 @@
-// Fill out your copyright notice in the Description page of Project Settings.
+// Fill out your copyright notice in the Description page of Project Settings.
 
 #pragma once
 
 #include "CoreMinimal.h"
 #include "GameFramework/Pawn.h"
+#include "GameFramework/FloatingPawnMovement.h"
+#include "Camera/CameraComponent.h"
+#include "ProceduralMeshComponent.h"
 #include "VRGroupBase.generated.h"
 
 UCLASS()
@@ -26,4 +29,13 @@ public:
 	// Called to bind functionality to input
 	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
 
+private:
+	UPROPERTY(Category = Component, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
+	UProceduralMeshComponent* ProceduralMesh;
+
+	UPROPERTY(Category = Component, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
+	UCameraComponent* ThirdPersonCamera;
+
+	UPROPERTY(Category = Component, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
+	UFloatingPawnMovement*  FloatingPawnMovement;
 };

+ 7 - 2
Source/TetreeseDemo/VRHUDBase.cpp

@@ -5,6 +5,11 @@
 
 #include "Kismet/KismetSystemLibrary.h"
 
-void AVRHUDBase::Test_Implementation() {	
+void AVRHUDBase::Test_Implementation(int value) {
 	UKismetSystemLibrary::PrintString(GetWorld(), TEXT("AVRHUDBase::Test_Implementation"));
-}
+}
+
+
+void AVRHUDBase::UpdateProgress_Implementation(int value) {
+	UKismetSystemLibrary::PrintString(GetWorld(), TEXT("AVRHUDBase::UpdateProgress_Implementation"));
+}

+ 7 - 2
Source/TetreeseDemo/VRHUDBase.h

@@ -16,7 +16,12 @@ class TETREESEDEMO_API AVRHUDBase : public AHUD
 	
 public:
 	UFUNCTION(BlueprintNativeEvent)
-	void Test();
+	void UpdateProgress(int value);
 
-	void Test_Implementation();
+	void UpdateProgress_Implementation(int value);
+
+	UFUNCTION(BlueprintNativeEvent)
+	void Test(int value);
+
+	void Test_Implementation(int value);
 };

+ 9 - 1
TetreeseDemo.uproject

@@ -10,8 +10,16 @@
 			"LoadingPhase": "Default",
 			"AdditionalDependencies": [
 				"CoreUObject",
-				"Engine"
+				"Engine",
+				"ProceduralMeshComponent"
 			]
 		}
+	],
+	"Plugins": [
+		{
+			"Name": "ProceduralMeshComponent",
+			"Enabled": true
+		}
 	]
+
 }