일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 유니티
- MAC
- 게임개발
- 운영체제
- 유스케이스
- Race condition
- DP
- DSP
- 언리얼엔진
- MLFQ
- ability task
- linear difference equation
- Rr
- Unreal Engine
- 언리얼 엔진
- dtft
- dirty cow
- gravity direction
- pdlc
- 게임 개발
- CTF
- Security
- gameplay effect
- reverse gravity
- stride
- 메카님
- ret2libc
- gas
- gameplay ability
- Replication
Archives
- Today
- Total
다양한 기록
[ChronoSpace] Gravity Core / Gravity Direction 조정을 통한 Custom Gravity 본문
언리얼 엔진/ChronoSpace
[ChronoSpace] Gravity Core / Gravity Direction 조정을 통한 Custom Gravity
라구넹 2025. 1. 26. 23:30
https://www.youtube.com/watch?v=CZK7QplEbJs
위 영상을 보고 만들긴 했는데, 위 영상은 Player한테 Gravity Direction의 조정을 맡긴다
Player에 책임이 과도해지기도 하고 마음에 안드는 부분들이 좀 있어서
분리하여 역할을 GravityCore에 맡겼다
분리하는 것으로 모든 ACharacter를 상속하는 클래스가 이 영향을 받을 수 있게 된다
// Fill out your copyright notice in the Description page of Project Settings.
#include "Actor/CSGravityCore.h"
#include "GameFramework/Character.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "ChronoSpace.h"
ACSGravityCore::ACSGravityCore()
{
PrimaryActorTick.bCanEverTick = true;
OnActorBeginOverlap.AddDynamic(this, &ACSGravityCore::OnActorBeginOverlapCallback);
OnActorEndOverlap.AddDynamic(this, &ACSGravityCore::OnActorEndOverlapCallback);
}
void ACSGravityCore::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
if ( TargetCharacters.Num() == 0 ) return;
for (auto Character = TargetCharacters.CreateIterator(); Character; ++Character)
{
FVector NewDirection = GetGravityDirection(Character.Value());
Character.Value()->GetCharacterMovement()->SetGravityDirection(NewDirection);
}
}
FVector ACSGravityCore::GetGravityDirection(ACharacter* Character)
{
FVector SelfLocation = GetActorLocation();
FVector TargetLocation = Character->GetActorLocation();
return (SelfLocation - TargetLocation).GetSafeNormal();
}
void ACSGravityCore::OnActorBeginOverlapCallback(AActor* OverlappedActor, AActor* OtherActor)
{
if ( ACharacter* Character = Cast<ACharacter>(OtherActor) )
{
TargetCharacters.Emplace(Character->GetFName(), Character);
}
}
void ACSGravityCore::OnActorEndOverlapCallback(AActor* OverlappedActor, AActor* OtherActor)
{
if (ACharacter* Character = Cast<ACharacter>(OtherActor))
{
Character->GetCharacterMovement()->SetGravityDirection(FVector(0.0f, 0.0f, -1.0f));
TargetCharacters.Remove(Character->GetFName());
}
}
상위 클래스인 CSGravityCore에서 중력 조절을 맡는다
// Fill out your copyright notice in the Description page of Project Settings.
#include "Actor/CSGravityCoreSphere.h"
#include "Components/SphereComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Physics/CSCollision.h"
ACSGravityCoreSphere::ACSGravityCoreSphere()
{
// GravitySphereTrigger
SphereTrigger = CreateDefaultSubobject<USphereComponent>(TEXT("GravitySphereTrigger"));
SphereTrigger->SetSphereRadius(GravityInfluenceRange, true);
SphereTrigger->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
RootComponent = SphereTrigger;
// Static Mesh
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
StaticMeshComp->SetupAttachment(SphereTrigger);
StaticMeshComp->SetCollisionProfileName(CPROFILE_CSCAPSULE);
static ConstructorHelpers::FObjectFinder<UStaticMesh> StaticMeshRef(TEXT("/Script/Engine.StaticMesh'/Game/Mesh/StaticMesh/BlockSphere.BlockSphere'"));
if (StaticMeshRef.Object)
{
StaticMeshComp->SetStaticMesh(StaticMeshRef.Object);
}
float MeshRadius = 50.0f;
float MeshScale = (GravityInfluenceRange / MeshRadius) * 0.75f;
StaticMeshComp->SetRelativeScale3D(FVector(MeshScale, MeshScale, MeshScale));
}
하위 클래스인 CSGravityCoreSphere에서 스태틱 메시와 SphereComponent 설정을 한다
상속받아 블루프린트로 만들고 메테리얼 설정 및 중력 영역 설정
https://lagooneng.tistory.com/358
멀티플레이용 변경 사항
'언리얼 엔진 > ChronoSpace' 카테고리의 다른 글
[ChronoSpace] SetGravityDirection 동기화 문제 (Pitch 동기화) + 최적화 (1) | 2025.02.03 |
---|---|
[ChronoSpace] ** Multiplay With GAS Setting (and Widget) ** (0) | 2025.01.30 |
[ChronoSpace] Weaken Gravity / Material Saturation Setting (0) | 2025.01.26 |
[ChronoSpace] Black Hole & White Hole (0) | 2025.01.26 |
[ChronoSpace] 밀리는 Character (0) | 2025.01.25 |