В вашем коде есть несколько моментов, которые нужно уточнить и исправить, чтобы правильно задать статический меш для компонента `ItemMesh`.
1. **Инициализация `TESTMESH`**: Убедитесь, что `TESTMESH` правильно настроен и привязан к этому экземпляру класса. Если `TESTMESH` не был установлен в редакторе или через код, то он будет равен `NULL`, что может привести к проблемам при вызове `SetStaticMesh`.
2. **Использование метода `SetStaticMesh`**: Метод `SetStaticMesh` не возвращает булево значение. Вместо этого используйте `SetStaticMesh` для установки меша и убедитесь, что именно тот меш, который вы хотите установить, действительно доступен.
3. **Установка меша**: Убедитесь, что вы вызываете `SetStaticMesh` после того, как рамках класса инициализированы, и что `TESTMESH` передается в качестве аргумента.
Ниже приведен улучшенный код:
```cpp
// код в .h файле
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Assets")
UStaticMesh* TESTMESH; // Учтите, что этот меш должен быть установлен в редакторе или в конструкторе
// код в .cpp файле
AMainCharacter::AMainCharacter()
{
PrimaryActorTick.bCanEverTick = true;
// Инициализация ItemMesh
ItemMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshInHand"));
ItemMesh->SetupAttachment(RootComponent);
// Установите статический меш по умолчанию здесь, если это необходимо
if (TESTMESH) // Убедитесь, что TESTMESH корректно установлен
{
ItemMesh->SetStaticMesh(TESTMESH);
}
}
void AMainCharacter::SelectSlot_2() {
if (ItemMesh) {
// Установите статический меш, если он доступен
if (TESTMESH) {
ItemMesh->SetStaticMesh(TESTMESH);
UE_LOG(LogTemp, Warning, TEXT("TESTMESH successfully set to ItemMesh"));
} else {
UE_LOG(LogTemp, Error, TEXT("TESTMESH is NULL"));
}
} else {
UE_LOG(LogTemp, Error, TEXT("ItemMesh is not initialized"));
}
}
```
### Альтернативные способы назначения меша:
1. **Установка в редакторе**: Убедитесь, что вы установили `TESTMESH` в редакторе для экземпляра вашего персонажа. Это можно сделать в параметрах объекта в Editor из Unreal Engine.
2. **Задание в инициализации**: Если вы хотите установить меш программно, например, загружая его из контента, вы можете использовать `ConstructorHelpers::FObjectFinder`:
```cpp
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("StaticMesh'/Game/Path/To/Your/StaticMesh.StaticMesh'"));
if (MeshAsset.Succeeded()) {
TESTMESH = MeshAsset.Object;
}
```
Убедитесь, что вы указали правильный путь к статическому мешу.
### Проверка в игре
После выполнения всех необходимых шагов, запустите игру и проверьте логи. Если `TESTMESH` установлен и все компоненты инициализированы корректно, вы должны увидеть предупреждение в логах, что меш был успешно установлен.