Bonjour,
J'ai créer une classe en C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | // Fill out your copyright notice in the Description page of Project Settings. #include "RollGame.h" #include "Ball.h" // Sets default values ABall::ABall() { // 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; RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent")); CameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm")); CameraSpringArm->AttachTo(RootComponent); CameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f,50.0f), FRotator(-60.0f, 0.0f, 0.0f)); CameraSpringArm->TargetArmLength = 400.0f; CameraSpringArm->bEnableCameraLag = true; CameraSpringArm->CameraLagSpeed = 3.0f; Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera")); Camera->AttachTo(CameraSpringArm, USpringArmComponent::SocketName); StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BallMesh")); StaticMesh->SetMobility(EComponentMobility::Movable); StaticMesh->SetStaticMesh(AssetSM_Ball); AutoPossessPlayer = EAutoReceiveInput::Player0; } // Called when the game starts or when spawned void ABall::BeginPlay() { Super::BeginPlay(); } // Called every frame void ABall::Tick( float DeltaTime ) { Super::Tick( DeltaTime ); { } } // Called to bind functionality to input void ABall::SetupPlayerInputComponent(class UInputComponent* InputComponent) { Super::SetupPlayerInputComponent(InputComponent); InputComponent->BindAxis("ForwardAxis", this, &ABall::MoveForward); InputComponent->BindAxis("RightAxis", this, &ABall::MoveRight); } void ABall::MoveForward(float AxisValue){ MovementInput.X = FMath::Clamp<float>(AxisValue, -1.0f, 1.0f); } void ABall::MoveRight(float AxisValue){ MovementInput.Y = FMath::Clamp<float>(AxisValue, -1.0f, 1.0f); } |
et le .h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "GameFramework/Pawn.h" #include "Ball.generated.h" UCLASS() class ROLLGAME_API ABall : public APawn { GENERATED_BODY() public: // Sets default values for this pawn's properties ABall(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void Tick( float DeltaSeconds ) override; // Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override; protected: UPROPERTY(EditAnywhere) USpringArmComponent* CameraSpringArm; UCameraComponent* Camera; UStaticMeshComponent* StaticMesh; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = StaticMeshAssets) UStaticMesh* AssetSM_Ball; FVector2D MovementInput; void MoveForward(float AxisValue); void MoveRight(float AxisValue); }; |
Je créer un blueprint partant de cette classe dans l'éditeur, et dans celui-ci je choisis mon mesh à partir de mes assets. Je le positionne dans la scène. Cependant il n'apparaît pas dans le viewport, ni dans le jeu. Je pense que c'est parce que j'assigne le mesh dans le constructeur, sauf que lorsque je construis l'objet, je n'ai pas encore choisis le mesh. Ainsi, il n'est jamais mis à jour.
Auriez vous une solution?
Autre question, y-a til un moyen de mettre à jour les blueprints déjà créer à partir d'une classe C++, pour par exemple ajouter les nouveaux components ou valeurs par défauts que l'on aurait mis dans le constructeur.
Merci et bonne soirée !
+0
-0