[Unreal][C++] ์บ๋ฆญํ„ฐ ์นด๋ฉ”๋ผ ๊ฐœ์„ 

2024. 5. 1. 20:03ยท๐Ÿ“ Game/โœ Unreal

1. ์นด๋ฉ”๋ผ๊ฐ€ ์บ๋ฆญํ„ฐ ๋ชธ์„ ๋šซ๋Š” ํ˜„์ƒ

์บ๋ฆญํ„ฐ๊ฐ€ ์˜ค๋ธŒ์ ํŠธ์— ๊ฐ€๊นŒ์ด ๊ฐ€๊ฒŒ ๋˜๋ฉด, ์นด๋ฉ”๋ผ์™€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ฐ€๊นŒ์›Œ์ ธ ์บ๋ฆญํ„ฐ ๋ชธ์„ ๋šซ๋Š” ํ˜„์ƒ์ด๋‹ค.

 

์บ๋ฆญํ„ฐ ๋ชธ์„ ๋šซ๋Š” ํ˜„์ƒ

 

Collision Presets ๋‚ด Camera ์„ค์ •์„ Block์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

Default๋กœ Block ์„ค์ •๋˜์–ด ์žˆ์ง€๋งŒ ํ˜น์‹œ๋‚˜ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ˆ˜์ •ํ–ˆ์„ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค.

 

Collision Presets

 

์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ๋งค์šฐ ๊ฐ€๊น๊ฒŒ ์นด๋ฉ”๋ผ๊ฐ€ ์ด๋™ํ•˜๋ฉด ์—ฌ์ „ํžˆ ๋ชธ์„ ๋šซ๊ณ  ์žˆ๋‹ค.

์ด๋Ÿด ๋• ํ”„๋กœ์ ํŠธ ์„ธํŒ…์—์„œ Near Clip Plane ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค.

 

Near Clip Plane

 

์ด๋ ‡๊ฒŒ ๊ฐ€๊น๊ฒŒ ์นด๋ฉ”๋ผ๊ฐ€ ๋ถ™์–ด๋„ ๋ชธ์„ ๋šซ์ง€ ์•Š๋Š”๋‹ค. 

 

(๋ถ€๋‹ด;;)

 

2. ์นด๋ฉ”๋ผ ์ถฉ๋Œ

์นด๋ฉ”๋ผ์™€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ์ˆœ๊ฐ„์ ์œผ๋กœ ์นด๋ฉ”๋ผ๊ฐ€ ์ด๋™๋˜๋Š”๋ฐ, ์›€์ง์ž„์ด ๋”ฑ๋”ฑํ•ด์„œ ์–ด์ƒ‰ํ•ด ๋ณด์ธ๋‹ค.

 

Do Collision Test ์‚ฌ์šฉ

 

๊ทธ๋ž˜์„œ ์นด๋ฉ”๋ผ Collision์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ๋จผ์ € ์บ๋ฆญํ„ฐ ์นด๋ฉ”๋ผ์˜ Do Collision Test๋ฅผ fasle๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

Do Collision Test

 

1) ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ๊ตฌํ˜„

Event Tick ๋…ธ๋“œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

 

Sphere Trace By Channel

 

Sphere Trace By Channel ๋…ธ๋“œ๋Š” ํ”ํžˆ ๋งํ•˜๋Š” Raycast์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. Start์™€ End ์‚ฌ์ด์— ์„ ์„ ๊ทธ์–ด ์ถฉ๋Œ ๋“ฑ์„ ํŒ๋‹จํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ณดํ†ต Line Trace๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ Sphere Trace์ธ ์ด์œ ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์•ผ ์›๋ฟ”์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ, ์›…ํฌ๋ฆฐ ํ”Œ๋ ˆ์ด์–ด์™€ ๊ฐ™์ด ๋ชจ๋“  ์ƒํ™ฉ์„ ํŒ๋‹จํ•˜๊ธฐ์—” ์–ด๋ ค์›€์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • Start: SpringArmCamera์˜ ์›”๋“œ ์œ„์น˜
  • End: SpringArmCamera์˜ ์›”๋“œ ์œ„์น˜ +  SpringArmCamera์™€ FollowCamera ์‚ฌ์ด์˜ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ * ๊ธฐ๋ณธ SpringArmCamera ๊ธธ์ด

 

