转载来源--大侠刘茗

转载地址-->https://zhuanlan.zhihu.com/p/41709219

项目原理如下:在黑洞外部是它的作用范围,主要是给游戏中的具有物理特性的Actor加一个径向力,是它飞向黑洞。

在黑洞的内部,会触发一个函数,删除当前进入黑洞的Actor。于是一个黑洞小游戏就完成了。

1.新建UE4工程(第三人称工程,c++版本),取名BlackHole

2.添加新项-->新建C++类

3.选择父类,Actor,继续

4.取名BlackHoleActor,选择公有(注意公有之后的文件位置就不一样了,这个后面说) ,创建,等待vs部分创建完成

5.h文件

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BlackHoleActor.generated.h"class USphereComponent;
class UStaticMeshComponent;UCLASS()
class BLACKHOLE_API ABlackHoleActor : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's propertiesABlackHoleActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;UPROPERTY(VisibleAnywhere, Category = "Components")UStaticMeshComponent* MeshComp;/*物体碰到黑洞表面会被销毁*/UPROPERTY(VisibleAnywhere, Category = "Components")USphereComponent* InnerSphereComponent;/*黑洞的作用范围*/UPROPERTY(VisibleAnywhere, Category = "Components")USphereComponent* OuterSphereComponent;/*重叠事件*/UFUNCTION()void OverlapInnerSphere(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
public: // Called every framevirtual void Tick(float DeltaTime) override;};

6.cpp文件

// Fill out your copyright notice in the Description page of Project Settings.
//注意这里头文件路径,因为公有了所以系统自动生成的不要了更改如下
#include "../Public/BlackHoleActor.h"
#include "Components/SphereComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Engine.h"
// Sets default values
ABlackHoleActor::ABlackHoleActor()
{// 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;MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));//取消黑洞Mesh的碰撞,使黑洞可以吸入物体MeshComp->SetCollisionEnabled(ECollisionEnabled::NoCollision);RootComponent = MeshComp;InnerSphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("InnerSphereComp"));InnerSphereComponent->SetSphereRadius(100);InnerSphereComponent->SetupAttachment(MeshComp);//绑定重叠事件,使吸入的物体被销毁InnerSphereComponent->OnComponentBeginOverlap.AddDynamic(this, &ABlackHoleActor::OverlapInnerSphere);OuterSphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("OuterSphereComp"));OuterSphereComponent->SetSphereRadius(3000);OuterSphereComponent->SetupAttachment(MeshComp);
}// Called when the game starts or when spawned
void ABlackHoleActor::BeginPlay()
{Super::BeginPlay();}
void ABlackHoleActor::OverlapInnerSphere(UPrimitiveComponent * OverlappedComponent, AActor * OtherActor, UPrimitiveComponent * OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{if (OtherActor){GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::Red, FString::Printf(TEXT("a actor is died!")));OtherActor->Destroy();}
}
// Called every frame
void ABlackHoleActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);TArray<UPrimitiveComponent*> OverlappingComps;OuterSphereComponent->GetOverlappingComponents(OverlappingComps);for (int32 i = 0; i < OverlappingComps.Num(); i++){UPrimitiveComponent* PrimComp = OverlappingComps[i];//检查是否模拟物理if (PrimComp && PrimComp->IsSimulatingPhysics()){// the component we are looking for! It needs to be simulating in order to apply forces.const float SphereRadius = OuterSphereComponent->GetScaledSphereRadius();// Negative value to make it pull towards the origin instead of pushing awayconst float ForceStrength = -2000; //添加径向力PrimComp->AddRadialForce(GetActorLocation(), SphereRadius, ForceStrength, ERadialImpulseFalloff::RIF_Constant, true);}}}

7.进入UE4,编译

8.编译成功后,新建蓝图类,选择BlackHole,确定

9.命名,然后将蓝图类拖入游戏内,接下来就是显示出来

10.点击刚才拖入的蓝图类,点击 细节中的   添加组件,选择球体

11.更改外观,选择basecolor

12.现在开始创建多个Actor,用来展示黑洞的威力

13.添加新项-->蓝图类-->Actor,命名,然后将Actor 拖入游戏中,和黑洞一样添加组件将其显示出来。

14.给Actor添加物理属性,双击Actor,在细节栏中找到Simulate Physics,然后勾选

15.全部完成后,再编译一下,然后运行程序,结果如下

[UE4][C++]第一个简单的小游戏--黑洞引力相关推荐

  1. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)

    用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...

  2. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain-创建窗体 ​ BallJPanel- ...

  3. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  4. java做小窗体_java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​坐标.大小.颜色.方向.速度 2.抽象类:Ball ​设计类:BallMain-创建窗体 ​BallJPanel-画小球 ...

  5. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  6. unity编写一个简单的小游戏

    unity编写一个简单的小游戏 简易fly bird的制作 关于flybird 场景的搭建和素材的导入 使用素材搭建game和scene 制作柱体 bird的script column的sprite ...

  7. 用Python做一个超简单的小游戏(一听就懂)

    前言 有的人可能学过一点Python基础,但不知道干什么好.今天就教大家做一个简单的小游戏 未经允许,禁止转载 文章目录 前言 写它会用到 源码先抛出来 知识讲解 random 介绍 语法 方法参数表 ...

  8. HTML5小游戏-简单抽奖小游戏

    换了新工作以后,专注前端开发,平常空闲时间也比较多,可以多钻研一下技术,写一下博客.最近在学习canvas,参考网上的slotmachine插件,用canvas实现了一个简单抽奖小游戏.       ...

  9. JS实现简单农场小游戏

    JS实现简单农场小游戏 简介 效果展示 代码实现 在线预览 简介 最近抽空写了一个简单的农场小游戏,比较简陋,目的只是为了练习js开发能力. 游戏界面顶部包含昵称.经验值.等级和金币信息展示.经验的获 ...

最新文章

  1. centos设置固定IP方法
  2. R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、华夫饼图适合于同类型指标的比较(Waffle Chart)
  3. C#委托使用详解(Delegates)
  4. ImportError: cannot import name 'six'解决
  5. BugkuCTF-MISC题random color
  6. MapReduce任务学习系列
  7. python是什么东西
  8. Python获取图片的大小/尺寸
  9. Python nose测试工具报ImportError: No Module named 错误
  10. CSDN下载频道积分2.0
  11. win10如何解决非系统盘中出现的msdia80.dll文件
  12. 万张脸部图片合成平均脸,26家公司颜值大PK
  13. 数据分析大数据面试题大杂烩01
  14. 基础破解XP/Win 7开机密码方法(粘滞键漏洞)
  15. Metasploit(一)
  16. jQuery按钮切页样式
  17. python3 高效实现 最大质因数/质因数集合 方法
  18. SAS操作知识点记录
  19. GEE中MODIS地表反射率产品比较
  20. 天梯22模拟 L3-2 拼题A打卡奖励 (30 分)

热门文章

  1. python标示注释符号_【填空题】Python使用符号( ) 标示单行注释 (5.0分)
  2. Ubuntu18.04右上角没有输入法图标解决
  3. 6-2. 实战项目:足球运动员分析
  4. 【C语言必经之路——第14节】指针进阶(1)
  5. zzuli OJ 1125: 上三角矩阵的判断
  6. 乍暖还寒时候,火锅不能停
  7. 【android】AS中使用Junit单元测试和Android JUnit 单元测试
  8. Asp.Net(C#)使用oleDbConnection 连接Excel
  9. 微服务实战项目-学成在线-课程发布模块
  10. 用 JavaScript 写一个卡片小游戏