Hi I’m new to Unreal engine and I’m moving from Unity. My goal is to make a simple third / first person shooter to get the hang of Unreal engines workflow and learn how Unreal does things. I got a few years of programming experience so I read the documentation and got a simple third person character up and running. I’m stuck on getting my weapon to attach to my characters left hand. It attaches to the bottom of the character and follows him. Been looking around the internet and can only find tutorials for blueprints for the most part. In Unity all I would have to do is parent a mesh to a joint either in Maya or in engine and swap out the mesh when needed. I think I did this correctly for the most part in Unreal. I checked and I do have a Socket called “SocketWeapon_1” in the assigned blueprint animation being used by the character. Am I assigning it to the wrong mesh???
Thanks for your help and time.
Code
ACharacterBase::ACharacterBase()
{
TurnRate = 45.0f;
LookRate = 45.0f;
WeaponNotDrawedArmLength = 140;
WeaponDrawedArmLength = 110;
AimingArmLength = 70;
GetCapsuleComponent()->InitCapsuleSize(42.0f, 96.0f);
bUseControllerRotationPitch = false;
bUseControllerRotationYaw = false;
bUseControllerRotationRoll = false;
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
CameraBoom->AttachTo(RootComponent);
CameraBoom->TargetArmLength = WeaponNotDrawedArmLength;
CameraBoom->SocketOffset =* new FVector(0, 40, 50);
CameraBoom->bUsePawnControlRotation = true;
CameraBoom->bInheritPitch = true;
CameraBoom->bInheritYaw = true;
CameraBoom->bInheritRoll = true;
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
FollowCamera->AttachTo(CameraBoom, USpringArmComponent::SocketName);
FollowCamera->bUsePawnControlRotation = false;
GetCharacterMovement()->bOrientRotationToMovement = true;
GetCharacterMovement()->RotationRate = FRotator(0.0f, 540.0f, 0.0f);
GetCharacterMovement()->JumpZVelocity = 600.f;
GetCharacterMovement()->AirControl = 0.2f;
//HERE IS WERE I ADD THE WEAPON IN CODE
WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Weapon"));
WeaponMesh->bCastDynamicShadow = false;
WeaponMesh->CastShadow = false;
WeaponMesh->AttachTo(Mesh, TEXT("SocketWeapon_1"), EAttachLocation::SnapToTargetIncludingScale, true);
GunOffset = FVector(100.0f, 30.0f, 10.0f);
AutoPossessPlayer = EAutoReceiveInput::Player0;
}
void ACharacterBase::BeginPlay()
{
Super::BeginPlay();
}
void ACharacterBase::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
InputComponent->BindAxis("LeftVerticalAxis", this, &ACharacterBase::MoveVertical);
InputComponent->BindAxis("LeftHorizontalAxis", this, &ACharacterBase::MoveHorizontal);
InputComponent->BindAxis("RightVerticalAxis", this, &APawn::AddControllerPitchInput);
InputComponent->BindAxis("RightHorizontalAxis", this, &APawn::AddControllerYawInput);
InputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
InputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
InputComponent->BindAction("Aim", IE_Pressed, this, &ACharacterBase::StartAiming);
InputComponent->BindAction("Aim", IE_Released, this, &ACharacterBase::StopAiming);
}
void ACharacterBase::MoveVertical(float Value)
{
if ((Controller != NULL) && (Value != 0.0f))
{
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0);
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
AddMovementInput(Direction, Value);
}
}
void ACharacterBase::MoveHorizontal(float Value)
{
if ((Controller != NULL) && (Value != 0.0f))
{
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0);
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(Direction, Value);
}
}
void ACharacterBase::StartAiming()
{
CameraBoom->TargetArmLength = AimingArmLength;
bUseControllerRotationYaw = true;
}
void ACharacterBase::StopAiming()
{
CameraBoom->TargetArmLength = WeaponDrawedArmLength;
bUseControllerRotationYaw = false;
}