FCB - Blueprints (4)

JUSTICE_DER·2023년 2월 21일
0

🌵UNREAL

목록 보기
13/42

Unreal Engine 5 – Full Course for Beginners
https://www.youtube.com/watch?v=6UlU_FsicK8

Blueprint: Timer

  • 타이머라는 것을 설정했고, 해당 Time이 지난 후,
    들어있는 Function Name에 해당하는 함수를 실행한다.
    이 때, Looping을 키면, Time이 지났다가 실행하기를 반복한다.

  • iniailize함수는 이전에 만든 컨트롤러 초기화 노드들을 함수로 묶어서 사용한다. 여기서 중요한건, 마지막에 Get timer invalid를 넣어 주어서 timer를 멈춰주어야 loop를 막을 수 있다고 한다.

  • 그냥 delay를 걸지 왜 timer를 쓰는가 하면,
    매우 세부적인 100마이크로초까지 정밀하게 세기 때문에 사용한다고 한다.
    delay는 정확하지 않기 떄문에
    보통 정확한 시간을 원하거나, 함수의 Loop 기능이 필요하다면,
    timer중에서도 timer by function을 주로 사용한다고 한다.

  • 최종 수정


Action Mappings

  • 이전에 액션매핑을 Jump를 두었었는데,
    지금은 Interact를 추가하려고 한다.

  • w키를 눌러야지 동작하는 함수와, 직접 설정한 Interact 사용자 액션과 비슷하다.
    해당 F라는 것에 Interact라는 이름을 지어준 꼴이다.

  • 이전에 공 2개 객체의 BP에, Event Overlap으로
    충돌시 HA출력하고, pawn객체면 DIDIDI이런걸 출력하라고 작성했는데,
    해당 객체마다 충돌을 감지하기보다, 플레이어 하나만 감지하도록 하는것이 효율적이라고 한다.

  • 아래처럼 간단한 기능을 하도록 했었다.
    overlap을 통해, 충돌한 객체가, pawn으로 cast(형변환)가 되면,
    DIDIDI를 출력하는 원리였다.

  • 똑같이, Character에서도, 아래와 같이 만들 수 있다.
    이 때, 해당 부딪힌 객체를 SET으로 BPPickup형으로 받아서
    NearPickup으로 저장하였다.

  • 그리고, end overlap이라는 이벤트기능으로, 겹쳐있다가 겹치지 않게 된다면,
    그리고 겹쳤던 것이 Pickup객체였는데, 거기에 NearPickup 변수와 값까지 같았다면,
    실제로 가까이 있었다가 떨어진 상황이 되므로,
    SET을 하는데, 파란핀으로 값을 받아오는 것 없이 그냥 SET을 하여,
    참조가 없는 Null값으로 NearPickup을 초기화한다.

  • 해당 NearPickup을 Interact이벤트와 같이 사용하려고 한다.
    해당 값을 검증한다. 비어있는 유효하지 않은 변수인지, 유효한 변수인지.
    유효하다는 것은 다시말해, 지금 Pickup객체와 충돌중이라는 의미이기도 하다.

  • interact키를 눌렀고, get으로 가져온 NearPickup이 유효한 값을 가지고 있다면,
    해당 NearPickup이 참조한 객체를 Destroy하라는 기능이다.

  • 닿아있는 상태로, F키를 누를시 사라지는 모습이다.
    정상동작하고, 2개도 가능하다.

  • 정상동작하지만, 부자연스러운 부분이 있다고 하는데,
    아래처럼 겹쳐있다면, 박스가 없어지고, 새로운 collision 이벤트가 발생하지 않기 떄문에
    나머지를 없앨 수가 없다는 말이다.
    하지만 실제로는 없앨 수 있었다.

  • 해당 문제에 대한 해결책은, Destroy후에, 본인과 겹치는 actor를
    가져와서 set으로 NearPickup의 값을 수정하는 것이다.

  • 즉 2가지 방식이 있는 것이다. [참고자료]

  1. 플레이어가 처음 겹치기 시작할 때, OnActorBeginOverlap이 실행.
    처음 겹쳤을 때, set으로 해당 물체를 저장.
    겹치는 중인 경우, 절대 다시는 실행되지 않음.
  2. destroy 이후에,
    플레이어와 겹친 물체 중 0번 인덱스의 물체를 가져와서 set을 함
    없으면 안하는거고, 있으면 set으로 해당 물체를 저장.
    겹치는 중에도 실행됨.
  • 아래와 같이, 특정 수를 출력하도록 할 수 있고,
    destroy 전에 매번 출력하게 될 것이다.

