오늘은 그저께 다시 작성한 Climb 기능의 State Machine을 하나하나 구현을 해보았습니다.

 

우선은 Rope를 먼저 수정하고, Rope에서 문제 없이 잘 작동하면 Wall과 Ladder에도 수정을 할 예정입니다.

 

결론적으로, 반의 반쪽만 완성하였습니다.

 

Climb시 Climb-Idle 상태로는 변합니다.

 

하지만 Enter Climb, Exit Climb와 Climb up, Climb down이 전혀 작동하지 않습니다.

 

또한 Climb move 중 갑자기 MvoementMode가 변하면서 Climb 상태가 해제되는 경우가 있습니다.

 

이 경우, Locomotion Animation도 정상 작동되지 않습니다.

 

간혹 정상적으로 Climb State에서 해제 되어도 Locomotion Animation이 정상 작동하지 않기도 합니다.

 

날이 따뜻해서  노곤노곤해지는 날입니다.

 

월요일에 이 문제를 좀 더 수정해보겠습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.06.03 개발일지  (0) 2020.06.03
20.06.01 개발일지  (0) 2020.06.01
20.05.28 개발일지  (0) 2020.05.28
20.05.27 개발일지  (0) 2020.05.27
20.05.25 개발일지  (0) 2020.05.25

오늘은 Climb 기능에 대해 적절한 Animation이 재생되도록 개선을 히도했습니다.

 

우선 성과가 있는 점부터 적겠습니다.

 

Climb 시 Animation이 재생되지 않는 이유는 Climb Animation이 속해있는

FullBodyMotion을 관할하는 trigger 값이 적절한 값을 가지지 않았기 때문입니다.

이를 적용하자, Animation이 어느정도 재생이 되기 시작했습니다.

 

이후 Climb를 한번이라도 하면 Climbing 상태로 움직이는 문제가 있었으나,

위와 마찬가지로 Climb 해제 시 FullBodyMotion 값이 적절치 못해서였습니다.

 

남은 시간은 Animation을 기능과 맞추기 위해 시간을 꽤 투자하였으나,

미묘하게 Animation 재생이 어긋나 있었습니다.

일관적이라면 무언가 잘못 입력된 것이겠지만, 규칙성을 찾지 못했습니다.

 

때문에 저는 Animation과 기능의 조건을 잘못 나눈 것이 아닌가 하는 의구심이 들었고,

관련 State Machine을 재정리 하였습니다.

 

이를 기반으로 다시 조건을 부여하여 Animation이 적절히 재생되도록 할 예정입니다.

 

Climb에 필요한 State
Climb Animation State Machine
State별 설명과 트리거 값
Event들의 트리거 변화와 재생되어야 할 Animation

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.06.01 개발일지  (0) 2020.06.01
20.05.30 개발일지  (0) 2020.05.30
20.05.27 개발일지  (0) 2020.05.27
20.05.25 개발일지  (0) 2020.05.25
20.05.23 개발일지  (2) 2020.05.23

요 며칠 컨디션이 안좋었는데 아무래도 수면 부족이었나봅니다.

아침서부터 편두통과 무력감, 우울감에 찌들어서 개발에 하나도 집중을 하지 못했습니다.

개발을 게을리 하지 않기 위해 낮잠을 자제하는 편인데 너무 힘들고 머리에 뭐가 들어오지 않아

될대로 되라지 싶은 심정으로 그냥 잤습니다.

 

자고 일어나니까 컨디션이 100%까지는 아니더라도 70% 정도까지는 올라온 것 같습니다.

그 덕에 시간은 적었지만, 해결하고자 하는 문제는 해결하였습니다.

오늘 해결한 문제는 Client에서 작업 여부와 관계 없이 MovementMode가 반대로 움직이는 현상을 수정하는 것입니다.

코드가 잘 돌아가는데 값이 반대로 작동하는건 수 개월 전에 기억도 가물가물해지는 시기에 겪고 처음입니다.

