码迷,mamicode.com
首页 > 其他好文 > 详细

模仿黑魂锁定目标功能

时间:2016-06-28 22:07:29      阅读:442      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!