UE4 PhysicalMaterial 설정 및 검색에 대한 메모
9453 단어 위 4UnrealEngine4UnrealC++
개요
UnrealEngine 의 물리 머티리얼 (PhysicalMaterial) 의 설정과 취득에 관한 메모입니다.
단순한 콜리전(SimpleCollision)과 복잡한 콜리전(ComplexCollision)의 경우가 있는 것 같습니다.
업데이트 내역
날짜
내용
2021/02/26
표면형의 추가 설정에 대해 추가
환경
Windows10
Visual Studio 2017
UnrealEngine 4.22
참고
다음을 참고로 해 주셔서 감사합니다.
물리적 머티리얼 사용자 가이드
ueHow - HitResult
UE4의 대규모 배경 제작 사례(콜리전편)
물리 머티리얼
콘텐츠 브라우저에서 피직스 -> 물리 머티리얼로 만들 수 있습니다.
물리적 머티리얼 획득 - 라인 트레이스에서 블록 히트 획득
라인 트레이스를 사용하여 충돌을 검사합니다. 결과가 HitResult로 돌아옵니다.
다른 트레이스 계열도 거의 함께 보인다.
C++ 코드라면 다음과 같습니다.
FVector _St;
FVector _Ed;
FHitResult HitResult;
TArray<AActor*> ActorsToIgnore;
// _Stから_EdまでのライントレースをしてぶつかったSimpleCollisionを取得する
UKismetSystemLibrary::LineTraceSingle(GetWorld(), _St, _Ed, UEngineTypes::ConvertToTraceType(ECollisionChannel::ECC_Visibility),
false, ActorsToIgnore, EDrawDebugTrace::None, _HitResult, true);
HitResult는 다음과 같은 멤버를 가지며 PhysMat에서 물리적 머티리얼을 얻을 수 있습니다.
C++ 코드라면 다음과 같습니다.
// 物理マテリアルを取得する例
auto _PhysMat = _HitResult.PhysMaterial;
if (_PhysMat != nullptr) {
// アセット名を表示
UE_LOG(LogTemp, Log, TEXT("%s"), *_PhysMat->GetName());
}
물리적 머티리얼 설정
SimpleCollision용 설정
단순한 콜리전의 경우는, 컴퍼넌트의 [Collision] -> [Phys Material Override] 에 물리 머티리얼을 설정하는 것으로 취득을 할 수 있습니다.
공란의 경우에 취득을 하면(자) 엔진의 DefaultPhysicalMateral 가 돌아오는 것 같습니다.
스태틱 메시로 설정하는 경우 Simple Collison Physical Material로 설정합니다.
ComplexCollision용 설정
복잡한 충돌의 경우 머티리얼의 [Physical Material] -> [Phys Material]로 설정합니다.
이 경우 ComplexCollision에 대해 HitResult를 검색하기 위한 추적도 수행하지 않으면 검색할 수 없습니다.
(LineTraceSingle() 의 경우는, 제5 인수 bTraceComplex 를 true 로 한다)
[Return Material on Move] 설정 정보
콜리전의 설정 [Return Material on Move]에 대해서입니다만, 이 체크를 넣지 않으면 HitResult 로 PhysicalMaterial 를 취득할 수 없을까 생각했습니다만, 바닥 등의 정적인 것에 대해서는 체크 불필요한 것 같습니다.
PhysicalMaterial 클래스의 상속에 대해서
물리적 머티리얼 클래스를 상속하여 필요한 멤버를 추가할 수 있습니다.
이하, float 를 하나 추가하고 있을 뿐의 코드 예입니다.
MyPhysicalMaterial.h#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/Object.h"
#include "Engine/EngineTypes.h"
#include "EngineDefines.h"
#include "PhysxUserData.h"
#include "Vehicles/TireType.h"
#include "PhysicsEngine/PhysicsSettingsEnums.h"
#include "Physics/PhysicsInterfaceCore.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
#include "MyPhysicalMaterial.generated.h"
class UPhysicalMaterial;
UCLASS(BlueprintType, Blueprintable, CollapseCategories, HideCategories = Object)
class TEST_API UMyPhysicalMaterial : public UPhysicalMaterial
{
GENERATED_UCLASS_BODY()
public:
// 追加パラメータ
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "AddParam")
float AddParam;
};
cpp는 생성자에서 추가 매개 변수를 초기화하고 있습니다.
MyPhysicalMaterial.cpp// コンストラクタ
UMyPhysicalMaterial::UMyPhysicalMaterial(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
Friction = 1.0f;
AddParam = 1.5f;
}
물리적 머티리얼을 만들 때 상속된 MyPhysicalMaterial 클래스를 선택할 수 있습니다.
물리적 설정 정보
표면형 추가 설정
[프로젝트 설정] -> [엔진/물리] -> [Physical Surface]
에서 커스텀 표면형을 설정할 수 있습니다.
여기에서 설정한 표면형이 물리 머티리얼 에셋의 フィジカルプロパティ
의 SurfaceType
로 설정할 수 있게 됩니다.
요약
콜리전의 모양에 따라 설정이 바뀌기 때문에 처음에는 잘 정보를 얻을 수 없어 혼란스러웠습니다. 정리해 보면 이해할 수 있습니다.
그리고는 물리 머티리얼의 설정이 되어 있는지 어떤지를 간단하게 확인할 수 있는 방법이 필요한 곳입니다. (뷰의 표시 전환 근처에서 할 수 있도록)
Reference
이 문제에 관하여(UE4 PhysicalMaterial 설정 및 검색에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/b709f146b7e7b76c2fda
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
콘텐츠 브라우저에서 피직스 -> 물리 머티리얼로 만들 수 있습니다.
물리적 머티리얼 획득 - 라인 트레이스에서 블록 히트 획득
라인 트레이스를 사용하여 충돌을 검사합니다. 결과가 HitResult로 돌아옵니다.
다른 트레이스 계열도 거의 함께 보인다.
C++ 코드라면 다음과 같습니다.
FVector _St;
FVector _Ed;
FHitResult HitResult;
TArray<AActor*> ActorsToIgnore;
// _Stから_EdまでのライントレースをしてぶつかったSimpleCollisionを取得する
UKismetSystemLibrary::LineTraceSingle(GetWorld(), _St, _Ed, UEngineTypes::ConvertToTraceType(ECollisionChannel::ECC_Visibility),
false, ActorsToIgnore, EDrawDebugTrace::None, _HitResult, true);
HitResult는 다음과 같은 멤버를 가지며 PhysMat에서 물리적 머티리얼을 얻을 수 있습니다.
C++ 코드라면 다음과 같습니다.
// 物理マテリアルを取得する例
auto _PhysMat = _HitResult.PhysMaterial;
if (_PhysMat != nullptr) {
// アセット名を表示
UE_LOG(LogTemp, Log, TEXT("%s"), *_PhysMat->GetName());
}
물리적 머티리얼 설정
SimpleCollision용 설정
단순한 콜리전의 경우는, 컴퍼넌트의 [Collision] -> [Phys Material Override] 에 물리 머티리얼을 설정하는 것으로 취득을 할 수 있습니다.
공란의 경우에 취득을 하면(자) 엔진의 DefaultPhysicalMateral 가 돌아오는 것 같습니다.
스태틱 메시로 설정하는 경우 Simple Collison Physical Material로 설정합니다.
ComplexCollision용 설정
복잡한 충돌의 경우 머티리얼의 [Physical Material] -> [Phys Material]로 설정합니다.
이 경우 ComplexCollision에 대해 HitResult를 검색하기 위한 추적도 수행하지 않으면 검색할 수 없습니다.
(LineTraceSingle() 의 경우는, 제5 인수 bTraceComplex 를 true 로 한다)
[Return Material on Move] 설정 정보
콜리전의 설정 [Return Material on Move]에 대해서입니다만, 이 체크를 넣지 않으면 HitResult 로 PhysicalMaterial 를 취득할 수 없을까 생각했습니다만, 바닥 등의 정적인 것에 대해서는 체크 불필요한 것 같습니다.
PhysicalMaterial 클래스의 상속에 대해서
물리적 머티리얼 클래스를 상속하여 필요한 멤버를 추가할 수 있습니다.
이하, float 를 하나 추가하고 있을 뿐의 코드 예입니다.
MyPhysicalMaterial.h#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/Object.h"
#include "Engine/EngineTypes.h"
#include "EngineDefines.h"
#include "PhysxUserData.h"
#include "Vehicles/TireType.h"
#include "PhysicsEngine/PhysicsSettingsEnums.h"
#include "Physics/PhysicsInterfaceCore.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
#include "MyPhysicalMaterial.generated.h"
class UPhysicalMaterial;
UCLASS(BlueprintType, Blueprintable, CollapseCategories, HideCategories = Object)
class TEST_API UMyPhysicalMaterial : public UPhysicalMaterial
{
GENERATED_UCLASS_BODY()
public:
// 追加パラメータ
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "AddParam")
float AddParam;
};
cpp는 생성자에서 추가 매개 변수를 초기화하고 있습니다.
MyPhysicalMaterial.cpp// コンストラクタ
UMyPhysicalMaterial::UMyPhysicalMaterial(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
Friction = 1.0f;
AddParam = 1.5f;
}
물리적 머티리얼을 만들 때 상속된 MyPhysicalMaterial 클래스를 선택할 수 있습니다.
물리적 설정 정보
표면형 추가 설정
[프로젝트 설정] -> [엔진/물리] -> [Physical Surface]
에서 커스텀 표면형을 설정할 수 있습니다.
여기에서 설정한 표면형이 물리 머티리얼 에셋의 フィジカルプロパティ
의 SurfaceType
로 설정할 수 있게 됩니다.
요약
콜리전의 모양에 따라 설정이 바뀌기 때문에 처음에는 잘 정보를 얻을 수 없어 혼란스러웠습니다. 정리해 보면 이해할 수 있습니다.
그리고는 물리 머티리얼의 설정이 되어 있는지 어떤지를 간단하게 확인할 수 있는 방법이 필요한 곳입니다. (뷰의 표시 전환 근처에서 할 수 있도록)
Reference
이 문제에 관하여(UE4 PhysicalMaterial 설정 및 검색에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/b709f146b7e7b76c2fda
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
물리적 머티리얼 클래스를 상속하여 필요한 멤버를 추가할 수 있습니다.
이하, float 를 하나 추가하고 있을 뿐의 코드 예입니다.
MyPhysicalMaterial.h
#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/Object.h"
#include "Engine/EngineTypes.h"
#include "EngineDefines.h"
#include "PhysxUserData.h"
#include "Vehicles/TireType.h"
#include "PhysicsEngine/PhysicsSettingsEnums.h"
#include "Physics/PhysicsInterfaceCore.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
#include "MyPhysicalMaterial.generated.h"
class UPhysicalMaterial;
UCLASS(BlueprintType, Blueprintable, CollapseCategories, HideCategories = Object)
class TEST_API UMyPhysicalMaterial : public UPhysicalMaterial
{
GENERATED_UCLASS_BODY()
public:
// 追加パラメータ
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "AddParam")
float AddParam;
};
cpp는 생성자에서 추가 매개 변수를 초기화하고 있습니다.
MyPhysicalMaterial.cpp
// コンストラクタ
UMyPhysicalMaterial::UMyPhysicalMaterial(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
Friction = 1.0f;
AddParam = 1.5f;
}
물리적 머티리얼을 만들 때 상속된 MyPhysicalMaterial 클래스를 선택할 수 있습니다.
물리적 설정 정보
표면형 추가 설정
[프로젝트 설정] -> [엔진/물리] -> [Physical Surface]
에서 커스텀 표면형을 설정할 수 있습니다.
여기에서 설정한 표면형이 물리 머티리얼 에셋의 フィジカルプロパティ
의 SurfaceType
로 설정할 수 있게 됩니다.
요약
콜리전의 모양에 따라 설정이 바뀌기 때문에 처음에는 잘 정보를 얻을 수 없어 혼란스러웠습니다. 정리해 보면 이해할 수 있습니다.
그리고는 물리 머티리얼의 설정이 되어 있는지 어떤지를 간단하게 확인할 수 있는 방법이 필요한 곳입니다. (뷰의 표시 전환 근처에서 할 수 있도록)
Reference
이 문제에 관하여(UE4 PhysicalMaterial 설정 및 검색에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/b709f146b7e7b76c2fda
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
콜리전의 모양에 따라 설정이 바뀌기 때문에 처음에는 잘 정보를 얻을 수 없어 혼란스러웠습니다. 정리해 보면 이해할 수 있습니다.
그리고는 물리 머티리얼의 설정이 되어 있는지 어떤지를 간단하게 확인할 수 있는 방법이 필요한 곳입니다. (뷰의 표시 전환 근처에서 할 수 있도록)
Reference
이 문제에 관하여(UE4 PhysicalMaterial 설정 및 검색에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/unknown_ds/items/b709f146b7e7b76c2fda텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)