Learning C++ by Creating Games With UE4(15.05.21)(Chapter 11-2)Monster
2015-05-21 01:00
405 查看
Chapter11-2
近战攻击
在字典中定义近战这个词是表示一群混乱的人。近战攻击就是在很近的范围内做出的行为。要做近战攻击这样一个效果,你首先需要一个近战攻击的动画,那么你需要在UE4的动画编辑里面实现它。
在C++中编写一个近战武器
我们将会定义一个新的类,MeleeWeapon 是有actor类衍生出来的,那么下面我们来看这样一个类的代码:
#pragma once
#include "GameFramework/Actor.h"
#include "MeleeWeapon.generated.h"
class AMonster;
UCLASS()
class CPLUSLEARN_API AMeleeWeapon : public AActor
{
GENERATED_UCLASS_BODY()
public:
AMeleeWeapon();
//用这个武器造成伤害的大小
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MeleeWeapon)
float AttackDamage;
//用这个列表来存储这个武器触碰到的物体,确保每一次攻击只对碰到物体造成一次伤害
TArray<AActor*> ThingsHit;
//保证没有挥动武器的时候不造成伤害
bool Swinging;
//使用武器的人物
AMonster *WeaponHolder;
//盒装碰撞器决定了该武器攻击到的范围
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = MeleeWeapon)
UBoxComponent* ProxBox;
//武器样式
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = MeleeWeapon)
UStaticMeshComponent* Mesh;
//碰撞函数
UFUNCTION(BlueprintNativeEvent, Category = "Collision")
void Prox(AActor* otherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult);
//挥动武器
void Swing();
//重置
void Reset();
};
.cpp文件
#include "CplusLearn.h"
#include "MeleeWeapon.h"
#include "Monster.h"
// Sets default values
AMeleeWeapon::AMeleeWeapon(const class FObjectInitializer & PCIP) :Super(PCIP)
{
AttackDamage = 1;
Swinging = false;
WeaponHolder = NULL;
//创建武器外形作为跟物体
Mesh = PCIP.CreateDefaultSubobject<UStaticMeshComponent>(this, TEXT("Mesh"));
RootComponent = Mesh;
//创建武器碰撞盒子
ProxBox = PCIP.CreateDefaultSubobject<UBoxComponent>(this, TEXT("ProxBox"));
//当有物体进入盒碰撞时触发Prox函数
ProxBox->OnComponentBeginOverlap.AddDynamic(this,&AMeleeWeapon::Prox);
ProxBox->AttachTo(RootComponent);
}
void AMeleeWeapon::Prox_Implementation(AActor * otherActor, UPrimitiveComponent* othrComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{
//若碰撞物体没有根组件,返回
if (othrComp != otherActor->GetRootComponent())
{
return;
}
//挥剑、碰撞到的人物不是自身 不能攻击一个人物多次
if (Swinging &&otherActor!=WeaponHolder&&!ThingsHit.Contains(otherActor))
{
otherActor->TakeDamage(AttackDamage + WeaponHolder->BaseAttackDamage, FDamageEvent(), NULL, this);
ThingsHit.Add(otherActor);
}
}
void AMeleeWeapon::Swing()
{
ThingsHit.Empty();
Swinging = true;
}
void AMeleeWeapon::Reset()
{
ThingsHit.Empty();
Swinging = false;
}
在完成基本武器的代码编写之后,我们可以从 http://tf3dm.com/3d-model/sword-95782.html 下载免费的剑的模型。
在场景中创建蓝图继承武器类,将武器的mesh选好并添加好碰撞之后
插座
插座在UE4中是一个放置物品在一套骨骼中显示另一个物体。你可以替换插座在任何的骨骼中。在你正确放置后,你可以通过其他的Actor找到插座的东西的UE4的编码中。
创建一个骨骼上插座在怪物的手里
首先找到怪物的模型,在他的手的位置加上Socket
最终加好剑后的效果
那么下面我们要通过编写代码让玩家有一把剑
我们需要打开怪物的头文件
//初始化组件
virtual void PostInitializeComponents()override;
。Cpp文件中添加
void AMonster::PostInitializeComponents()
{
Super::PostInitializeComponents();
//若武器存在
if (BPMeleeWeapon)
{
//获取武器
MeleeWeapon = GetWorld()->SpawnActor<AMeleeWeapon>(BPMeleeWeapon, FVector(), FRotator());
//有武器
if (MeleeWeapon)
{
//绑定到模型的手上
const USkeletalMeshSocket * socket = Mesh->GetSocketByName("Sword");
socket->AttachActor(MeleeWeapon, Mesh);
}
}
}
最终效果
本质上就是将武器绑定到了人物身上
近战攻击
在字典中定义近战这个词是表示一群混乱的人。近战攻击就是在很近的范围内做出的行为。要做近战攻击这样一个效果,你首先需要一个近战攻击的动画,那么你需要在UE4的动画编辑里面实现它。
在C++中编写一个近战武器
我们将会定义一个新的类,MeleeWeapon 是有actor类衍生出来的,那么下面我们来看这样一个类的代码:
#pragma once
#include "GameFramework/Actor.h"
#include "MeleeWeapon.generated.h"
class AMonster;
UCLASS()
class CPLUSLEARN_API AMeleeWeapon : public AActor
{
GENERATED_UCLASS_BODY()
public:
AMeleeWeapon();
//用这个武器造成伤害的大小
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MeleeWeapon)
float AttackDamage;
//用这个列表来存储这个武器触碰到的物体,确保每一次攻击只对碰到物体造成一次伤害
TArray<AActor*> ThingsHit;
//保证没有挥动武器的时候不造成伤害
bool Swinging;
//使用武器的人物
AMonster *WeaponHolder;
//盒装碰撞器决定了该武器攻击到的范围
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = MeleeWeapon)
UBoxComponent* ProxBox;
//武器样式
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = MeleeWeapon)
UStaticMeshComponent* Mesh;
//碰撞函数
UFUNCTION(BlueprintNativeEvent, Category = "Collision")
void Prox(AActor* otherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult);
//挥动武器
void Swing();
//重置
void Reset();
};
.cpp文件
#include "CplusLearn.h"
#include "MeleeWeapon.h"
#include "Monster.h"
// Sets default values
AMeleeWeapon::AMeleeWeapon(const class FObjectInitializer & PCIP) :Super(PCIP)
{
AttackDamage = 1;
Swinging = false;
WeaponHolder = NULL;
//创建武器外形作为跟物体
Mesh = PCIP.CreateDefaultSubobject<UStaticMeshComponent>(this, TEXT("Mesh"));
RootComponent = Mesh;
//创建武器碰撞盒子
ProxBox = PCIP.CreateDefaultSubobject<UBoxComponent>(this, TEXT("ProxBox"));
//当有物体进入盒碰撞时触发Prox函数
ProxBox->OnComponentBeginOverlap.AddDynamic(this,&AMeleeWeapon::Prox);
ProxBox->AttachTo(RootComponent);
}
void AMeleeWeapon::Prox_Implementation(AActor * otherActor, UPrimitiveComponent* othrComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{
//若碰撞物体没有根组件,返回
if (othrComp != otherActor->GetRootComponent())
{
return;
}
//挥剑、碰撞到的人物不是自身 不能攻击一个人物多次
if (Swinging &&otherActor!=WeaponHolder&&!ThingsHit.Contains(otherActor))
{
otherActor->TakeDamage(AttackDamage + WeaponHolder->BaseAttackDamage, FDamageEvent(), NULL, this);
ThingsHit.Add(otherActor);
}
}
void AMeleeWeapon::Swing()
{
ThingsHit.Empty();
Swinging = true;
}
void AMeleeWeapon::Reset()
{
ThingsHit.Empty();
Swinging = false;
}
在完成基本武器的代码编写之后,我们可以从 http://tf3dm.com/3d-model/sword-95782.html 下载免费的剑的模型。
在场景中创建蓝图继承武器类,将武器的mesh选好并添加好碰撞之后
插座
插座在UE4中是一个放置物品在一套骨骼中显示另一个物体。你可以替换插座在任何的骨骼中。在你正确放置后,你可以通过其他的Actor找到插座的东西的UE4的编码中。
创建一个骨骼上插座在怪物的手里
首先找到怪物的模型,在他的手的位置加上Socket
最终加好剑后的效果
那么下面我们要通过编写代码让玩家有一把剑
我们需要打开怪物的头文件
//初始化组件
virtual void PostInitializeComponents()override;
。Cpp文件中添加
void AMonster::PostInitializeComponents()
{
Super::PostInitializeComponents();
//若武器存在
if (BPMeleeWeapon)
{
//获取武器
MeleeWeapon = GetWorld()->SpawnActor<AMeleeWeapon>(BPMeleeWeapon, FVector(), FRotator());
//有武器
if (MeleeWeapon)
{
//绑定到模型的手上
const USkeletalMeshSocket * socket = Mesh->GetSocketByName("Sword");
socket->AttachActor(MeleeWeapon, Mesh);
}
}
}
最终效果
本质上就是将武器绑定到了人物身上
相关文章推荐
- Learning C++ by Creating Games With UE4(15.05.21)(Chapter 11-3)Monster
- Learning C++ by Creating Games With UE4(15.05.21)(Chapter 11-4)Monster
- Learning C++ by Creating Games With UE4(15.05.20)(Chapter 11-1)Monster
- Learning C++ by Creating Games With UE4(15.05.11)-4(Chapter 8-1)
- Learning C++ by Creating Games With UE4(15.05.18)-1(Chapter 9-1)Coding
- Learning C++ by Creating Games With UE4(15.05.11)-4(Chapter 8-3)Coding
- Learning C++ by Creating Games With UE4(15.05.08)-3(Chapter 1)
- Learning C++ by Creating Games With UE4(15.05.11)-4(Chapter 8-2)
- Learning C++ by Creating Games With UE4(15.05.18)-2(Chapter 9-2)Coding
- Learning C++ by Creating Games With UE4(15.05.19)(Chapter 10)Coding
- Learning C++ by Creating Games With UE4(15.05.04)-2(目录)
- Learning C++ by Creating Games With UE4(书籍)
- Learning C++ by Creating Games With UE4(15.05.04)-1(前言)
- Creating Games in C++ : A Step-by-Step Guide
- C# 2012 step by step 学习笔记8 CHAPTER 9 Creating Value types with enumerations and Structures
- Machine Learning by Andrew Ng---Linear Regression with multiple variables
- some learning resource for C++ 11
- Data Structures (Weiss) Chapter 8: Union and Find, Disjoint Sets, union by sizes, C++
- Creating A Physical Standby With RMAN Active Duplicate In 11.2.0.3
- Data Structures with C++ Using STL Chapter 2对象设计技术---笔记