Unity角色跟随

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Follow : MonoBehaviour
{
   [Header("所有跟踪单位")]
   public List<Transform> Followers=new List<Transform>();
   public static List<Transform> S_Followers=new List<Transform>();
   [Header("头部")] public Transform Head;
   [Header("间隔")] public int Space=0;
   public static int S_Space;
   [Tooltip("保存坐标")]public static Vector3[] SaveV3=new Vector3[500];
   [Tooltip("保存头部坐标")] Vector3 SavingHead;

   #region 测试用记得删

   public Transform TestAdd, TestRemove;
   public bool Testing;

   #endregion

   private void OnEnable()
   {
       S_Followers = Followers;
       S_Space = Space;

       #region 案例:增删跟随者

       StartCoroutine(Changer());
       IEnumerator Changer()
       {
           yield return new WaitForSeconds(4f);
           ChangeFollower(TestAdd,true);
           yield return new WaitForSeconds(4f);
           ChangeFollower(Followers[1],false);
       }
       #endregion
   }

   private void FixedUpdate()
   {
       #region Test Spaceing RemindRemove

       if (Testing)
       {
           ChangeSpaceing(Space);
       }

       #endregion
       if (Head.position!=SavingHead)
      {
          SavingHead = Head.position;
          UpdateSaveV3();
          UpdateFollower();
      }
   }

   /// <summary>
   /// 更新保存坐标
   /// </summary>
   void UpdateSaveV3()
   {
       SaveV3[0] = SavingHead;
       for (int i = SaveV3.Length-1; i >0; i--)
       {
           int i1 = i;
           SaveV3[i1] = SaveV3[i1 - 1];
       }
   }
/// <summary>
/// 更新跟随任务坐标
/// </summary>
   static void UpdateFollower()
   {
       for (int i = 0; i < S_Followers.Count; i++)
       {
           int i1 = i;

           #region 预留判断人物转向空间

           

           #endregion
           S_Followers[i1].position = SaveV3[i1 * S_Space];
       }
   }

/// <summary>
/// 增删跟随的人物
/// </summary>
/// <param name="changer">增删单位</param>
/// <param name="IsAdd">是否为增加</param>
public static void ChangeFollower(Transform changer, bool IsAdd)
{
    if (IsAdd)
    {
        S_Followers.Add(changer);
    }
    else
    {
        S_Followers.Remove(changer);
        changer.position = new Vector3(99999, 99999, 9999);//暂时移除
    }
    UpdateFollower();

}
/// <summary>
/// 获取当前的跟随者
/// </summary>
/// <returns></returns>
public static List<Transform> GetFollowers()
{
    return S_Followers;
}
/// <summary>
/// 修改间隔
/// </summary>
/// <param name="S"></param>
/// <returns></returns>
public static bool ChangeSpaceing(int S)
{
    S_Space = S;
    UpdateFollower();
    return true;
}
}

猜你喜欢

转载自blog.csdn.net/qq_58804985/article/details/128638692