Exemplo n.º 1
0
    void CountFish(int attachPoint)
    {
        FishBehavior[]      allFish    = FindObjectsOfType <FishBehavior>();
        List <FishBehavior> fishOfType = new List <FishBehavior>();

        foreach (FishBehavior fishScript in allFish)
        {
            if (fishScript.fishType == attachPoints[attachPoint].GetComponent <FishInputAttach>().fishType&& !fishScript.counted)
            {
                fishOfType.Add(fishScript);
            }
        }

        Debug.Log("Fish found: " + fishOfType.Count);

        if (fishOfType.Count > 0)
        {
            FishBehavior furthestRightFish = null;

            foreach (FishBehavior fishScript in fishOfType)
            {
                if (furthestRightFish == null)
                {
                    furthestRightFish = fishScript;
                }
                else if (fishScript.transform.position.x > furthestRightFish.transform.position.x)
                {
                    furthestRightFish = fishScript;
                }
            }
            furthestRightFish.CountFish();

            int indexForTally = 0;
            for (int i = 0; i < 4; i++)
            {
                if (FindObjectOfType <FishSpawner>().fishFreqs[i].fishType == furthestRightFish.fishType)
                {
                    indexForTally = i;
                }
            }
            FindObjectOfType <ScoreKeeper>().AddToCounted(indexForTally);
        }
    }
    private Vector3 GetGroupPosition()
    {
        Collider[] c = Physics.OverlapSphere(position, myGroup.keepDistance, myGroup.mask);         //查找周围同群种的鱼
        Vector3    dis = Vector3.zero, v = Vector3.zero;

        for (int i = 0; i < c.Length; i++)
        {
            FishBehavior otherFish = c [i].GetComponent <FishBehavior> ();
            dis = (position - otherFish.position).normalized;
            if ((position.y - myGroup.targetPosition.y) > myGroup.keepY || (position.y - myGroup.targetPosition.y) < -myGroup.keepY)          //限定鱼的Y轴在一定范围以内
            {
                v = target * dis;
            }
            else
            {
                v = dis;
            }
            //	v = dis.normalized;
            Debug.DrawLine(position, otherFish.position, Color.yellow);
        }
        return(v * myGroup.keepWeight);
    }
Exemplo n.º 3
0
    Vector3 KeepFriendsDisVelocity(List <FishBehavior> friends)
    {
        float        dis = 999;
        FishBehavior yu  = null;

        foreach (var item in friends)
        {
            float d = Vector3.Distance(transform.position, item.transform.position);
            if (d < dis)
            {
                dis = d;
                yu  = item;
            }
        }
        if (yu != null)
        {
            return((yu.transform.position - transform.position).normalized * 30);
        }
        else
        {
            return(Vector3.zero);
        }
    }
Exemplo n.º 4
0
    public void CreateFishGroup(int fish_num)
    {
        //非闭合情况下,可调整鱼群的出生点占轨迹的比例
        int rate = 0;

        if (createRange != 0 && fullPathway == false)
        {
            if (createRange > poslist.Count)
            {
                createRange = poslist.Count;
            }
            rate = poslist.Count / createRange;
        }
        for (int i = 0; i < fish_num; i++)
        {
            FishBehavior fish = GameObject.Instantiate(fishPrefab).AddComponent <FishBehavior>();
            Vector3      val  = new Vector3(Random.Range(-offsetRange.x, offsetRange.x), Random.Range(-offsetRange.y, offsetRange.y), Random.Range(-offsetRange.z, offsetRange.z));
            if (fullPathway == true)
            {
                int     index = Random.Range(0, poslist.Count - 1);
                Vector3 pos   = poslist[index].pos + val;
                fish.transform.position = pos;
                fish.transform.SetParent(transform);
                fish.mCurrentTime = poslist[index].Time;
            }
            else
            {
                int     index = Random.Range(0, rate);
                Vector3 pos   = poslist[index].pos + val;
                fish.transform.position = pos;
                fish.transform.SetParent(transform);
                fish.mCurrentTime = poslist[index].Time;
            }
            fish.isfullpath  = fullPathway;
            fish.offset      = val;
            fish.fishGroupID = fishGroupID;
            fish.fishTypeID  = fishTypeID;
            fish.enermyTags  = enermyTags;
            fish.fishTag     = fishTag;
            //fish.playerTag = playerTag;
            fish.fishgroup           = this;
            fish.delay               = delayMove;
            fish.changeStateDistance = changeStateDistance;//改变状态距离(逃离,聚集)
            //逃离
            fish.escapeSpeed = escapeSpeed;
            fish.escapeTime  = escapeTime;
            //聚集
            fish.gatherSpeed          = gatherSpeed;
            fish.gatherAddSpeed       = gatherAddSpeed;
            fish.gatherTurnAroundTime = gatherTurnAroundTime;

            fish.followSpeed = followSpeed;
            fish.followTime  = followTime;
            fishs.Add(fish);
            if (fishPrefab.name.EndsWith("_gpu_ins"))
            {
                Renderer render = fish.GetComponentInChildren <Renderer>(true);
                if (render != null)
                {
                    renders.Add(render);
                    SetMatDatas(render);
                }
            }
        }
        if (fishPrefab.name.EndsWith("_anim_ins"))
        {
            if (isShowEffect == true)
            {
                AnimationInstancingMgr.Instance.SetInnerEffectState(fishs[0].gameObject, 1);
            }
            else
            {
                AnimationInstancingMgr.Instance.SetInnerEffectState(fishs[0].gameObject, 0);
            }
        }
    }