FInterp To

 

Trace๋ฅผ ํ†ตํ•ด Hit๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด, ์ด๋™ํ•ด์•ผ ํ•  SpringArmCamera ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค.

  • True: Hit๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐพ์•˜๋‹ค
    • Clamp(Break Hit Result์˜ Distance -5, 5, ๊ธฐ๋ณธ ๊ธธ์ด)
      • Break Hit Result์˜ Distance: Hit๋œ ์˜ค๋ธŒ์ ํŠธ์™€์˜ ๊ฑฐ๋ฆฌ
      • -5: Hit๋œ ์˜ค๋ธŒ์ ํŠธ๋กœ ์ด๋™์‹œํ‚ค๋ฉด ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋šซ๋ ค ๋ณด์ผ ์ˆ˜ ์žˆ์–ด ์‚ด์ง ์•ž์œผ๋กœ ์ด๋™
      • Clamp: ์ตœ์†Œ 5๋ถ€ํ„ฐ ์ตœ๋Œ€ ๊ธฐ๋ณธ ๊ธธ์ด๊นŒ์ง€ ๊ฐ€๋Šฅ
  • False: Hit๋œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์—†๋‹ค.
    • ๊ธฐ๋ณธ SpringArmCamera ๊ธธ์ด

 

๊ทธ๋ฆฌ๊ณ  ๊ตฌํ•œ SpringArmCamera ๊ธธ์ด๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ด๋™์‹œํ‚ค๋ฉด ๋œ๋‹ค.

  • FInterp To: Current๋ถ€ํ„ฐ Target๊นŒ์ง€ ๋ณด๊ฐ„ ๊ฐ’์„ Return ํ•˜๋Š” ๋…ธ๋“œ

 

2) C++ ๊ตฌํ˜„

float MaxCameraArmLength = 150;
float CameraArmLength = MaxCameraArmLength;

FVector Start = CameraBoom->GetComponentLocation();
FVector End = UKismetMathLibrary::GetDirectionUnitVector(Start, FollowCamera->GetComponentLocation()) * MaxCameraArmLength + Start;
TArray<AActor*> ToIgnore;
FHitResult OutCameraHit;
bool IsCameraHit = UKismetSystemLibrary::SphereTraceSingle(
	GetWorld(), Start, End,
	CameraBoom->ProbeSize,
	ETraceTypeQuery::TraceTypeQuery1, true,
	ToIgnore,
	EDrawDebugTrace::None, OutCameraHit, true);

if (IsCameraHit)
{
	CameraArmLength = UKismetMathLibrary::Clamp(OutCameraHit.Distance - CameraBoom->ProbeSize, 30, MaxCameraArmLength);
}

CameraBoom->TargetArmLength = UKismetMathLibrary::FInterpTo(CameraBoom->TargetArmLength, CameraArmLength, DeltaTime, 10);

 

์ถฉ๋Œํ•ด๋„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์›€์ง์ด๊ณ  ์žˆ๋‹ค!

 

์นด๋ฉ”๋ผ ์ถฉ๋Œ

 

์ฐธ๊ณ 

https://forums.unrealengine.com/t/reducing-erratic-camera-collision-behavior/115086/4

 

Reducing erratic camera collision behavior

I do believe ive come up with a solution - i found the jitter cause, just break the hit result and plug in the distance to a print string and youll see that it equals zero when the camera gets close to the player. Basically the trace doesnt do anything at

forums.unrealengine.com

https://youtu.be/cFfCRpxl9c4?si=uWkgbMWfnuCf10rj

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Game/โœ Unreal' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Unreal] UMG
  • [Unreal][C++] ๋ฐ”๋ผ๋ณด๋Š” Actor์—๊ฒŒ ํšจ๊ณผ ์ฃผ๊ธฐ
  • [Unreal][C++] ์•กํ„ฐ ์ƒ์„ฑ
  • [Unreal] ์ง€ํ˜• ๋งŒ๋“ค๊ธฐ (Light, Landscape, Water Plugin)
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Unreal][C++] ์บ๋ฆญํ„ฐ ์นด๋ฉ”๋ผ ๊ฐœ์„ 
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”