Имеется класс PlayerBall наследованный от Pawn с такими компонентами
//...
private:
//components
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* BallBaseMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
USphereComponent* BallHitSphere;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
USpringArmComponent* BallSpringArm;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
UCameraComponent* BallCamera;
//functions
void LeftRightMovement(float Value);
//...
В Конструкторе класса прописаны привязанности
APlayerBall::APlayerBall()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
BallHitSphere = CreateDefaultSubobject<USphereComponent>(TEXT("BallHitSphere"));
RootComponent = BallHitSphere;
BallBaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BallBaseMesh"));
BallBaseMesh->SetupAttachment(RootComponent);
BallSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("BallSpringArm"));
BallSpringArm->SetupAttachment(RootComponent);
BallCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("BallCamera"));
BallCamera->SetupAttachment(BallSpringArm);
}
И есть блупринт, который наследует от этого класса
Я пытаюсь дать этому мячику физику для движения вверх вниз, включив физику и запретив движение по координатам x, y. Но столкнулся с небольшой проблемой:
При попытке симулировать физику на SphereComponent, физика работает правильно, но ограничения на шар не применяются и он просто падает.
А при попытке симулировать физику на StaticMesh шар ведёт себя именно так, как я и хотел, но он просто "отваливается" от остальных компонентов.
Очень хотелось бы понять почему при симуляции на SphereComponent не работают ограничители и почему шар "вываливается" из SphereComponent при симуляции на StaticMesh (если объяснение займёт много времени, то и ссылки на конкретную документацию достаточно, я на этом этапе просто не уверен куда даже там смотреть). Можно ли решить мою проблему в лоб или проще реализовать класс по другому?
UPD: Пользователь
Quark направил меня в нужном направлении, проблема решилась тем, что корневым компонентом нужно было сделать StaticMesh, вместо SphereComponent. Но вопрос всё ещё стоит. Что если будет необходимо оставить SphereComponent как корневой компонент. Хорошая ли эта практика использовать StaticMesh как корневой компонент Pawn'a?