一、前言

我使用的虚幻4引擎版本为4.25.3,碰到的问题是针对官网C++编程教程中第一人称设计游戏教程出现的情况。

二、问题与实现

2.1、缺少引用的编译错误

如图1所示的步骤2.7中,将官网的代码Copy到工程文件中编译不通过;

图1

实现方式:添加确实的引用头文件“#include "Camera/CameraComponent.h"  ”,这个头文件是声明变量“

// FPS 摄像机。
UPROPERTY(VisibleAnywhere)
UCameraComponent* FPSCameraComponent;

必须的,可通过鼠标右键选中“UCameraComponent”这个类,然后点击速览定义弹出“UCameraComponent”的定义,如图2所示

图2

最后鼠标悬浮在右边的“CameraComponent”上会提示这个类的包含路径,将最后两个路径名字即

#include "Camera/CameraComponent.h" 添加都.h文件的头部,注意一定不能在#include "FPSCharacter.generated.h" 的下面,否则会

#pragma once#include "GameFramework/Character.h"
#include "Camera/CameraComponent.h"   //必须手动添加这个头文件
#include "FPSCharacter.generated.h"  UCLASS()
class FPSPROJECT_API AFPSCharacter : public ACharacter
{GENERATED_BODY()
...
}

编译报错。同样在后续出现的引用报错都可以采用这种方式解决。

2.2、问题二:3.2节中的Fire函数实现Copy官网的代码报错,如图3所示,这个“Instigator”我没找到怎么解决方法,只能注释掉,但是注释

图3

之后居然还能实现射击效果。

2.3、模型不能一起导入

如图4a所示,这个案例教程一共有三个模型,我将这三个模型一起拖入虚幻4编辑器的文件夹中后如图4b所示

图4a

图4b

在3.2-实现射击这一节中设置组件“ProjectileMeshComponent”的Static Mesh部分选择刚刚导入的Sphere模型作为这个组件的网格,如图5所示选不到这个网格模型:

图5

实现方法:删除Sphere模型重新单独导入一份该模型 。

2.4、代码中设置了子弹的生命周期时间大于零,子弹不消失的问题

// Sets default values
AFPSProjectile::AFPSProjectile()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;// 3 秒后消亡。InitialLifeSpan = 1.0f;// 使用球体代表简单碰撞。
...
}

在3.3 - 设置发射物的碰撞和生命周期这一节中设置了子弹的生命周期为1.0秒,但是在运行的时候子弹并没有消失。

实现方法:在蓝图BP_FPSProjectile中点击BP_FPSProjectile(self),如图6所示在Detail面板中找到InitialLifeSpan 并修改其为大于零的值,为0则表示子弹不消失。这里是因为C++代码的编译不能改变蓝图的面板上的设置,并且以面板上的设置为主,这个跟Unity中的问题有点类似。

图6

2.5、教程的3.5 - 在视口中添加准星编译不过问题

         这里创建的FPSHUD类需要添加头文件“"Engine/Canvas.h",代码如下:

