예제 #1
0
    public bool IsPlayerAround(GameObject currentObject, float distance)
    {
        TargetCollector player = FindTargetTag(PlayerTag);

        if (player != null && player.Targets.Length > 0)
        {
            for (int i = 0; i < player.Targets.Length; i++)
            {
                if (player.Targets[i] != null && currentObject.transform.root != player.Targets[i].transform)
                {
                    if (Vector3.Distance(currentObject.transform.position, player.Targets[i].transform.position) <= distance)
                    {
                        return(true);
                    }
                }
            }
        }

        return(false);
    }
예제 #2
0
    private GameObject findPlayerByID(string userID)
    {
        TargetCollector allplayer = UnitZ.aiManager.FindTargetTag("Player");

        GameObject[] players = allplayer.Targets;
        for (int i = 0; i < players.Length; i++)
        {
            if (players[i] != null)
            {
                CharacterSystem character = players[i].GetComponent <CharacterSystem>();
                if (character != null)
                {
                    if (character.UserID == userID)
                    {
                        return(players[i]);
                    }
                }
            }
        }
        return(null);
    }
예제 #3
0
    GameObject findTarget()
    {
        GameObject gettarget = null;
        float      length    = float.MaxValue;

        for (int t = 0; t < TargetTag.Length; t++)
        {
            //通过Tags找到所有目标
            TargetCollector targetget = UnitZ.aiManager.FindTargetTag(TargetTag[t]);
            if (targetget != null)
            {
                GameObject[] targets = targetget.Targets;
                if (targets != null && targets.Length > 0)
                {
                    for (int i = 0; i < targets.Length; i++)
                    {
                        if (targets[i] != null && targets[i].transform.root != this.transform.root)
                        {
                            DamageManager targetdamagemanager = targets[i].GetComponent <DamageManager>();
                            //如果目标存活,并且具有demagemanager
                            if (targetdamagemanager != null && targetdamagemanager.IsAlive)
                            {
                                float distancetargets = Vector3.Distance(targets[i].gameObject.transform.position, this.gameObject.transform.position);
                                if ((distancetargets <= length && (distancetargets <= DistanceMoveTo || distancetargets <= currentDistanceWeapon)))
                                {
                                    //远距离发现目标
                                    if (canSeeTarget(Pointer.transform.position, targets[i].gameObject) || RushMode)
                                    {
                                        length    = distancetargets;
                                        gettarget = targets[i].gameObject;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return(gettarget);
    }
    GameObject findTarget()
    {
        GameObject gettarget = null;
        float      length    = float.MaxValue;

        for (int t = 0; t < TargetTag.Length; t++)
        {
            // Finding all the targets by Tags.
            TargetCollector targetget = UnitZ.aiManager.FindTargetTag(TargetTag[t]);
            if (targetget != null)
            {
                GameObject[] targets = targetget.Targets;
                if (targets != null && targets.Length > 0)
                {
                    for (int i = 0; i < targets.Length; i++)
                    {
                        if (targets[i] != null && targets[i].transform.root != this.transform.root)
                        {
                            DamageManager targetdamagemanager = targets[i].GetComponent <DamageManager>();
                            // if target has a damage manager and alive
                            if (targetdamagemanager != null && targetdamagemanager.IsAlive && targetdamagemanager.Team != character.Team || targetdamagemanager.Team == 0)
                            {
                                float distancetargets = Vector3.Distance(targets[i].gameObject.transform.position, this.gameObject.transform.position);
                                if ((distancetargets <= length && (distancetargets <= DistanceMoveTo || distancetargets <= currentDistanceWeapon)))
                                {
                                    // get a target only in distance or rush mode enabled
                                    if (canSeeTarget(Pointer.transform.position, targets[i].gameObject) || RushMode)
                                    {
                                        length    = distancetargets;
                                        gettarget = targets[i].gameObject;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return(gettarget);
    }
예제 #5
0
파일: AirDrop.cs 프로젝트: zhizhen/fps_demo
    void Update()
    {
        if (!isServer)
        {
            return;
        }

        if (Parachute)
        {
            if (Parachute.activeSelf)
            {
                if (rig)
                {
                    rig.AddForce(Vector3.up * FloatForce);
                }
            }
        }
        if (!unpackaged)
        {
            TargetCollector players = UnitZ.aiManager.FindTargetTag(PlayerTag);
            if (players != null && players.Targets != null)
            {
                for (int p = 0; p < players.Targets.Length; p++)
                {
                    if (players.Targets[p] != null)
                    {
                        if (Vector3.Distance(this.transform.position, players.Targets[p].transform.position) < DistanceUnpack)
                        {
                            Spawn();
                            unpackaged = true;
                        }
                    }
                }
            }
        }
    }
예제 #6
0
        /// <summary>
        /// Starts search with current settings.
        /// </summary>
        /// <param name="showResults">Shows results in the %Maintainer window if true.</param>
        /// <returns>Array of IssueRecords in case you wish to manually iterate over them and make custom report.</returns>
        public static IssueRecord[] StartSearch(bool showResults)
        {
            if (!ProjectSettings.Issues.lookInScenes && !ProjectSettings.Issues.lookInAssets &&
                !ProjectSettings.Issues.lookInProjectSettings)
            {
                MaintainerWindow.ShowNotification("Nowhere to search!");
                return(null);
            }

            if (ProjectSettings.Issues.lookInScenes)
            {
                if (!CSSceneTools.SaveCurrentModifiedScenes(false))
                {
                    Debug.Log(Maintainer.LogPrefix + "Issues search canceled by user!");
                    return(null);
                }
            }

            var issues = new List <IssueRecord>();

            PrepareToBatchOperation();

            try
            {
                var sw = Stopwatch.StartNew();

                CSTraverseTools.ClearStats();

                var targetAssets = TargetCollector.CollectTargetAssets();

                /*foreach (var targetAsset in targetAssets)
                 * {
                 *      Debug.Log(targetAsset.Path);
                 * }*/

                TargetProcessor.SetIssuesList(issues);
                TargetProcessor.ProcessTargetAssets(targetAssets);

                var traverseStats = CSTraverseTools.GetStats();
                var checkedAssets = targetAssets.Length;

                sw.Stop();

                if (!operationCanceled)
                {
                    var result = string.Format(CultureInfo.InvariantCulture, Maintainer.LogPrefix + ModuleName + " found issues: {0}\n" +
                                               "Seconds: {1:0.000}; Assets: {2}; Game Objects: {3}; Components: {4}; Properties: {5}",
                                               issues.Count, sw.Elapsed.TotalSeconds, checkedAssets, traverseStats.gameObjectsTraversed,
                                               traverseStats.componentsTraversed, traverseStats.propertiesTraversed);

                    Debug.Log(result);
                }
                else
                {
                    Debug.Log(Maintainer.LogPrefix + "Search canceled by user!");
                }

                SearchResultsStorage.IssuesSearchResults = issues.ToArray();
                if (showResults)
                {
                    MaintainerWindow.ShowIssues();
                }
            }
            catch (Exception e)
            {
                Debug.LogError(Maintainer.LogPrefix + ModuleName + ": something went wrong :(\n" + e);
            }

            EditorUtility.ClearProgressBar();

            return(issues.ToArray());
        }
 public HammerTargetCollectorComponent(TargetCollector targetCollector, TargetValidator targetValidator) : base(targetCollector, targetValidator)
 {
 }
예제 #8
0
    void Update()
    {
        if (!isServer || (SpawnJustOnce && alreadySpawned))
        {
            return;
        }

        bool active = false;

        if (SpawnByPlayerEnter)
        {
            TargetCollector players = UnitZ.aiManager.FindTargetTag(PlayerTag);
            if (players != null && players.Targets != null)
            {
                for (int p = 0; p < players.Targets.Length; p++)
                {
                    if (players.Targets[p] != null)
                    {
                        if (Vector3.Distance(this.transform.position, players.Targets[p].transform.position) < this.transform.localScale.x)
                        {
                            active = true;
                        }
                    }
                }
            }
        }
        else
        {
            active = true;
        }

        if (!active)
        {
            return;
        }

        if (SpawnJustOnce)
        {
            if (!alreadySpawned)
            {
                alreadySpawned = true;
                int itemcount = Random.Range(1, ItemMax + 1);
                for (int i = 0; i < itemcount; i++)
                {
                    Spawn();
                }
            }
        }
        else
        {
            ObjectExistCheck();

            if (ObjectsNumber >= ItemMax)
            {
                full = true;
            }
            else
            {
                if (full)
                {
                    timeTemp = Time.time;
                    full     = false;
                }

                if (Time.time > timeTemp + timeSpawn)
                {
                    Spawn();
                    timeTemp = Time.time;
                }
            }
        }
    }
    void Update()
    {
        if (character == null)
        {
            return;
        }

        // random play an idle sound.
        if (Time.time > soundTime + soundTimeDuration)
        {
            character.PlayIdleSound();
            soundTimeDuration = Random.Range(0, IdleSoundDelay);
            soundTime         = Time.time;
        }
        if (isServer && character.IsAlive)
        {
            float fps   = (1 / Time.deltaTime);
            float delay = (fps / AIUpdateRate) * Time.deltaTime; // calculate delay of sending

            if (Time.time > timeTmp + delay)
            { // sending by time
                timeTmp = Time.time;
                character.isServerControl = true;
                // get attack distance from primary weapon.
                DistanceAttack = character.PrimaryWeaponDistance;

                float distance = Vector3.Distance(PositionTarget, this.gameObject.transform.position);
                targetDirectiom = (PositionTarget - this.transform.position);

                Quaternion targetRotation = this.transform.rotation;
                float      str            = TurnSpeed * Time.time;
                // rotation to look at a target
                if (targetDirectiom != Vector3.zero)
                {
                    targetRotation     = Quaternion.LookRotation(targetDirectiom);
                    targetRotation.x   = 0;
                    targetRotation.z   = 0;
                    transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, str);
                }

                // if Target is exist
                if (ObjectTarget != null)
                {
                    DamageManager targetdamagemanager = ObjectTarget.GetComponent <DamageManager>();
                    PositionTarget = ObjectTarget.transform.position;
                    if (aiTime <= 0)
                    {
                        aiState = Random.Range(0, 4);
                        aiTime  = Random.Range(10, 100);
                    }
                    else
                    {
                        aiTime--;
                    }

                    // attack in distance.
                    if (distance <= DistanceAttack)
                    {
                        if (aiState == 0 || BrutalMode)
                        {
                            Attack(targetDirectiom);
                        }
                    }
                    else
                    {
                        if (distance <= DistanceMoveTo)
                        {
                            // rotation facing to a target.
                            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, str);
                        }
                        else
                        {
                            // if target is out of distance
                            ObjectTarget = null;
                            if (aiState == 0)
                            {
                                aiState        = 1;
                                aiTime         = Random.Range(10, 500);
                                PositionTarget = positionTemp + new Vector3(Random.Range(-PatrolRange, PatrolRange), 0, Random.Range(-PatrolRange, PatrolRange));
                            }
                        }
                    }
                    if (targetdamagemanager && !targetdamagemanager.IsAlive)
                    {
                        ObjectTarget = null;
                    }
                }
                else
                {
                    float length = float.MaxValue;

                    for (int t = 0; t < TargetTag.Length; t++)
                    {
                        // Finding all the targets by Tags.
                        TargetCollector targetget = UnitZ.aiManager.FindTargetTag(TargetTag[t]);
                        if (targetget != null)
                        {
                            GameObject[] targets = targetget.Targets;
                            if (targets != null && targets.Length > 0)
                            {
                                for (int i = 0; i < targets.Length; i++)
                                {
                                    DamageManager targetdamagemanager = targets[i].GetComponent <DamageManager>();
                                    if (targetdamagemanager != null && targetdamagemanager.IsAlive)
                                    {
                                        float distancetargets = Vector3.Distance(targets[i].gameObject.transform.position, this.gameObject.transform.position);
                                        if ((distancetargets <= length && (distancetargets <= DistanceMoveTo || distancetargets <= DistanceAttack || RushMode)) && ObjectTarget != targets[i].gameObject)
                                        {
                                            length       = distancetargets;
                                            ObjectTarget = targets[i].gameObject;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (aiState == 0)
                    {
                        // AI state == 0 mean AI is free, so moving to anywhere
                        aiState        = 1;
                        aiTime         = Random.Range(10, 200);
                        PositionTarget = positionTemp + new Vector3(Random.Range(-PatrolRange, PatrolRange), 0, Random.Range(-PatrolRange, PatrolRange));
                    }
                    if (aiTime <= 0)
                    {
                        // random AI state
                        aiState = Random.Range(0, 4);
                        aiTime  = Random.Range(10, 200);
                    }
                    else
                    {
                        aiTime--;
                    }
                }
            }
            if (navAgent)
            {
                navAgent.SetDestination(PositionTarget);
                navAgent.speed = character.GetCurrentMoveSpeed();
            }
        }
    }