【问题标题】:How to LaunchCharacter from another class如何从另一个类 LaunchCharacter
【发布时间】:2019-10-24 14:06:23
【问题描述】:

我创建了一个 LaunchPad actor C++ 类,它由一个 Cube 静态网格组件和一个 UBox 组件编译而成。到目前为止,一旦角色与命中框重叠,它就会触发 ALaunchPad::OnBoxBeginOverlap 内的任何内容。我目前正试图告诉当角色与 UBox 重叠时,将它们在空中启动,类似于蓝图的“LaunchCharacter”节点。

LaunchPad.cpp

void ALaunchPad::OnBoxBeginOverlap(UPrimitiveComponent*  OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) 
{
    GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("Character Launched!"));
    Asgd240_1115350_core5Character::LaunchCharacter(FVector(0, 0, velocity), false, true);

}

LaunchPad.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LaunchPad.generated.h"


UCLASS()
class SGD240_1115350_CORE5_API ALaunchPad : public AActor
{
    GENERATED_BODY()

public: 
    // Sets default values for this actor's properties
    ALaunchPad();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public: 
    // Called every frame
    virtual void Tick(float DeltaTime) override;

    void OnBoxBeginOverlap(UPrimitiveComponent * HitComp, AActor * OtherActor, UPrimitiveComponent * OtherComp, FVector NormalImpulse, const FHitResult & Hit);

    UPROPERTY(VisibleAnywhere)
    class UBoxComponent* Collide;

    UFUNCTION()
    void OnBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

    UPROPERTY(EditAnywhere)
        float velocity;

    UFUNCTION()
        void LaunchCharacter();

};

目前我收到一个'非静态成员引用必须是相对于特定对象的,它不会编译。有什么想法吗?

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

    OtherActor 转换为ACharacter,然后调用其LaunchCharacter 方法:

    void ALaunchPad::OnBoxBeginOverlap(UPrimitiveComponent*  OverlappedComp, AActor* OtherActor, 
            UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, 
            const FHitResult& SweepResult) 
    {
        GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("Character Launched!"));
    
        ACharacter* OtherCharacter = Cast<ACharacter>(OtherActor);
        if (OtherCharacter != nullptr)
        {
            OtherCharacter->LaunchCharacter(FVector(0, 0, velocity), false, true);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2017-05-03
      • 2014-03-01
      • 2011-11-14
      相关资源
      最近更新 更多