[코테] 백준 - 숨바꼭질 5(17071)
·
언리얼엔진(UE)
문제수빈이와 동생의 출발 지점 제공 (N, K)수빈이는 이동 선택지가 3가지(+1, -1, *2)동생은 이동 선택지가 1가지(매초 전에 이동한 거리의 +1만큼 이동)수빈이와 동생이 만날 수 있는 가장 빠른 시간을 구할 것풀이완전탐색 문제로 분류BFS를 이용하여 수빈이와 동생의 위치를 추적하면 될것으로 추정ㅡ> 결과적으로 실패 및 시간 초과동생의 이동 거리는 등차수열이므로 시간만 특정되면 계산 가능수빈이의 경우만 -1의 선택지를 통해 뒤로 돌아올 수 있음더불어 +1도 있으므로 2초마다 같은 자리에 있는 것도 가능수빈이의 이동 거리와 시간이 중요ㅡ> 시간을 알면 동생의 이동 거리는 특정 가능하므로결과적으로 수빈이는 3가지 선택지에 의해 짝수 초, 홀수 초마다 갈 수 있는 칸이 다름ㅡ> 짝/홀로 나누어 방문체..
미친 선인장과 분노의 버섯 - #18 프로젝트 마무리
·
언리얼엔진(UE)/프로젝트
피드백좋았던 점 (Good)컴포넌트 분리코드가 모듈화되어 읽기·유지보수가 수월서버 ↔ 클라이언트 구조 분리네트워크 흐름이 명확하고, 디버깅·테스트가 용이애니메이션·UI 디자인전반적인 비주얼 퀄리티와 사용자 경험이 좋았음개선할 점 (Improvements)하드코딩된 부분 제거매직 넘버나 문자열을 상수나 데이터 테이블로 분리할 것→ 처음에 구현한 부분에서는 데이터 테이블을 통해 로드할 수 있도록 구조체 단위로 관리 But, 나중에 구현된 부분에서는 시간 부족으로 하드코딩으로 작성한 부분이 있었음 예) CharacterType(캐릭터 종류 문자열), Threshold(버퍼 제한시간) 등Burst/Super Meter 게이지 증감 Replication현재: Tick에서 매 프레임마다 게이지 증가 ..
미친 선인장과 분노의 버섯 - #17 콜리전 오버랩 이벤트 갱신
·
언리얼엔진(UE)/프로젝트
문제 상황현재 같은 공격 동작을 움직이지 않고 연속해서 실행하면 OnComponentOverlapBegin에 바인딩한 함수가 처음에만 호출같은 공격 동작에는 활성화하는 콜리전이 동일현재 캐릭터 설계 구조상 동작마다 콜리전이 매핑된 형태매핑된 콜리전을 애님 노티파이 시점에 따라 활성, 비활성하는 형태방금 실행한 동작과 다른 동작을 실행하면 여전히 정상 동작해결 과정로그 확인결과 콜리전 활성화, 비활성화 로직은 문제 없이 애님 노티파이에 따라 실행 중OnComponentOverlapBegin 함수는 Overlap이 시작될 때 호출되는 함수Overlap이 어떤식으로 인지되는지에 대한 명확한 이해 필요조사 결과 Overlap은 상태로 관리이미 겹쳐있는 상태에서는 오버랩 상태가 변화하지 않았으니 OverlapBe..
미친 선인장과 분노의 버섯 - #16 캐릭터 스테이터스와 인게임 HUD 연동
·
언리얼엔진(UE)/프로젝트
HUD에 추가될 Widget 클래스 추가SideBarWidget//SideBarWidget.hUCLASS()class CCFF_API USideBarWidget : public UUserWidget{ GENERATED_BODY() public: USideBarWidget(const FObjectInitializer& ObjectInitializer); UFUNCTION(BlueprintCallable, Category = "CCFF|UI") void UpdateBurstMeterBar(const float InPercentage); UFUNCTION(BlueprintCallable, Category = "CCFF|UI") void UpdateSuperMeterBar(const float InPerce..
미친 선인장과 분노의 버섯 - #15 버퍼를 이용한 선입력(예약) & 키 조합을 통한 액션 및 상태에 따른 동작 다변화
·
언리얼엔진(UE)/프로젝트
버퍼를 이용한 선입력 기능버퍼 구조체 USTRUCT(BlueprintType)struct FBufferedInput{ GENERATED_BODY()public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Buffer") ECharacterState InputState; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Buffer") EAttackType InputAttack; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Buffer") float BufferedTime; FBufferedInput(): InputState(ECharacterS..
미친 선인장과 분노의 버섯 - #14 더블 클릭을 통한 달리기
·
언리얼엔진(UE)/프로젝트
더블 클릭을 통한 달리기//BaseCharacter.h FVector2D LastMoveInputDirection; float LastMoveInputTime; float DoubleTapThreshold; uint8 bIsDoubleTab; //BaseCharacter.cppvoid ABaseCharacter::Move(const FInputActionValue& Value){ // input is a Vector2D FVector2D MovementVector = Value.Get(); //Detect Double Tap(Sprint) //Get input direction vector FVector2D CurrentInputDirection=MovementVector.GetSafe..
미친 선인장과 분노의 버섯 - #13 카메라 회전 트러블 슈팅 + 클라이언트 UI 상태 변화에 따른 업데이트
·
언리얼엔진(UE)/프로젝트
카메라 회전 트러블문제PlayerStart가 회전되었을 때, 캐릭터가 돌아간 방향으로 스프링암이 함께 회전되지 않음위 현상의 영향으로 키 입력에 따른 움직임 방향이 의도대로 작동하지 않음해결 과정SetWorldRotation을 이용한 것이 문제인가 싶어 SetRelativeRotation을 이용하여 회전 시도ㅡ> 문제는 그대로 발생SpringArm의 'bInheritYaw=true'으로 변경 시도ㅡ> 캐릭터가 움직이는 방향으로 카메라도 함께 회전하면서 의도에서 벗어남현재 스프링암의 회전값을 설정해 주는 코드는 생성자에 위치PlayerStart에서 스폰되는 캐릭터는 결국 생성자에서 카메라에 지정한 회전값대로 스폰ㅡ> 설정에서 캐릭터의 회전값을 따라가지 않도록 해놓았기 때문에 PlayerStart에서 스폰되..
미친 선인장과 분노의 버섯 - #12 네트워크 환경에서의 동기화 및 UX(사용자 경험) 개선
·
언리얼엔진(UE)/프로젝트
UX 개선void ABaseCharacter::Attack1(const FInputActionValue& Value){ if (bCanAttack==true&&GetCharacterMovement()->IsFalling()==false) { UE_LOG(LogTemp,Warning,TEXT("Attack1 Called !!")); ServerRPCAttack(0,GetWorld()->GetGameState()->GetServerWorldTimeSeconds()); // Play Montage in Owning Client if (HasAuthority()==false&&IsLocallyControlled()==true) { bCanAttack=false; OnRep_CanAttack();..
미친 선인장과 분노의 버섯 - #11 싱글 플레이 -> 멀티 플레이 전환 (네트워크 기반 설계)
·
언리얼엔진(UE)/프로젝트
멀티 플레이 환경에 맞게 함수 리팩토링공격 가능한지 판단할 변수 추가BaseCharacter.h{ UPROPERTY(ReplicatedUsing=OnRep_CanAttack) uint8 bCanAttack : 1; UFUNCTION() void OnRep_CanAttack();} BaseCharacter.cppABaseCharacter::ABaseCharacter(){ bCanAttack=true;}void ABaseCharacter::OnRep_CanAttack(){ if (bCanAttack==true) { GetCharacterMovement()->SetMovementMode(MOVE_Walking); } else { GetCharacterMovement()->SetMovementMode(..
미친 선인장과 분노의 버섯 - #10 동작에 알맞은 콜리전, Hit 관련 정보 매핑 구조 설계
·
언리얼엔진(UE)/프로젝트
동작에 맞는 콜리전 및 Hit 관련 정보 매핑 구조현재 키 입력에 따라 시행되는 동작은 Enum 타입으로 관리 중Enum 타입의 문자열과 Data Table의 RowName이 일치하도록 작성CharacterType + Enum 타입 문자열 형태로 알맞은 RowName 형성 RowName으로 각 데이터 테이블에서 공격 범위에 관련된 데이터 구조체 AttackCollision, 피격 효과에 관련된 데이터 구조체 HitBoxData를 로드이 과정에서 함께 로드된 두 정보가 매핑된 형태여야 함TMap 또는 TArray를 2개 쓰는 방식 중 선택TMap의 경우 작성자 입장에서 간편하게 사용할 수 있겠지만 성능에 민감한 게임에서 동작이 시행될때마다 피격 관련 정보를 찾기 위해 시간복잡도 logN만큼의 시간을 쓰는 ..

.menu_toolbar { display: none !important; }