Static Mesh invisible

a marqué ce sujet comme résolu.

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
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte