首页 > 其他 > 详细

模仿黑魂锁定目标功能

时间:2016-06-28 22:07:02      阅读:254      评论:0      收藏:0      [点我收藏+]
    if (bLocked)
    {
        //取消锁定状态
        bLockedTarget = false;
        bUseControllerRotationYaw = false;
        GetCharacterMovement()->bOrientRotationToMovement = true;
    }
    else
    {
        //锁定目标
        bLockedTarget = true;
        bUseControllerRotationYaw = true;
        GetCharacterMovement()->bOrientRotationToMovement = false;

        //计算最近的目标
        TArray<AActor*> TempActorArray;
        CharacterVisualField->GetOverlappingActors(TempActorArray);
        CharacterNearbyMonster.Reset();
        for (int i = 0; i < TempActorArray.Num();++i)
        {
            AMonster *TempActor=Cast<AMonster>(TempActorArray[i]);
            if (TempActor&&!TempActor->IsPendingKill())
            {
                CharacterNearbyMonster.Add(TempActor);
            }
        }

        if (CharacterNearbyMonster.Num()>0)
        {
            LockedTargetObject = CharacterNearbyMonster[0];
            for (int i = 1; i<CharacterNearbyMonster.Num(); ++i)
            {
                FVector temp = ((AMonster*)CharacterNearbyMonster[i])->GetActorLocation() - GetActorLocation();
                temp.Normalize();
                
                FVector CurrenLockedTargetVector = LockedTargetObject->GetActorLocation() - GetActorLocation();
                CurrenLockedTargetVector.Normalize();

                if (FVector::DotProduct(CurrenLockedTargetVector, FollowCamera->GetForwardVector()) < FVector::DotProduct(temp, FollowCamera->GetForwardVector()))
                {
                    LockedTargetObject = CharacterNearbyMonster[i];
                    
                }
                
            }
        }
    }

直接上代码,还有很多地方可以优化,仅供抛砖引玉,效果如图

技术分享

 

模仿黑魂锁定目标功能

原文:http://www.cnblogs.com/blueroses/p/5625032.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!