UE4官方滚球项目源码笔记

我的项目名称:test_0511,读者请根据自己的项目名称自行查找(YourProgramNameBall.h/YourProgramNameBall.cpp
笔者是UE4的初学者,光看官方文档没什么感觉,还是选择读一读官方的示例项目。写这个笔记的主要原因是自学记录用,欢迎各位指点。

test_0511Ball.h

类定义
class Atest_0511Ball : public APawn
{静态网格体组件* Ball;弹簧臂组件* SpringArm;摄像机组件* Camera;public:Atest_0511Vall();float JumpImpulse;  // 输入跳跃指令时添加垂直脉冲float RollTorque; //转动球体时要提供的力矩bool bCanJump; //表明是否可以跳跃,用于阻止二段跳protected://运动函数void MoveRight(float Val);void MoveForward(float Val);void Jump();//发生碰撞时的交互,重写原有函数,添加了一个关于bCanJump的赋值功能virtual void NotifyHit(class UPrimitiveComponent* MyComp, class AActor* Other, class UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit) override;//为pawn添加控制输入,重写加入了输入命令virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;//处理输入开始和停止的事件void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location);void TouchStopped(ETouchIndex::Type FingerIndex, FVector Location);public:/** Returns Ball subobject **/FORCEINLINE class UStaticMeshComponent* GetBall() const { return Ball; }/** Returns SpringArm subobject **/FORCEINLINE class USpringArmComponent* GetSpringArm() const { return SpringArm; }/** Returns Camera subobject **/FORCEINLINE class UCameraComponent* GetCamera() const { return Camera; }
}

test_0511Ball.cpp

#include "test_0511Ball.h"
#include "UObject/ConstructorHelpers.h"
#include "Camera/CameraComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Components/InputComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "Engine/CollisionProfile.h"
#include "Engine/StaticMesh.h"// 构造函数
Atest_0511Ball::Atest_0511Ball()
{//载入静态网格体static ConstructorHelpers::FObjectFinder<UStaticMesh> BallMesh(TEXT("/Game/Rolling/Meshes/BallMesh.BallMesh"));Ball = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Ball0"));Ball->SetStaticMesh(BallMesh.Object);//更改碰撞类型Ball->BodyInstance.SetCollisionProfileName(UCollisionProfile::PhysicsActor_ProfileName);Ball->SetSimulatePhysics(true);// 设置线性和角度阻尼Ball->SetAngularDamping(0.1f);Ball->SetLinearDamping(0.1f);// MassScale或许可以理解为密度? 按照物体的缩放倍率改变大小Ball->BodyInstance.MassScale = 3.5f;// 该物体的最大角速度Ball->BodyInstance.MaxAngularVelocity = 800.0f;Ball->SetNotifyRigidBodyCollision(true);RootComponent = Ball;// 给根节点附加一个摄像机弹簧臂SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm0"));SpringArm->SetupAttachment(RootComponent);SpringArm->bDoCollisionTest = false;SpringArm->SetUsingAbsoluteRotation(true); // Rotation of the ball should not affect rotation of boomSpringArm->SetRelativeRotation(FRotator(-45.f, 0.f, 0.f));SpringArm->TargetArmLength = 1200.f;SpringArm->bEnableCameraLag = false;SpringArm->CameraLagSpeed = 3.f;// 附加一个摄像机到弹簧臂上Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera0"));Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);Camera->bUsePawnControlRotation = false; // We don't want the controller rotating the camera// Set up forcesRollTorque = 50000000.0f;JumpImpulse = 350000.0f;bCanJump = true; // Start being able to jump
}// 绑定输入
void Atest_0511Ball::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{// set up gameplay key bindingsPlayerInputComponent->BindAxis("MoveRight", this, &Atest_0511Ball::MoveRight);PlayerInputComponent->BindAxis("MoveForward", this, &Atest_0511Ball::MoveForward);PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &Atest_0511Ball::Jump);// handle touch devices  鼠标touch start&endPlayerInputComponent->BindTouch(IE_Pressed, this, &Atest_0511Ball::TouchStarted);PlayerInputComponent->BindTouch(IE_Released, this, &Atest_0511Ball::TouchStopped);
}//运动函数
void Atest_0511Ball::MoveRight(float Val)
{const FVector Torque = FVector(-1.f * Val * RollTorque, 0.f, 0.f);Ball->AddTorqueInRadians(Torque);
}void Atest_0511Ball::MoveForward(float Val)
{const FVector Torque = FVector(0.f, Val * RollTorque, 0.f);Ball->AddTorqueInRadians(Torque);
}void Atest_0511Ball::Jump()
{if(bCanJump){const FVector Impulse = FVector(0.f, 0.f, JumpImpulse);Ball->AddImpulse(Impulse);bCanJump = false;}
}void Atest_0511Ball::NotifyHit(class UPrimitiveComponent* MyComp, class AActor* Other, class UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit)
{Super::NotifyHit(MyComp, Other, OtherComp, bSelfMoved, HitLocation, HitNormal, NormalImpulse, Hit);// 碰撞时可以跳动,可以实现踩墙二段跳(笑)bCanJump = true;
}// 下面两个函数有点意义不明,不是和Jump函数完全一致么?
void Atest_0511Ball::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location)
{if (bCanJump){const FVector Impulse = FVector(0.f, 0.f, JumpImpulse);Ball->AddImpulse(Impulse);bCanJump = false;}}void Atest_0511Ball::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location)
{if (bCanJump){const FVector Impulse = FVector(0.f, 0.f, JumpImpulse);Ball->AddImpulse(Impulse);bCanJump = false;}
}