그래서 굉장히 오래 걸릴것 같아 오늘 하루 이 문제만 해결하도록 계획을 잡았습니다.

 

그런데 문제가, 문제가 아니었습니다.

우선 어느 시점에서 값이 바뀌는지 알기 위해 MovementMode의 로그를 출력하는 함수를 더 추가했습니다.

원래는 Interaction 작업을 한 직후(B)에만 출력을 하였는데, RPC 함수에서 NetMulticast 함수 내부에 MovementMode 값을 직접 수정하는 코드의 앞, 뒤(A)로도 추가하였습니다.

 

이후 로그를 찍어보니까 생각치도 못하게 나왔습니다.

우선 코드 순서 상 A를 호출하는 함수가 B보다 더 앞입니다. 

Host(Server)에서는 A 다음 B 순서로 잘 찍혔고, 값도 멀쩡했습니다.

하지만 Client에서는 B가 찍힌 후에 A가 찍히고, B 값은 원래 값과 반대로 움직이는 반면
A 값은 정상적으로 변경 전과 변경 후가 의도한대로 변경되었습니다.

 

A 값이 정상적으로 움직인다는 것은 MovementMode의 값은 어느 Client에서도 정상이라고 예상할 수 있습니다.

그렇다면 로그가 찍히는 순서가 다른 것에서 어떤 의미가 있는 것인지를 알아야 했습니다.

이는 조금만 생각해도 금방 알 수 있었습니다.

 

A 코드는 B 코드보다 먼저 실행된다 하더라도 RPC 함수입니다.

때문에 같은 procedure에서 실행되지 않을 것입니다.

Client에서 실행하는 경우, 한번 Host(Server)의 함수를 호출하도록 통신을 하고, 

Host(Server)는 자기 자신을 포함한 모든 Client에서 값을 바꾸도록 다시 한번 함수를 호출할 것입니다.

즉 A는 실행이 될 때까지 두번의 네트워크 통신이 발생합니다.

 

그에 반해 B는 A 부분에서 RPC 함수 통신이 끝나면 그 즉시 바로 호출됩니다.

또한 A와 다른 Procedure 상에서 작동되기 때문에 반드시 A가 B보다 먼저 끝난다는 보장도 없습니다.

때문에 Client에서는 A 호출을 위한 두번의 통신 과정이 B 호출보다 더 늦게 완료 된다고 예상했습니다.

 

그 뒤로는 예상이 맞는지 검증을 하는 과정입니다.

검증은 간단했습니다. Tick에서 값을 로그에 출력해보는 것입니다.

출력 결과, 값 자체는 정상적으로 움직이는 것으로 나왔습니다.

 

결국 이 문제는 기능상, 구현상 문제가 아니라, RPC 함수의 특성에 대한 이해 부족이 문제였습니다.

이를 통해 멀티플레이 게임에서의 디버그 때에는 로그에 지나치게 의존해서는 한된다는 교훈을 얻었습니다.

 

내일에는 Animation 블루프린트의 트리거 값을 조절하여 Climb시 애니메이션이 재생되도록 할 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.30 개발일지  (0) 2020.05.30
20.05.28 개발일지  (0) 2020.05.28
20.05.25 개발일지  (0) 2020.05.25
20.05.23 개발일지  (2) 2020.05.23
20.05.21 개발일지  (0) 2020.05.21

https://www.acmicpc.net/contest/view/116

 

2015 ACM-ICPC 연습

 

www.acmicpc.net

오늘 늦잠 잘 정도로 컨디션도 안좋고, 오른쪽 손목이 좋지 않아서 조금만 하려고 했습니다.

하지만 막상 문제를 풀려니까 저번에 풀려고 적어 놓은 문제가 상당히 어려웠습니다.

그래서 남은 시간 문제 해석을 다 해놓고 해결방안이 기억이 난다면 메모를 해놓으려 합니다.

해석 하고 나니까 영어로 된 문제 중 쉬운 문제가 많아 슬펐습니다.

Party

문제

남성 그룹과 여성 그룹이 파티를 갖을 때마다 데이트를 1번 한다.

남성 그룹의 그룹원들이 최소 1번 이상 데이트를 할 때까지 개최되어야 하는 파티의 최소 수를 구해야 한다.만약 파티 횟수와 관계 없이 데이트가 불가능한 남성 그룹원이 발생한다면 impossible을 출력한다.

 

입력

n

m f

w1 m1 ... mw

.....

wf m1 .... mw

 

n = 테스트 횟수

m = 파티에 참여하는 남성의 수

f = 파티에 참여하는 여성의 수

w* = *번째 여성이 데이트 하고 싶은 남성의 수

m* = 여성이 데이트 하고 싶은 남성의 순번

 

출력

모든 남성들이 최소 1번 이상 데이트를 할 수 있는 파티 횟수

횟수와 관계 없이 데이트를 못하는 남성이 있을 경우 impossible 출력

 

해결방안

1. m*의 값이 0부터 m까지 모두 존재하는지 확인. 없을 경우 impossible

2. 

 

Save the computer!

문제

한 학기동안 컴퓨터를 맞췄을 때, 학기동안 파산하지 않을 확률을 구해야 한다.

컴퓨터는 여러 부품으로 되어 있는데, 하나라도 망갖기면 컴퓨터가 구동하지 않는다.

남은 돈으로 망가진 부품을 새로 교체 할 수 있다.

i번째 부품이 학기동안 k번 망가질 확률은 e^-a(i) * a(i)^k / k!이다.

a(i) = i번째 부품이 학기동안 망가지는 횟수의 기대값

k = 망가지는 횟수

 

입력

n

c b

a(0) .... a(c)

p(0) .... p(c)

 

n = 테스트 횟수

c = 부품 갯수

b = 컴퓨터 부품 구매에 투자 할 수 있는 잔액

a(i) = i번째 부품이 학기동안 망가지는 횟수의 기대값

p(i) = i번째 부품의 가격

 

출력

파산하지 않는 최고 확률

 

Fridge of Your Dream

컴퓨터 옆에 설치한 냉장고는 안에 콜라 무게를 LED로 표현한다.

이를 10진수로 변환하여 화면에 표현하자

 

입력

n

b

 

n = 테스트 횟수

b = 24자리의 이진수 숫자

 

출력

입력된 이진수 수를 십진수로 표현

 

해결방안

1. 2^0에서 2^24까지 값이 저장된 메모리를 생성한다.

2. 입력된 수를 뒤에서부터 문자 하나씩 받아 메모리 값과 곱하여 합산한다.

 

 

Scorched Earth

문제

포트리스와 같은 게임으로 적과 자신의 위치, 미사일을 쏘는 각도, 속도, 중력가속도(9.8m/s^2), 바람이 존재한다.

이 때 주어진 조건 하에 어느 속도로 쏴야 적을 맞추는지 연산해야 한다.

 

입력

n

x1 y1 x2 y2 w d

 

n = 테스트 횟수

(x1, y1) = 자신의 탱크 위치

(x2, y2) = 상대의 탱크 위치

w = 바람 세기(가속도)

d = 각도

 

출력

적을 맞출 수 있는 속도 v

제한 된 속도 내로 맞추지 못한다면 impossible을 출력한다.

 

해결방법

t1 = 포탄이 최대 높이까지 도달하는데 걸리는 시간

t2 = 포탄이 최대 높이에서 적 탱크까지 도달하는데 걸리는 시간

H = 최대 도달 높이

h = 자신의 탱크와 적의 탱크 사이의 높이 차

D = 자신의 탱크와 적의 탱크 사이의 거리 차

 

Vcos(d)(t1 + t2) + w(t1 + t2)^2 /2 = D 공식이 만족해야 함.

t1 = Vsin(d) / g

t2 = (2(H-h)/g)^0.5

