|
1蓝图动画
事件:动画蓝图每帧更新
函数:获得拥有者Pawn,返回的是拥有这个动画实例的Pawn
//AnimInstance.h
UFUNCTION(BlueprintCallable, Category = "Animation", meta=(NotBlueprintThreadSafe))
virtual APawn* TryGetPawnOwner() const;
//AnimInstance.cpp
APawn* UAnimInstance::TryGetPawnOwner() const
{
USkeletalMeshComponent* OwnerComponent = GetSkelMeshComponent();
if (AActor* OwnerActor = OwnerComponent->GetOwner())
{
return Cast<APawn>(OwnerActor);
}
return NULL;
}
- 先获取到动画蓝图所属的组件(OwnerComponent)
- 然后再获取OwnerComponent的所属OwnerActor
- 最后还要把OwnerActor(AActor类型)向下强制类型转换成APawn。
函数:获取向量(有大小和方向)
函数:获取向量的大小
判断对象是否有效
提升为变量
2 关卡蓝图
函数:切换视角
从target视角切换到new view target视角
函数:获取玩家控制器
战斗场景的引用
获得玩家的引用,传递给1gamemode
将1gamemode里面的playerone类提升为变量,设置为玩家,由此获得玩家的引用
关卡蓝图中整体流程
在关卡中首先游戏开始,然后切换摄像机视角,接下来获取1gamemode里面的玩家,并将其提升为变量,(蓝图通信)给其他类使用。
3 gamemode
函数:在鼠标光标下执行碰撞查询,查找对象类型
Hit result 命中结果
返回值:bool类型,是否命中
bool GetHitResultUnderCursorForObjects
(
const TArray< TEnumAsByte< EObjectTypeQuery > > & ObjectTypes,
bool bTraceComplex,
FHitResult & HitResult
) const
Break hit result作用是展开hit result的信息
Hit actor是击中的actor,然后将其强制转换为敌人基类,因为鼠标击中的目标可能是敌人类也可能是玩家类,玩家类是不可以转换为敌人类的,目的是只能点击敌人。
GetHitResultUnderCursorForObjects返回值是判断是否击中,branch为true说明击中,然后将击中的actor转换为敌人类
自定义事件:Mouse Click,玩家控制器在获取当前的1gamemode引用之后会执行此事件
鼠标点击之后执行branch判断,然后执行 转换敌人类(只有点击敌人的时候才会执行,点击其他actor的时候不会执行,因为其他类无法转换成敌人类)
AI行为树:跟随移动
Pawn:谁要移动或跟随
Destination:要移动到或跟随的目的地
Target actor:目的地的actor
Acceptance radius:离目的地的距离
Stop on overlap:是否停止
玩家的引用和选中敌人的引用都有了,然后进行移动
Get actor location是获取位置
Get actor forward vector是获取向前的方向向量
第二个ai move to 是再移动回开始的位置
Set actor rotation 是设置最开始的旋转角度方向
4 playercontroller
鼠标左键点击事件,该事件要放在playercontroller类里面,不可以放在gamemode里面,因为gamemode没有玩家控制权,只有玩家控制器才可以控制玩家进行一系列行为。
获取gamemode然后转换为我们自定义的gamemode
鼠标左键点击之后,我们就获取了1gamemode的引用,然后执行自定义事件mouse click
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|