Expose On Spawn

  • 해당 노드를 사용하여, 특정 클래스 객체를 spawn할 수 있다.

  • 추가로 구조체 핀 분할을 하여 transform값을 직접 입력할 수도 있다.

  • 구체를 1개 더 spawn한 모습.

Interaction System

  • 또 새로운 Actor BP를 만든다.

  • Actor를 만들었던 그대로 다시한다.
    static mesh component를 루트노드와 교체한다.
    그리고 콜리젼도 추가한다.
    피직스 시뮬레이트도 킨다.

  • impulse라는 힘을 가하는 작업을 추가한다. 유니티의 Force impulse 이런건가보다.
    그리고 아래와 같이 BP를 만들면,
    해당 객체를 가지고 와서 유효한지 판단 후에,
    Actor인 character의 정면 방향벡터에 1000000배의 힘을 곱하여
    날려버린다.

  • 멀리 날아가는 모습

  • 해당 기능을 끄면, collision이 보이게 된다.
    필요시 끌 것


Blueprint: Linetrace (Raycasting)

  • 가장 많이 쓰이는 기능 중 하나가 Raycasting이다.
    언리얼엔진에서는 Linetrace라고 부른다.

  • Linetrace에서 가장 많이 쓰이는 것은,
    Line Trace By ChannelMulti Line Trace By Channel이다.
    전자는 line이 감지하는 제일 첫번째 값만 받아오는거고,
    후자는 모든 값을 받아온다.

  • linetrace는 다음과 같이 생겼다.
    start좌표부터, end좌표까지 선을 잇는다.
    그 선상에 부딪히는 것을 Out Hit으로 리턴값을 얻는다.

  • Trace Channel을 통해 특정 채널만 감지하도록 할 수도 있다.
    위에서 보면, 현재 체널이 visiblity로 설정이 되어있는데,
    해당 캐릭터의 mesh-detail-collision에 보면,
    콜리전 프리셋에서 visibiity라는 탭이 있다.
    해당 것에서 뭘 하라고 하는데 영어 설명이 이해가 안된다.
    일단 스킵

  • 추가로 초록핀 Draw line으로 디버그용으로 선을 볼 수가 있다

  • 왼쪽 마우스 버튼을 누르면, 시작인 카메라 위치부터,
    카메라 위치에 카메라 정면으로 500000cm 곱하고 더한 값까지 선을 그리는 line을 그리게 된다.

  • 구조체 뭐시기로 해당 출력핀을 모두 보이게 한 후,
    hit location을 sphere모양으로 그리도록 할 수 있다.

  • 문제없이 동작하지만, 보통 게임은 1인칭카메라와 3인칭카메라로 2개가 존재한다.
    그래서 다음과 같은 카메라 인덱스방식을 사용하고, camera노드 자리만 교체하면 된다.

  • 혹은 그냥 Actor라는 루트기반 기능을 가진 함수로 변환없이 사용할 수 있다.

  • 아래와 같이 Hit된 Actor만 추출하여 사용할 수 있다.

  • 왼쪽 클릭으로 카메라로부터, 카메라 정면 500m까지 추적하는 선을 생성하고,
    해당 선에 닿은 물체가 BP_pickupi이므로 destroy되는 모습이다.

profile
Time Waits for No One

0개의 댓글