H = (V sin(d))^2 / 2g

 

Free Willy

단어 두개와 몇가지 조합이 주어진다.

첫번째 단어에서 최소한의 조합을 이용해 두번째 단어를 만드는 횟수를 구하자.

만약 주어진 횟수 안에 불가능하면, whalemeat를 출력하자.

 

입력

n

N P L

W1 W2

P(0)

...

p(P)

 

n = 테스트 횟수

N = 단어 길이

P = 조합 갯수

L = 제한 횟수

P(i) = 조합

 

출력

제한 횟수보다 더 적게 맞출 수 있다면 그 횟수를 출력한다.

만약 불가능하면, whalemeat를 출력한다.

'개발일지 > Algorithm' 카테고리의 다른 글

20.06.09 - 2015 ACM-ICPC 연습  (0) 2020.06.09
20.06.02 2015 ACM-ICPC 연습  (0) 2020.06.02
20.05.19 - 2015 ACM-ICPC 연습  (0) 2020.05.19
20.05.12 - 2015 ACM-ICPC 연습  (0) 2020.05.12
20.05.05 - 2015 ACM-ICPC 연습  (0) 2020.05.05

14일에 발견했던 Multiplay 상에서의 Climb 기능 문제를 오늘에서야 해결했습니다.

 

그것도 너무나도 당연한 것을 확인하지 않고 말입니다.

 

문제 현상은 Climb 시 Client의 Character는 움직이지 않는 것이었습니다.

 

확인한 원인은 Character에 Attach 되어있는 MovementComponent가 가진 변수 MovementMode가 Interaction 시 값이 변했다가 몇 tick만에 원상복귀 되기 때문입니다.

 

처음에는 구현 방식을 살펴보고, 그 다음에는 통신 문제. 마지막으로 내부 구현상의 문제로 예상하고 살펴보았으나 별 다른 효과를 얻지 못했습니다.

 

그러던 중, 23일에 RPC 함수로 한번 묶어볼까 싶은 아이디어를 떠올렸습니다.

 

그리고 오늘, 구현 결과 기능이 작동하였습니다.

 

생각해보면 너무나도 당연한 것이었습니다.

 

Multiplay 상에서 Character가 움직이는 방식은 현재 두가지입니다.

 

하나는 유저가 조작 권한을 가지고 있는 Controller가 Character에 Possess 하여 직접 움직이는 것.

 

다른 하나는 다른 Client가 조작하는 Character의 트리거가 RPC를 통해 Replicated 되어 그 유저의 조작에 따라 동일하게 움직이는 것.

 

즉, Character는 각 Client에게 별도로 선언이 되어 있다는 것입니다.

 

이는 MovementComponent 또한 Client별로 하나씩 따로 존재한다는 것을 의미합니다.

 

때문에 정상적으로 움직이려면 모든 Client에서 동일한 Character의 움직임이 공유되어야 하고, 이는 RPC를 이용해야 한다는 것을 의미합니다.

 

MovementComponent라는 낯선 Component의 사용. 그리고 RPC 구조와 목적의 망각이 2주 가까운 시간의 낭비를 야기했습니다.

 

그리고 기능은 작동하지만, 완벽한 것은 아닙니다.

 

Client에서 Climb 할 때, Trigger 조작이 처음 1회 때 씹힙니다.

 

무슨 말인가 하면, Trigger 값이 처음 1회 때에는 변하지 않고, 그 뒤로는 정상적으로 들어갑니다.

 

결과적으로 기능이 동작은 하지만, Trigger를 로그로 찍어보면 값이 반대로 움직이고 있다는 것입니다.

 

오랫동안 고민한 문제가 어이 없게 풀리면서 긴장도 풀리고, 컨디션도 급격히 안좋아졌습니다.

 

이것 저것 시도를 해보았으나 유의미한 결과를 얻지 못하였고, 이 문제 해결은 수요일로 보류하겠습니다.

 