// Fill out your copyright notice in the Description page of Project Settings.#include "FPSHUD.h"
#include "Engine/Canvas.h"
#include "FPSProject.h"void AFPSHUD::DrawHUD()
{Super::DrawHUD();if (CrosshairTexture){// 找到画布中心。FVector2D Center(Canvas->ClipX * 0.5f, Canvas->ClipY * 0.5f);// 纹理维度进行一半偏移,使纹理中心和画布中心对齐。FVector2D CrossHairDrawPosition(Center.X - (CrosshairTexture->GetSurfaceWidth() * 0.5f), Center.Y - (CrosshairTexture->GetSurfaceHeight() * 0.5f));// 在中心点绘制准星。FCanvasTileItem TileItem(CrossHairDrawPosition, CrosshairTexture->Resource, FLinearColor::White);TileItem.BlendMode = SE_BLEND_Translucent;Canvas->DrawItem(TileItem);}
}

2.6、无法移动的问题

         这个实在是有点迷,我也没有找到更好的解决办法。情况是这样,当我完成“2.3-实现角色移动函数”这一个步骤的时,运行游戏我的角色无法移动,我不知道为什么,检查了各种设置和代码都对。最后当我把AFPSProjectGameModeBase里面的StartPlay方法注释掉


#pragma once#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "FPSProject1GameModeBase.generated.h"/*** */
UCLASS()
class FPSPROJECT1_API AFPSProject1GameModeBase : public AGameModeBase
{GENERATED_BODY()// virtual void StartPlay() override;
};

相应的 AFPSProject1GameModeBase.cpp里面该方法的实现也注释掉:

#include "FPSProject1GameModeBase.h"//void AFPSProject1GameModeBase::StartPlay()
//{
//  if (GEngine)
//  {
//      GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("juast test!"));
//  }
//}

然后就可以奇迹般的运行了,真是迷。

2.7、无法添加网格模型

         2.8 - 为角色添加第一人称模型中在代码里面动态添加了手臂的网组件后需要手动再在BP_FPSCharacter 的蓝图的FPSMesh组件中添加网格模型。然后,当改变了

 FPSMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FPSMeshShowsdsdsd"));

中的TEXT内容并编译

 FPSMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FPSMeshShowsdsdsd"));

蓝图中的FMSMesh组件就看不到Detail面板了,也即无法手动给该组件添加网格模型。这个时候就需要注释掉创建组件的代码编译一次,然后再取消注释并编译才可以恢复看到该组件的Detail面板,也即通过这样才可以改变TEXT里的内容而不影响蓝图中的FPSMesh的组件内容。

三、总结

3.1、 在生成的时候,出现了两次虚幻4编辑器崩的情况不知道什么原因;

3.2、声明了新的组件类型的变量一定要添加对应的头文件;

3.3、不要将模型一次性全部拖拽式导入到编辑器中;

3.4、我还没找到原因的问题是在Character类设置打印消息时候,打印的代码放在BeginPlay中不显示消息,一定要放在构造函数中,当删除掉GameMode中的StartPlay方法时,在Character类的BeginPlay中写打印消息可以显示。

3.5、蜜汁疑惑:无法移动,注销掉AFPSProject1GameModeBase里面的StartPlay方法才可以继续移动。

虚幻4脱坑指南——官网C++编程教程中第一人称设计游戏教程的若干问题及解决方法相关推荐

  1. [专栏精选]Unity中编码Encoding脱坑指南

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...

  2. 群晖emby服务端下载(弃坑,官网已经能顺畅访问)

    (弃坑,官网已经能顺畅访问,无需代下) 众所周知,emby现在已经无法直接下载群晖版服务端软件了,网络上虽然可以下载到3.5.3老版本,但是现在官网下载的新客户端(手机或者电视盒子版)已经不再支持老版 ...

  3. Redis 脱坑指南

    原文地址:Redis 脱坑指南 博客地址:http://www.extlight.com 一.前言 Redis 是一款 key-value 内存数据库.由于其上手快,执行效率高,拥有多种数据结构,支持 ...

  4. Android 7.0脱坑指南

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. Android适配系列: Android 6.0 的动态权限管理 Android 7.0脱坑指南 Android 8.0适配指北 ...

  5. 技术人综合症脱坑指南

    We_Can_Do_It.jpg 上周遇到一设计师,改了几次设计稿,在电话中尥蹶子不干了.boss在边低声问:"设计师都这样?" 其实心高气傲的岂止是设计师?程序员,工程师,大部分 ...

  6. STM8S系列单片机脱坑指南

    STM8S脱坑指南 你好!这是你第一次使用 STM8S003K3 .如果你想学习如何使用STM8S003K3, 可以速速滚蛋,因为这一点也不好玩.理由如下: 1.参考资料少 2.官方资源少且混乱 3. ...

  7. 快速下载Spring官网下载dist.zip中所有jar,例如spring-5.2.10.RELEASE-dist.zip

    下载Spring官网下载dist.zip中所有jar,例如spring-5.2.10.RELEASE-dist.zip 下载地址:http://repo.spring.io/libs-release- ...

  8. mysql官网下载最新版升级版本多版本安装教程

    mysql官网下载最新版升级版本多版本安装教程 有好多人经常问我有没有mysql的安装包,很是无语,因为问的很多 ,所以今天就写一个教程. 1.下载安装包 点击打开下载地址:mysql官网下载地址,打 ...

  9. 极品飞车20ps4服务器位置,极品飞车20官网在哪?中文官网地址一览

    极品飞车20官网在哪?中文官网地址一览 2017-06-04 11:36:25来源:游戏下载编辑:评论(0) <极品飞车20:复仇>已经正式公布,官方近日正式宣布中文官网上线.中文官网在哪 ...

最新文章

  1. linux gedit如何保存 退出
  2. jsp中去掉超链接下划线吗_好烦啊,PPT 插入超链接,文字自动变色还有下划线!还不能改?!...
  3. 回归分析之线性回归(N元线性回归)
  4. flink sink jdbc没有数据_No.2 为什么Flink无法实时写入MySQL?
  5. ReactNative从零到完整项目-Flexbox使用
  6. C语言的面向对象设计之 X264,FFMPEG 架构探讨
  7. 190219每日一句
  8. centos7修改ip(centos7修改时区)
  9. 基于UDP协议的Java聊天室
  10. 数据交换平台-初步设计
  11. thymeleaf模板引擎即时生效的问题
  12. “数仓”-MPP与 MR的区别
  13. 炒股魅力:数据分析侠变身“赚钱机器”
  14. 全国各地迎来降雪,我们准备了五件发热好物,让你暖暖度过这个寒冬 | 钛空实测
  15. python中列表概念,Python 列表的简单介绍
  16. Flink——实时计算引擎
  17. 黎曼积分并非战无不胜
  18. 通过一个测试项目了解EF CORE
  19. 聊天机器人ChatGPT刷爆网络,我们与它聊了聊量子计算
  20. scGEMA:基于单细胞多组学增强子的基因调控网络推断

热门文章

  1. 熔断器Hystrix配置及使用
  2. 设计模式---状态模式(State Pattern)
  3. 广告投放分析(Python,Sql)
  4. Begin...end
  5. Sublime的使用小技巧
  6. 网易前端微专业课程讨论区问答精选
  7. 计算机流量的单位是什么,单位g和ml哪个大?
  8. 消除ImageList 图片锯齿
  9. C语言游戏之贪吃蛇--链表实现
  10. 云开发系列课程 | FaaS场景下的SSR框架