Hello,
My C++ character class is named “VRSoldier”.
My skeletal mesh for this class is named “Soldier_ru_01”.
I have multiple questions :
1)
I would like to attach my VR camera to the head of my skeletal mesh, with C++.
I haven’t found documentation less than 5 years old and deprecated…
My current constructor in VRSoldier.cpp is :
// Sets default values
AVRSoldier::AVRSoldier()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// On cherche le skeletal mesh qui sera utilisé dans notre conteneur pour l'instant vide
static ConstructorHelpers::FObjectFinder<USkeletalMesh> SK_SoldierMesh(TEXT("SkeletalMesh'/Game/Soldier_ru_01/Meshes/Soldier_ru_01.Soldier_ru_01'"));
// On assigne le skeletal mesh à notre conteneur
SoldierMesh = GetMesh();
SoldierMesh->SetSkeletalMesh(SK_SoldierMesh.Object);
// Create a first person mesh component for the owning player.
//SoldierMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Soldier_ru_01"));
VRCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("VRCamera"));
//Attach the VR camera to the SoldierMesh.
VRCamera->AttachToComponent(SoldierMesh, FAttachmentTransformRules::SnapToTargetIncludingScale);
VRCamera->bLockToHmd = 1;
// Make sure the mesh casts shadows
SoldierMesh->bCastDynamicShadow = true;
SoldierMesh->CastShadow = true;
}
The declarations (public) in VRSoldier.h are :
// Soldier mesh
UPROPERTY(EditAnywhere, Category = Mesh)
class USkeletalMeshComponent* SoldierMesh;
// VR camera.
UPROPERTY(VisibleAnywhere)
class UCameraComponent* VRCamera;
So I want to attach the camera to the head bone, or to its child socket named “headSocket” that I made.
It is probably related to AttachToComponent() but I don’t know how to do it.
2)
Currently, the Camera should be a child of the mesh considering I wrote this :
VRCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("VRCamera"));
//Attach the VR camera to the SoldierMesh.
VRCamera->AttachToComponent(SoldierMesh, FAttachmentTransformRules::SnapToTargetIncludingScale);
But for some reason, when I open the Blueprint class derived from my VRSoldier C++ class, the VRCamera is at the same level as the mesh, instead of being a child?
3)
When I place my Blueprint class in the level, for an unknown reason the camera is far from the mesh & capsule, however by default in the blueprint editor it’s shown inside of the capsule, and I manually moved it to the eyes height…
Why am I able to move it with the mouse, by the way, considering I defined it in C++ so I can only set the scale in the blueprint editor right panel, nothing else?
4)
I am currently using AttachToComponent, but I have seen AttachTo being used in old versions. Is it deprecated now?
5)
I have seen an old deprecated C++ [tutorial][5] where Epic is placing the mesh as a child of the camera. However, all modern examples I saw had the camera as a child of the mesh. Which version is better considering I want to use a VR camera, and create an aimspace to get the body to react to the camera? I am using a full body to create a “true FPP” character, and I will later implement inversed kinematic to control the arms with the motioncontrollers.
6)
I have set VRCamera->bLockToHmd = 1;
(= LockToHeadMountDisplay) in the character class constructor. So I expected this option to be non-accessible from the derived blueprint class editor, but it is still accessible. Why?