이전 3일 정도 적었던 이슈들은 평소에 이슈를 관리하던 GitKraken Board롤 옮겼습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.28 개발일지  (0) 2020.05.28
20.05.27 개발일지  (0) 2020.05.27
20.05.23 개발일지  (2) 2020.05.23
20.05.21 개발일지  (0) 2020.05.21
20.05.20 개발일지  (0) 2020.05.20

EnableInput can only be specified on a PlayerController for itself 에러 발생.

한번 사라졌다가 rebuild 한 후 다시 발생.

시도해볼 해결 방안 링크를 첨부한다.

https://stackoverflow.com/questions/59857336/how-to-fix-enableinput-can-only-be-specified-on-a-pawn-for-its-controller-erro

 

How to fix "EnableInput can only be specified on a Pawn for its Controller" error in output log

I'm creating a weapon system for my third person shooter project and I'm having some problems getting input to the gun. With the way I have set up my classes, I have ACharacter parented player cla...

stackoverflow.com

Client에서 Interaction시 MovementMode가 변경 되었다가 다시 원상복귀 됨.

MovementComponent 내에 MovementMode가 호출되는 함수를 탐색해 보았다.

MovementMode
  DefaultLandMovementMode
    SetDefaultMovementMode
      Character::PostInitializeComponent
        - Controller is False, so SetDefautlMovementMode called
  GroundMovementMode
    SetGroundMovementMode
    ApplyNetworkMovementMode
  SetMovementMode
    SetDefaultMovementMode
    SetGroundMovementMode

OnMovementModeChanged
  SetMovementMode
  Character::OnMovementModeChanged

그 결과 Character의 PostInitializeComponent에서 Controller가 없을 경우, MovementComponent::SetDefaultMovementMode가 호출이 된다.

이 함수 내부에는 GameMode를 MOVE_Walk로 초기화 하는 구문이 있다.

 

이것이 원인이라면 Character를 찾지 못했다는 warning과 문제가 하나로 합쳐진다.

하지만 Interaction시 한번 수정되었다가 몇 tick 이후 원상복귀 된다는 점에서 이 부분이 문제라 하기에는 애매하다.

 

그래서 MovementComponent의 OnMovementModeChanged를 탐색해보았다. 

로그에서 Override 한 OnMovementModeChanged 함수의 로그가 찍혀있었기 때문이다.

하지만 이렇다 할 원인을 찾지 못했다.

 

현재 여기까지 탐색을 함.

다음 시도는 "Character에서 MovementComponent가 가지고 있는 MovementMode의 RPC Function 구현"입니다.

 

"ProcessRemoteFunction: No owning connection for actor THCharacterBP_Sample_C_0" Warning 발생

Controller와 Character가 연결되지 않아서 발생했다.

단순 네트워크 문제라는 것도 있고, Possess를 하라는 글도 있다.

이에 대해 그나마 가장 자세한 문서를 첨부한다.

https://dawnarc.com/2017/09/ue4no-owning-connection-for-actor-xxx.-function-xxx-will-not-be-processed/

 

[UE4]No owning connection for actor XXX. Function XXX will not be processed

keywords:UE4, Dedicated Server, Replication Issue Client execute a server function failed: LogNet: Warning: UIpNetDriver::ProcesRemoteFunction: No owning connection for actor TopDownCharacter_C_0. Function ServerMoveToDest will not be processed. Cause: B

dawnarc.com

우선 Possess를 따로 어떻게 해줘야 하는지를 잘 모르겠다.

그 부분을 먼저 고민해야 할 것 같다.

 

만약 Listen Server라서 발생하는 문제 중 하나라면 Climb 관련 기능들을 모두 Dedicate Server 구현 이후로 미뤄야 한다.

하지만 다른 Animation에서는 이런 문제가 발생하지 않는 것으로 보아 이런 가능성은 매우 낮다고 생각한다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.27 개발일지  (0) 2020.05.27
20.05.25 개발일지  (0) 2020.05.25
20.05.21 개발일지  (0) 2020.05.21
20.05.20 개발일지  (0) 2020.05.20
20.05.18 개발일지  (0) 2020.05.18

