tank-papa 发表于 2017-8-22 03:52:52

[RESOLVED] Can not cast“UCapsuleComponent TO USceneCompon

UPDATE:
I have found the solution on here https://answers.unrealengine.com/questions/658827/camera-issue-in-tutorial.html
=============
UE4.16.3, 第一人称视角教程此步报错: 2.7 - 更改摄像机视图 , 可能是什么原因呢?

Build:

1>------ 已启动生成: 项目: UE4, 配置: BuiltWithUnrealBuildTool Win32 ------
2>------ 已启动生成: 项目: FPSProject, 配置: Development_Editor x64 ------
2>Compiling game modules for hot reload
2>Performing 3 actions (4 in parallel)
2>FPSCharacter.cpp
2>D:\work\ue-project\FPSProject\Source\FPSProject\FPSCharacter.cpp(15): error C2664: “void USceneComponent::SetupAttachment(USceneComponent *,FName)”: 无法将参数 1 从“UCapsuleComponent *”转换为“USceneComponent *”
2>D:\work\ue-project\FPSProject\Source\FPSProject\FPSCharacter.cpp(15): note: 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
2>ERROR : UBT error : Failed to produce item: D:\work\ue-project\FPSProject\Binaries\Win64\UE4Editor-FPSProject-8701.dll
2>Total build time: 10.05 seconds (Local executor: 0.00 seconds)
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.MakeFile.Targets(37,5): error MSB3075: 命令“C:\EpicGames\UE_4.16\Engine\Build\BatchFiles\Build.bat FPSProjectEditor Win64 Development "D:\work\ue-project\FPSProject\FPSProject.uproject" -waitmutex”已退出,代码为 5。请验证您是否有足够的权限来运行此命令。
========== 生成: 成功 1 个,失败 1 个,最新 0 个,跳过 0 个 ==========

----------------
Header:

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

#pragma once

#include "CoreMinimal.h"
#include "Camera/CameraComponent.h"
#include "Engine/World.h"
#include "GameFramework/Character.h"
#include "FPSCharacter.generated.h"

UCLASS()
class FPSPROJECT_API AFPSCharacter : public ACharacter
{
      GENERATED_BODY()

public:
      // Sets default values for this character's properties
      AFPSCharacter();

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

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

      // Called to bind functionality to input
      virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

      // 处理前后移动的输入。
      UFUNCTION()
      void MoveForward(float Value);

      // 处理左右移动的输入。
      UFUNCTION()
      void MoveRight(float Value);

      // Sets jump flag when key is pressed.
      UFUNCTION()
      void StartJump();

      // Clears jump flag when key is released.
      UFUNCTION()
      void StopJump();

      UPROPERTY(VisibleAnywhere)
      UCameraComponent* FPSCameraComponent;

};


----------
CPP

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

#include "FPSCharacter.h"


// Sets default values
AFPSCharacter::AFPSCharacter()
{
         // 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;

      // Create a first person camera component.
      FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
      // Attach the camera component to our capsule component.
      FPSCameraComponent->SetupAttachment(GetCapsuleComponent());
      // Position the camera slightly above the eyes.
      FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight));
      // Allow the pawn to control camera rotation.
      FPSCameraComponent->bUsePawnControlRotation = true;

}

// Called when the game starts or when spawned
void AFPSCharacter::BeginPlay()
{
      Super::BeginPlay();

      if (GEngine)
      {
                // 显示调试信息五秒。-1“键”值(首个参数)说明我们无需更新或刷新此消息。
                GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));
      }
      
}

// Called every frame
void AFPSCharacter::Tick(float DeltaTime)
{
      Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void AFPSCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
      Super::SetupPlayerInputComponent(PlayerInputComponent);

      // Set up "movement" bindings.
      PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
      PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);

      // Set up "look" bindings.
      PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput);
      PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);

      // Set up "action" bindings.
      PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
      PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);

}

void AFPSCharacter::MoveForward(float Value)
{
      // Find out which way is "forward" and record that the player wants to move that way.
      FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
      AddMovementInput(Direction, Value);
}

void AFPSCharacter::MoveRight(float Value)
{
      // Find out which way is "right" and record that the player wants to move that way.
      FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
      AddMovementInput(Direction, Value);
}

void AFPSCharacter::StartJump()
{
      bPressedJump = true;
}

void AFPSCharacter::StopJump()
{
      bPressedJump = false;
}


macrogu 发表于 2020-5-22 10:11:32

#include "Camera/CameraComponent.h"
到C++
页: [1]
查看完整版本: [RESOLVED] Can not cast“UCapsuleComponent TO USceneCompon