Sergio 2.1
Оракул
(65550)
1 месяц назад
Проблема в том, что твой предмет толкается персонажем, потому что у него включена симуляция физики (SetSimulatePhysics(true)), поэтому нужно ее отключить (SetSimulatePhysics(false)), а также настроить коллизии предмета и персонажа на пересечение: установить для компонента предмета SetCollisionEnabled(ECollisionEnabled::QueryOnly), SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Overlap) и SetGenerateOverlapEvents(true), и убедиться, что у персонажа коллизии настроены аналогично для генерации событий пересечения — тогда при соприкосновении с игроком предмет будет "съедаться", как и должно быть.
RootComponent = MyRootComponent;
SnakeEeatMesh = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("/Engine/BasicShapes/Sphere")).Object;
class UMaterialInstance* EeatColor;
EeatColor = ConstructorHelpers::FObjectFinderOptional<UMaterialInstance>(TEXT("MaterialInstanceConstant'/Game/SnakeContetent/Materials/InstanceMaterials/M_Metal_Gold_Inst.M_Metal_Gold_Inst'")).Get();
FVector Size = FVector(0.6f, 0.6f, 0.6f);
class UStaticMeshComponent* EeatChank = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Eeat"));
EeatChank->SetStaticMesh(SnakeEeatMesh);
EeatChank->SetRelativeScale3D(Size);
EeatChank->SetRelativeLocation(FVector(0, 0, 0));
EeatChank->SetMaterial(0, EeatColor);
EeatChank->AttachTo(MyRootComponent);
EeatChank->SetSimulatePhysics(true);
}
// Called when the game starts or when spawned
void AMyAppleActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyAppleActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
CollectEeat();
}
void AMyAppleActor::CollectEeat()
{
TArray<AActor*> CollectedActors;
GetOverlappingActors(CollectedActors);
for (int32 i = 0; i < CollectedActors.Num(); ++i)
{
AMySnakeActor* const Test = Cast<AMySnakeActor>(CollectedActors[i]);
if (Test)
{
Test->VisibleBodyChanck++;
Destroy(true, true);
break;
}
}
}