해결해야 할 부분

  • 멀티플레이 시 Character를 찾지 못한다는 warning
    • 결국에는 Client에서 Controller가 Character를 찾지 못해서 생기는 문제.
      • Player Start Point가 하나였던걸로 기억하는데 이걸 여러개로 늘려서 테스트 해보려 한다.
    • Editor 테스트 뿐만 아니라 제대로 실행 시켰을 때도 같은 문제가 발생함.
  • Client에서 Interaction시 MovementMode가 변경 되었다가 몇 tick 후 원상복귀 됨
    • MovementMode를 write 하는 부분을 지워보았으나 여전히 값이 원상복귀됨.
    • 로직 상 문제라기 보다는 원래 구현상 있는 기능 중 무언가를 놓친 것 같다.
    • MovementComponent 코드를 읽어보면서 예상되는 부분을 찾아보자.
      • defaultground 어쩌고 부분에서 초기화가 될 수도 있을 것 같다. 
      • 하지만 정확한 것은 아니니 좀 더 정리를 해보자.

 

진도가 정말 느립니다.

posses 관련해서 찾아봤는데 명확한 해결 방법이 보이지 않습니다.

시간이 정말정말 오래 걸릴 것 같습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.25 개발일지  (0) 2020.05.25
20.05.23 개발일지  (2) 2020.05.23
20.05.20 개발일지  (0) 2020.05.20
20.05.18 개발일지  (0) 2020.05.18
20.05.16 개발일지  (0) 2020.05.16

오늘은 저번에 작성했던대로 Character의 Tick에 있던 정지 시 달리기 속도 초기화를 하는 작업을 MovementComponent의 OnMovementUpdated로 옮겼습니다.

처음에는 Character에 선언된 변수를 접근할 방법이 없어서 이 작업이 불가능 한줄 알았습니다.

하지만 MovementComponent의 MovementMode 값이 변하는 문제를 해결하기 위해 코드를 뜯어보다가 MovementComponent가 OwningCharacter라는 변수를 가지고 있는 것을 확인했습니다.

테스트 해 본 결과, MovementComponent가 Attach한 Character 객체였습니다.

이를 통해 Character가 선언한 변수나 함수에 접근이 가능해졌고,

OnMovementStop 함수를 선언해 기능을 이전했습니다.

 

이 외에는 크게 문제 해결을 하지 못했습니다.

길어도 일주일이면 갈피를 찾을 줄 알았는데 생각보다 정리가 잘 되지 않습니다.

그래서 당분간 우선적으로 수정 할 문제들과 시도한 것, 시도할 것을 개발일지로 적으려 합니다.

문젲가 모두 해결될 때까지 누적으로 위 사항들을 작성해나가겠습니다.

 

해결해야 할 부분

  • 멀티플레이 시 Character를 찾지 못한다는 warning
  • Client에서 Interaction시 MovementMode가 변경 되었다가 몇 tick 후 원상복귀 됨
    • MovementMode를 write 하는 부분을 지워보았으나 여전히 값이 원상복귀됨.
    • 로직 상 문제라기 보다는 원래 구현상 있는 기능 중 무언가를 놓친 것 같다.
    • MovementComponent 코드를 읽어보면서 예상되는 부분을 찾아보자.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.23 개발일지  (2) 2020.05.23
20.05.21 개발일지  (0) 2020.05.21
20.05.18 개발일지  (0) 2020.05.18
20.05.16 개발일지  (0) 2020.05.16
20.05.14 개발일지  (0) 2020.05.14

https://www.acmicpc.net/contest/view/116

 

2015 ACM-ICPC 연습

 

www.acmicpc.net

오늘은 저번에 풀다 만 Virus 문제를 풀고, Party 문제를 해석하였습니다.

 

