안녕하세요~! @burning 입니다.
지난 강의 에 이어서
만든 레이져(Line)로 이벤트를 일으켜 보겠습니다.
기본 액터가 가지고 있는 이벤트를 봅시다.
우리가 하고 싶은 라인트레이스 관련된 이벤트는 전혀 보이지 않습니다.
실제 상황과 라인트레이스 작동 방식을 생각해봅시다.
아이템에 마우스를 올려 놨을 때 = 레이져가 아이템에 닿았을 때
아이템을 클릭 했을 때 = 레이져가 닿은 아이템에 클릭을 했을 때
이렇게 됩니다.
무슨 말인지 알겠나요?
그냥 한번 따라해 봅시다. ㅎㅎ
그럼 금방 이해가 될거에요.
블루프린트를 하나 만듭니다. Actor를 상속 받고, LineActor라 이름을 짓겠습니다.
그리고 이벤트 그래프에 들어가서 커스텀 이벤트를 만들어 줍니다.
이정도 이벤트만 만들어 줄까요?
Line이 엑터랑 겹치기 시작할때, 끝날때, 그리고 클릭할때 각 각 이벤트를 주겠습니다.
이름은 우리가 사용할 용도에 맞춰 만들어 주면됩니다.
저 상황에 맞춰서 이벤트를 호출 해주면 되거든요.
LineActor는 이정도 작업을 해주고, 블루프린트를 만들겠습니다. 이번에는 LineActor를 상속받아서 만들겠습니다.
이름은 LineCube.
컴포넌트를 Cube를 추가 해볼까요?
자, 먼저 이 엑터에 라인이 맞았을 때 이벤트를 일으켜 봅시다.
이벤트 그래프에서 OnBeginLineOverlap를 호출 하고, PrintString을 연결해 줍시다. 출력문을 Hello로 하죠.
이제, 준비는 끝났습니다. 이제 이 이벤트를 언제 호출하냐만을 생각하면 됩니다.
언제일까요?
라인이 오버랩 되었을 때!
그럼 다시 MyCharacter로 들어옵니다.
LineTraceForObject에 계속 연결 해 보죠.
이 노드의 아웃풋을 보면 두가지가 있는데요.
OutHit는 히트된 것을 반환해주는것이고, Return Value는 히트가 되었냐 되지 않았냐를 리턴해 줍니다.
우리가 필요한건 당근 히트 되었을 때겠죠? 분기를 연결 해 줍시다.
그리고 OutHit는 BreakHit를 해주고요.
이제 흐름은 분기에서 빼서 쓰면 됩니다.
Break Hit Result에서 Hit Actor를 쭉 빼서, 아까 만들어준 LineActor로 형변환 시켜 줍니다.
그리고 분기랑 연결 시켜준 후, AsLineActor를 쭉 빼서, OnBeginLineOverlap을 호출하면 끝!!!
근데 막상 LineCube를 월드에 넣고 해보면 아무 반응이 없을 겁니다.
이유는! LineTraceForObject노드의 입력에서 ObjectTypes를 변경 해줘야합니다.
우리가 올려 놓은 큐브는 Static이 아닌 Dynamic 타입이기 때문이죠.
이걸 변경 해주면! 큐브에 Hit가 되면 바로 Hello가 출력 될겁니다.
이상 라인트레이스 관련 언리얼 강의를 마칩니다.ㅎㅎ
짱짱맨 @eunhaesarang입니다
첫방문인사하고 갑니다
아직 뉴비라 스파와 보팅파워 없어서 보팅은 못하지만 앞으로 자주 소통하도록 하겠습니다
즐거운 주말 보내시길 바래요
반갑습니다. ㅎㅎ 날이 추운데 감기 조심하세요 ㅎㅎㅎ