Hello, I try assort Shooter Sample Source code. I try create own shooter from blank project, but I can not attach weapon to character. Whet I click play, i get Acces violution error (Access violation reading location 0x0000000000000000)
In Character class i made property with weapons:
UPROPERTY (EditDefaultsOnly, Category=Inventory) TArray<TSubclassOf<class AWeapon> > DefaultInventoryClasses;
And in PostInitializeComponents I spawn default weapons:
void AFPSCharacter::SpawnDefaultInventory() {
int32 NumWeaponClasses = DefaultInventoryClasses.Num();
for (int32 i = 0; i < NumWeaponClasses; i++) {
if (!DefaultInventoryClasses[i]) continue;
FActorSpawnParameters SpawnInfo;
SpawnInfo.bNoCollisionFail = true;
AWeapon* NewWeapon = GetWorld()->SpawnActor<AWeapon>(DefaultInventoryClasses[i], SpawnInfo);
AddWeapon(NewWeapon);
}
// equip first weapon in inventory
if (Inventory.Num() > 0) {
EquipWeapon(Inventory[0]);
}
}
AddWeapon
void AFPSCharacter::AddWeapon (class AWeapon* Weapon) {
Inventory.AddUnique (Weapon);
}
EquipWeapon
void AFPSCharacter::EquipWeapon (class AWeapon* Weapon) {
Weapon->SetOwningPawn(this);
Weapon->OnEquip();
}
SetOwningPawn
void AWeapon::SetOwningPawn (AFPSCharacter* NewOwner) {
if (MyPawn != NewOwner) {
MyPawn = NewOwner;
SetOwner (NewOwner);
}
}
OnEquip
void AWeapon::OnEquip() {
AttachMeshToPawn();
}
AttachMeshToPawn
void AWeapon::AttachMeshToPawn() {
if (!MyPawn) return;
DetachMeshFromPawn();
FName AttachPoint = MyPawn->GetWeaponAttachPoint();
USkeletalMeshComponent* UseWeaponMesh = GetWeaponMesh();
USkeletalMeshComponent* UsePawnMesh = MyPawn->GetSpecifcPawnMesh();
Mesh1P->SetHiddenInGame (false);
Mesh1P->AttachTo (UsePawnMesh, AttachPoint);
}
DetachMeshFromPawn
void AWeapon::DetachMeshFromPawn() {
Mesh1P->DetachFromParent();
Mesh1P->SetHiddenInGame(true);
}