Virus 문제에서 고민을 했던 순회, 고립 등의 문제는 발생하지 않았습니다.

조건 상으로도 발생하지 않기도 했지만, 애당초 그런 입력을 주지 않는 것 같습니다.

코드를 제출 한 결과 50% 부분에서 시간초과가 났습니다.

대부분 이 부분에서 문제가 생기는 것 같은데, 몇 가지 시도를 하다가 우선은 보류하였습니다.

Vector를 사용하는 것이 문제가 될거라 생각하지는 않습니다.

동적할당으로 바꾸면 문제 해결에 도움은 될것이지만, 근본적인 알고리즘이 문제일 것이라 생각합니다.

 

Party는 아싸 컴공 학생들을 간호과 학생과 미팅시켜주는 문제입니다.

컴공과 학생과 간호과 학생을 불러 파티를 개최합니다.

파티 후 간호과 학생들이 선호하는 컴공과 학생 중 한명과 데이트를 합니다.

이 때 최소 몇번의 파티를 개최하면 모든 컴공과 학생들이 최소 1번은 데이트를 하는지 구하는 문제입니다.

단, 파티를 아무리 해도 모든 학생이 데이트를 하는 것이 불가능 하다면 이를 따로 출력해야 합니다.

 

문제 푸는 방식을 구상하는 것은 다음 주에 할 예정입니다.

'개발일지 > Algorithm' 카테고리의 다른 글

20.06.02 2015 ACM-ICPC 연습  (0) 2020.06.02
20.05.26 - 2015 ACM-ICPC 연습  (0) 2020.05.26
20.05.12 - 2015 ACM-ICPC 연습  (0) 2020.05.12
20.05.05 - 2015 ACM-ICPC 연습  (0) 2020.05.05
알고리즘 일지입니다.  (0) 2020.05.01

몇 주간의 개발 진행 기간을 거쳐 일주일간 발버둥 쳤으나 결국 정체기가 왔습니다.

 

오늘은 Multiplay 시작 시 발생하는 warning과 Climb 아무때나 시도되는 현상 수정,

그리고 Multiplay 상에서의 Climb를 살펴보았습니다.

 

우선 warning부분입니다.

로그를 자세히 보니, 상단에 Error가 발생하였습니다.

LogPlayerController: Error: EnableInput can only be specified on a PlayerController for itself 

이런 오류인데, EnableInput 호출 시 발생하는 문제입니다.

어디선가 무언가가 꼬인 것이라는 느낌이 있는데 아직 해결할 겨를이 안나기도 하고,

테스트에 문제가 없다고 판단하여 우선은 보류하고자 합니다.

 

Climb 문제는 Interaction 조건이 MovementMode로만 판단이 되고 있어서

실제로 벽이 있는지 없는지는 상관 없이 벽타기가 가능했습니다.

이를 해결하면서, 점프 중에 Climb가 되지 않는 현상도 수정했습니다.

 

마지막으로 Multiplay 중 Client의 Climb가 불가능한 현상입니다.

결론적으로 MovementType은 코드가 일부 누락이 되어 이를 추가해 수정하였지만.

MovementMode는 상호작용 시 값이 변했음에도 그 직후 값이 원상복귀가 되고 있습니다.

만약 Replicated라면 편안하게 RPC 함수를 만들었을테지만, 그렇지도 않아 해결방안에 고민이 듭니다.

 

다음에는 우선 Character의 Tick에 구현되어 있는 속도 조절 코드를 제거할 생각입니다.

MovementComponent에 OnMovementUpdate 함수에 추가를 해보고자 합니다.

그 이후에는 군데군데 건드려보면서 Multiplay상에서 Client의 Climb가 가능하도록 할 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.21 개발일지  (0) 2020.05.21
20.05.20 개발일지  (0) 2020.05.20
20.05.16 개발일지  (0) 2020.05.16
20.05.14 개발일지  (0) 2020.05.14
20.05.13 개발일지  (0) 2020.05.13

+ Recent posts