您的位置:首页 > 产品设计 > UI/UE

【UE4】 第01讲 【MOBA制作日记】 角色攻击事件及发射物

2017-02-12 13:27 801 查看
      制作MOBA的过程来到了一个全新的阶段,后续会逐步将功能转为UE4来实现。

      已经放到App Store里的Demo只是具有基础的一些功能和效果,这一讲把角色及攻击技能部分用UE4来实现以下。

        运行成功时是下面的样子:熊猫的攻击技能释放一个石球,石球向前抛出并落地



 

      上面的Panda对应的FBX文件(百度云地址),导入过程参考UE4官方-实现角色,导入成功后你会有上图左下角的内容浏览器里的内容,Attack_Low是一个动画实例(AnimInstance)需要导入时自己命名,BP_PandaAnim是动画蓝图(BP开头的都是蓝图,这里也是自己命名遵循UE4的默认规则,创建过程参考UE4官方-实现角色),BP_PandaCharacter是APandaCharacter的蓝图(也是自己命名BP开头),Panda是网格物体,Panda2是材质,Panda3是贴图,Panda_Skeleton是骨架,Panda_Physics
Asset 是角色的物理资源(暂未用到可以先忽略)

                               


       编辑熊猫的Attack_Low技能动画,只需选中Attack_Low并右键选择编辑即可打开动画编辑器,如下

           


    

     可以看到动画的每一帧,选中第13帧并添加一个命名为Low的事件,要在这个事件里发出攻击技能,保存并关闭。

     后面就是关联这个事件和具体的技能函数调用了,参考
UE4官方-事件图表,选中BP_PandaAnim右键->编辑,打开下面的编辑器,成功的时候是下面的状态



      按照官方的步骤,在动画图表里,建一个动画状态,并设置Attack_Low



      动画图表成功以后,创建事件图表里的内容,把上面创建的Low事件->AnimNotify_Low和处理函数->PandaCharacter::Fire关联起来



   APandaCharacter::Fire的定义如下:

void APandaCharacter::Fire()
{
// 尝试发射物体。
if (ProjectileClass)
{

// 获取指定bone的transform
const int32 RHandIndex = Mesh->GetBoneIndex(TEXT("Bip01-R-Hand"));
const FTransform RHandTransform = Mesh->GetBoneTransform(RHandIndex);

FVector MuzzleLocation = RHandTransform.GetTranslation();
FRotator MuzzleRotation;

UWorld* World = GetWorld();
if (World)
{
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = this;
SpawnParams.Instigator = Instigator;
// 生成发射物。
ALowProjectile* Projectile = World->SpawnActor<ALowProjectile>(ProjectileClass, MuzzleLocation, MuzzleRotation, SpawnParams);
if (Projectile)
{
// 设置发射物的初始轨道。
FVector LaunchDirection = MuzzleRotation.Vector();
LaunchDirection = RHandTransform.GetRotation().GetAxisX();
Projectile->FireInDirection(LaunchDirection);
}
}
}
}


      成功之后保存并关闭,点击主界面上的播放,就能正常攻击了。

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: