コード例 #1
0
    IEnumerator _Coro_Generate()
    {
        int num          = Random.Range(NumMin, NumMax + 1);
        int generatedNum = 0;

        yield return(0);//为取得transform.localPosition

        //生成leaderFish
        GameObject goLeader   = new GameObject("领队_" + Prefab_Fish.name);
        Swimmer    fishLeader = goLeader.AddComponent <Swimmer>();

        goLeader.AddComponent <DestroyWhenSwimmerOut>();

        if (GameMain.EvtLeaderInstance != null)
        {
            GameMain.EvtLeaderInstance(fishLeader);
        }


        //fishLeader.Attackable = false;
        Prefab_Fish.swimmer.CopyDataTo(fishLeader);
        fishLeader.SetLiveDimension(Defines.ClearFishRadius);//swim to fix
        fishLeader.RotateSpd = Fish_RotateSpd;
        fishLeader.Speed     = Fish_Speed;

        FishAI_FreeSwimSingle fishAILeader = goLeader.AddComponent <FishAI_FreeSwimSingle>();

        Prefab_Fish.GetComponent <FishAI_FreeSwimSingle>().CopyDataTo(fishAILeader);
        fishAILeader.enabled                = false;
        fishAILeader.RotateAngleRndRange    = Fish_RotateAngleRndRange;
        fishAILeader.RotateInterval         = Fish_RotateInterval;
        fishAILeader.RotateIntervalRndRange = Fish_RotateIntervalRndRange;

        fishLeader.transform.parent = GameMain.Singleton.FishGenerator.transform;
        Vector3 localPos = transform.localPosition;

        localPos.z = Defines.GMDepth_Fish + GameMain.Singleton.FishGenerator.ApplyFishDepth();
        fishLeader.transform.localPosition = localPos;
        fishLeader.transform.localRotation = transform.localRotation;
        fishLeader.Go();

        Fish  preFish          = null;
        float distanceToLeader = 0F;

        while (generatedNum < num)
        {
            yield return(new WaitForSeconds((Distance + fishLeader.BoundCircleRadius * 2F) / fishLeader.Speed));

            if (fishLeader == null)
            {
                break;
            }
            Fish    f = Instantiate(Prefab_Fish) as Fish;
            Swimmer s = f.swimmer;
            f.name = Prefab_Fish.name;

            s.RotateSpd = Fish_RotateSpd;
            s.Speed     = Fish_Speed;
            //动画设置
            if (preFish != null)
            {
                //f.AniSprite.clipTime = preFish.AniSprite.clipTime;
                //f.AniSprite.Play(preFish.AniSprite.ClipTimeSeconds);
                f.AniSprite.PlayFrom(f.AniSprite.DefaultClip, preFish.AniSprite.ClipTimeSeconds);
            }

            //删除所有其他ai
            f.ClearAI();
            FishAI_Follow aiFollow = f.gameObject.AddComponent <FishAI_Follow>();
            aiFollow.SetTarget(fishLeader);
            distanceToLeader         += (Distance + fishLeader.BoundCircleRadius * 2F);
            aiFollow.DistanceToLeader = distanceToLeader;

            //方位设置
            f.transform.parent        = GameMain.Singleton.FishGenerator.transform;
            localPos                  = transform.localPosition;
            localPos.z                = Defines.GMDepth_Fish + GameMain.Singleton.FishGenerator.ApplyFishDepth();
            f.transform.localPosition = localPos;
            f.transform.localRotation = transform.localRotation;
            s.Go();

            ++generatedNum;

            preFish = f;
        }

        yield return(0);

        if (fishAILeader != null)
        {
            fishAILeader.enabled = true;
        }
        Destroy(gameObject);
    }
コード例 #2
0
ファイル: FishAI_FreeSwimSingle.cs プロジェクト: minh3d/Fish
 public void CopyDataTo(FishAI_FreeSwimSingle tar)
 {
     tar.RotateAngleRndRange = RotateAngleRndRange;
     tar.RotateInterval = RotateInterval;
     tar.RotateIntervalRndRange = RotateIntervalRndRange;
 }
コード例 #3
0
 public void CopyDataTo(FishAI_FreeSwimSingle tar)
 {
     tar.RotateAngleRndRange    = RotateAngleRndRange;
     tar.RotateInterval         = RotateInterval;
     tar.RotateIntervalRndRange = RotateIntervalRndRange;
 }