UE4官方滚球项目源码笔记
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官方滚球项目源码笔记相关推荐
- 终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记
为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书籍之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...
- python视屏教程_终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记...
为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书啃之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...
- unity3d游戏3d局域网联机吃球游戏完整项目源码分享
unity3d游戏3d局域网联机吃球游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1APlOCmoK9aUfiVJD48dBQA 提取码:p5nl 复制这 ...
- c语言编程球球大作战,C/C++项目源码——球球大作战
C/C++项目源码--球球大作战 这是一个球球大作战的小程序,能够运行,需要下载一个easyx库 初始产生一个小球,可以慢慢吃零食长大 游戏没有写完整,不能吃别的玩家(单机初始化产生的玩家) 有兴趣可 ...
- ugui源码_UGUI 源码笔记(一)文件结构和部分组件使用
这是我阅读 UGUI 源码记录的相关笔记,共三部分.文件结构和部分组件使用.输入事件.核心部分 ZeroyiQ:UGUI 源码笔记(一)文件结构和部分组件使用 ZeroyiQ:UGUI 源码笔记(二) ...
- Manim文档及源码笔记-CE文档-示例库3使用Manim绘图
Manim文档及源码笔记-CE文档-示例库3使用Manim绘图 参考原文: Manim Community Edition Example Gallery 前言 笔记随想: 暂未发现官方中文版,自己实 ...
- Android项目源码分享
├─android web应用 │ jqmDemo_static.zip │ jqmMobileDemo-master.zip │ jqmMobileDemo1_1-ma ...
- redis源码笔记 - 刘浩de技术博客 - 博客园
redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 记录发现的一个hiredis的bug 摘要: hiredis是redis ...
- Atitit. 查找linux 项目源码位置
Atitit. 查找linux 项目源码位置 1. netstat -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...
最新文章
- linux usb驱动
- 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
- (Hook)SetWindowsHookEx和UnhookWindowsHookEx
- 一文搞懂 什么是CPU上下文?为什么要切换?如何减少切换?
- 如何自建appender扩展Log4j框架
- Docker 基础介绍及配置安装 [一]
- 辨异 —— 有两人生日在同一天、只有两人生日在同一天
- 事务和锁机制是什么关系
- python aes加解密
- Qunee for HTML5的学习与使用笔记(一)
- 干货流出|腾讯内部几近满分的项目管理课程PPT
- 盘点.确保物联网设备顺利运行的9项测试
- ubuntu编辑只读文件_Ubuntu linux vim 修改只读文件 修改Apache2端口号 ports.conf
- 树莓派4B EC20 查看4G信号强度
- 量子信息-学习记录13
- 马航 失联飞机 猜想
- 汉威大厦中智公积金_中智租房支取公积金相关说明
- 【数据统计】— 数据分布、集中趋势、离散程度
- 可以把将日文汉字转换成平假名、片假名、罗马音的KaKaSi
- WordPress Gutenberg Block API:简介