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;
}
}
Unity角色跟随
猜你喜欢
转载自blog.csdn.net/qq_58804985/article/details/128638692
今日推荐
周排行