[UE4][C++]第一个简单的小游戏--黑洞引力
转载来源--大侠刘茗
转载地址-->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++]第一个简单的小游戏--黑洞引力相关推荐
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel- ...
- c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- java做小窗体_java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel-画小球 ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- unity编写一个简单的小游戏
unity编写一个简单的小游戏 简易fly bird的制作 关于flybird 场景的搭建和素材的导入 使用素材搭建game和scene 制作柱体 bird的script column的sprite ...
- 用Python做一个超简单的小游戏(一听就懂)
前言 有的人可能学过一点Python基础,但不知道干什么好.今天就教大家做一个简单的小游戏 未经允许,禁止转载 文章目录 前言 写它会用到 源码先抛出来 知识讲解 random 介绍 语法 方法参数表 ...
- HTML5小游戏-简单抽奖小游戏
换了新工作以后,专注前端开发,平常空闲时间也比较多,可以多钻研一下技术,写一下博客.最近在学习canvas,参考网上的slotmachine插件,用canvas实现了一个简单抽奖小游戏. ...
- JS实现简单农场小游戏
JS实现简单农场小游戏 简介 效果展示 代码实现 在线预览 简介 最近抽空写了一个简单的农场小游戏,比较简陋,目的只是为了练习js开发能力. 游戏界面顶部包含昵称.经验值.等级和金币信息展示.经验的获 ...
最新文章
- centos设置固定IP方法
- R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、华夫饼图适合于同类型指标的比较(Waffle Chart)
- C#委托使用详解(Delegates)
- ImportError: cannot import name 'six'解决
- BugkuCTF-MISC题random color
- MapReduce任务学习系列
- python是什么东西
- Python获取图片的大小/尺寸
- Python nose测试工具报ImportError: No Module named 错误
- CSDN下载频道积分2.0
- win10如何解决非系统盘中出现的msdia80.dll文件
- 万张脸部图片合成平均脸,26家公司颜值大PK
- 数据分析大数据面试题大杂烩01
- 基础破解XP/Win 7开机密码方法(粘滞键漏洞)
- Metasploit(一)
- jQuery按钮切页样式
- python3 高效实现 最大质因数/质因数集合 方法
- SAS操作知识点记录
- GEE中MODIS地表反射率产品比较
- 天梯22模拟 L3-2 拼题A打卡奖励 (30 分)
热门文章
- python标示注释符号_【填空题】Python使用符号( ) 标示单行注释 (5.0分)
- Ubuntu18.04右上角没有输入法图标解决
- 6-2. 实战项目:足球运动员分析
- 【C语言必经之路——第14节】指针进阶(1)
- zzuli OJ 1125: 上三角矩阵的判断
- 乍暖还寒时候,火锅不能停
- 【android】AS中使用Junit单元测试和Android JUnit 单元测试
- Asp.Net(C#)使用oleDbConnection 连接Excel
- 微服务实战项目-学成在线-课程发布模块
- 用 JavaScript 写一个卡片小游戏