UE4官方滚球项目源码笔记相关推荐

  1. 终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记

    为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书籍之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...

  2. python视屏教程_终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记...

    为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书啃之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...

  3. unity3d游戏3d局域网联机吃球游戏完整项目源码分享

    unity3d游戏3d局域网联机吃球游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1APlOCmoK9aUfiVJD48dBQA 提取码:p5nl 复制这 ...

  4. c语言编程球球大作战,C/C++项目源码——球球大作战

    C/C++项目源码--球球大作战 这是一个球球大作战的小程序,能够运行,需要下载一个easyx库 初始产生一个小球,可以慢慢吃零食长大 游戏没有写完整,不能吃别的玩家(单机初始化产生的玩家) 有兴趣可 ...

  5. ugui源码_UGUI 源码笔记(一)文件结构和部分组件使用

    这是我阅读 UGUI 源码记录的相关笔记,共三部分.文件结构和部分组件使用.输入事件.核心部分 ZeroyiQ:UGUI 源码笔记(一)文件结构和部分组件使用 ZeroyiQ:UGUI 源码笔记(二) ...

  6. Manim文档及源码笔记-CE文档-示例库3使用Manim绘图

    Manim文档及源码笔记-CE文档-示例库3使用Manim绘图 参考原文: Manim Community Edition Example Gallery 前言 笔记随想: 暂未发现官方中文版,自己实 ...

  7. Android项目源码分享

    ├─android web应用 │      jqmDemo_static.zip │      jqmMobileDemo-master.zip │      jqmMobileDemo1_1-ma ...

  8. redis源码笔记 - 刘浩de技术博客 - 博客园

    redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 记录发现的一个hiredis的bug 摘要: hiredis是redis ...

  9. Atitit. 查找linux 项目源码位置

    Atitit. 查找linux 项目源码位置 1. netstat   -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...

最新文章

  1. linux usb驱动
  2. 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
  3. (Hook)SetWindowsHookEx和UnhookWindowsHookEx
  4. 一文搞懂 什么是CPU上下文?为什么要切换?如何减少切换?
  5. 如何自建appender扩展Log4j框架
  6. Docker 基础介绍及配置安装 [一]
  7. 辨异 —— 有两人生日在同一天、只有两人生日在同一天
  8. 事务和锁机制是什么关系
  9. python aes加解密
  10. Qunee for HTML5的学习与使用笔记(一)
  11. 干货流出|腾讯内部几近满分的项目管理课程PPT
  12. 盘点.确保物联网设备顺利运行的9项测试
  13. ubuntu编辑只读文件_Ubuntu linux vim 修改只读文件 修改Apache2端口号 ports.conf
  14. 树莓派4B EC20 查看4G信号强度
  15. 量子信息-学习记录13
  16. 马航 失联飞机 猜想
  17. 汉威大厦中智公积金_中智租房支取公积金相关说明
  18. 【数据统计】— 数据分布、集中趋势、离散程度
  19. 可以把将日文汉字转换成平假名、片假名、罗马音的KaKaSi
  20. WordPress Gutenberg Block API:简介

热门文章

  1. 二、获取永久IP地址服务器
  2. 美国公司信息查询网站
  3. 17 Privacy Lost:Dose Anybody Care ? 失去隐私,有人在乎吗 ?
  4. C语言编程中实现输入密码回显星号
  5. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换
  6. 单细胞数据分群的几种方法
  7. 大数据开发之windows安装hadoop教程
  8. eclipse---之调优,调试图文说明
  9. excel手机版_移动版Office办公软件推出,微软终于想通了,后来居上
  10. 开源运营当论迹不论心