수업자료 받고 generate 했는데 에러나서 봤더니 이곳이 자동으로 처리가 안되있는데 이거 수동으로 바꿔야 하나요?? + 이 플러그인 메세지도 있어서 봤더니 이게 Visual Integration Tool 말하는 거인지는 잘 모르겠으나, 처음엔 프로젝트가 실행도 안됐는데 Visual Integration Tool 을 엔진에 추가하고 나서는 실행은 되네요. 하지만 빨간줄은 안 없어지는것 같아요.
8강 소프트 레퍼런싱에 대해서 강의를 듣다가 에셋이 로딩되고 객체에 할당되는 과정에 궁금증이 생겼습니다. 제 생각은 다음과 같습니다. 에셋이 로딩되면 에셋의 데이터를 가지고 객체를 만든다. 그리고 해당 에셋을 사용하는 클래스가 인스턴싱될 때 로딩된 에셋(객체화된 에셋)을 복사해서 추가한다. 만약 같은 에셋을 사용하는 클래스가 두 개 이상이라면, 로딩된 에셋을 두 번 복사하게 된다. 즉, 에셋을 로딩한다는 것은 복사를 위한 원본 객체를 생성하는 것을 의미한다. 제 생각이 맞을까요?
"메타사운드를 활용한 무기 사운드 디자인" 잘 들었습니다, 알찬 내용 감사합니다, 궁금한것이 있는데요 hit 사운드를 거리에 따라 소리가 작어졌다 커졌다는 어찌 하는것 일까요? 저 나름 해봤는데 이 방법이 맞나요? blue print에서 play Sound at Location 으로 연결하고 Get Actor Location 상자를 연결해 주었습니다. attenuation 프리셋값 지정해 주었구요 선생님이 사용하시는 3d사운드 거리별 감쇠 효과에 대해 정보 부탁해요. ㅜㅡㅠ 감사합니다
안녕하세요. 유니티를 다루다가 언리얼을 공부하고자 해당 강의 구매 후 시청 전에 질문 드릴 것이 있어 남깁니다. 유니티로 게임 로직을 구현할 때 경험상 씬(언리얼에서는 레벨이라고 하는 것 같습니다)을 통해 간단하게 로그인씬->로비씬->인게임씬의 로직으로 게임이 구현되는데요. 강의 내용의 서버는 인게임씬에 해당하는 것인지 로그인씬, 로비씬 같은 것도 구현이 가능한 것인지 궁금합니다. 인게임씬에 해당하여 다른 씬은 따로 구현해야한다면 1강이나 2강을 보면 도움이 될 지도 궁금합니다. 감사합니다.
ComboTimer의시간을 설정하는 float ComboEffectiveTime = (ComboActionData->EffectiveFrameCount[ComboIndex] / ComboActionData->FrameRate) / AttackSpeedRate; 이 코드가 1초를 30Frame으로 잡고 원하는 Frame까지 시간을 체크하기위해서 시간계산 용으로 이해했는데 위같은 방법 대신 Animation Montage BluePrint 에서 Notify로 설정하고 함수를 호출하는 방법은 성능적 차이가 클까요?? 아니면 그냥 개발자의 선택에 따른 차이일까요??
Weapon이 primaryasset으로 안들어가서 그런가 싶어서 weapon의 데이터를 봤는데 Primary Asset Type은 ABItemData(비쥬얼스튜디오에서는 복사붙여넣기로 넣은거라 이름이 다를 리는 없을 거같습니다.)로 들어가있었습니다. 근데 박스가 생성될 때 assets의 num을 찍어보니 3이 아닌 2가 나오는거 보니 인식이 안되는 거 같은데 엔진의 문제일 수도 있나요?
안녕하세요 설명대로 구현햇는데..올리신 영상이랑 결과가 달라 질문드립니다 1.강의 영상에는 제일 안쪽까지 들어갔나가 나올때 음악이 꺼졌다가 다른 트리거 볼륨으로 가면 다른 음악이 재생되는데..(10분49초정도) 강좌와 똑같이 쿼츠 구성한 후 실행을 하면 음악이 꺼지지를 않은 상태에서 다른 음악이 재생되는거 같습니다 (사운드큐는 루프가 되게 설정하는건 맞죠?) 2.아 그리고 들어갔던 같은 장소를 다시 반복적으 들어가면 소리가 중첩되며 소리의 크기가 점점 커지는거같습니다 요 두가지를 해결할라면 어떻게 해야할까요?
BeginPlay 함수를 오버라이딩 하실 때 void AABCharacterPlayer::BeginPlay() { Super::BeginPlay(); APlayerController* PlayerController = CastChecked<APlayerController>(GetController()); if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController)) { Subsystem->AddMappingContext(DefaultMappingContext, 0); // Subsystem->RemoveMappingContext(DefaultMappingContext); } } 와 같이 정의하셨는데, ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController) 이 함수에서 인수가 일치하지 않는다는 오류가 발생합니다. 선생님 코드를 보면 동일한 코드임에도 실행이 잘 되던데, 저는 이 부분 때문에 빌드가 안되고 있습니다. 인수가 ULocalPlayer가 들어와야 한다고 해서, APlayerController이 아닌 ULocalPlayer로 캐스팅도 해봤는데, 런타임에서 바로 터집니다. 혹시 어느 부분이 문제일까요? 모듈에는 EnhancedInput 추가했고, 로그에 해당 오류 말고 다른 오류가 발생하고 있지는 않습니다.
아마 성능을 위해 애니메이션 블루프린트 로직이 작업자 스레드에서 돌아가도록 옵션 켜는게 있는 것 같은데요. 많은 다른 예제에서 블루프린트 EventGraph 대신 Blueprint Thread Safe Update Animation 이라는 블루프린트 함수를 대신 사용하고 또, C++ 로도 NativeUpdateAnimation() 대신 NativeThreadSafeUpdateAnimation() 가 있더라구요. 그리고 블루프린트 전용 함수에서도 ThreadSafe 옵션을 켜고 끄는게 있는데 이걸 켜면 일반적인 C++ 함수를 호출할 수 없고, C++ 함수에 Meta = (BlueprintThreadSafe) 지정자를 설정하면 보이긴 하는데요. 여기서 NativeThreadSafeUpdateAnimation() 함수나 Meta = (BlueprintThreadSafe) 지정자를 붙인 C++ 함수에는동기화 기법( mutex 같은)을 사용해서 정말 내부적으로도 멀티스레드 프로그래밍 같이 코드를 짜야 하는건가요???
TObjectPtr 클래스에는 static_assert 선언이 되어있습니다. UObject 에서 파생된 클래스인지 검사하고 에러메시지를 표시해주게 되는데요. 우리가 평소 어떤 액터 클래스나 컴포넌트 클래스를 생성해서 사용할 때 내부에 TObjectPtr 을 사용해서 UObject 클래스를 등록하고 사용하게 됩니다. 문제는 UObject 의 헤더파일을 바로 포함시키기 보다는 중복 참조와 컴파일 시간을 줄이기 위해서 전방선언으로 처리하는 경우입니다. 이때 전방선언된 UObject 의 파생 클래스는 실제로 UObject 에서 파생되었는지 이 시점에서는 알 수 없습니다. 하지만 실제로 그렇게 사용해보면 문제없이 사용되는 것을 확인 할 수 있었습니다. 왜 TObjectPtr의 static_assert의 조건을 통과하는 것일까요? Ex) class UInputAction; TObjectPtr<UInputAction> UTestAction; // 왜 에러가 아닐까요?