using Cysharp.Threading.Tasks; using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Batterychangesystem : MonoBehaviour { /// /// 需要换点的装置 /// public GameObject Pointchanger; /// /// 电池预制体 /// public GameObject batterys; /// /// 换电池装置位置1 /// public Transform Point1; /// /// 换电池装置位置2 /// public Transform Point2; /// /// 换电池装置位置3 /// public Transform Point3; /// /// 换电池装置位置4 /// public Transform Point4; /// /// 换电池装置位置5 /// public Transform Point5; /// /// 换电池装置位置6 /// public Transform Point6; /// /// 换电池装置位置7 /// public Transform Point7; public Transform Point8; /// /// 换电池位移速度 /// private float speed = 1f; /// /// 生成电池点位 /// public Transform Batspoint; /// /// 所有电池的点位 /// public List BatspointList; void Start() { } void Update() { } /// /// 小车触发换电池系统 /// /// public async void OnTriggerEnter(Collider other) { //if (other.gameObject.CompareTag("Car")) //{ // await Movepos(Pointchanger, Point1, speed); // await Movepos(Pointchanger, Point2, speed); // GameObject bats = Instantiate(batterys, Batspoint); // await Movepos(Pointchanger, Point1, speed); // await Batteryslot(BatspointList, Pointchanger, bats); //} } /// /// 判断电池槽点位 /// /// public async UniTask Batteryslot(List bast, GameObject machine, GameObject bettay) { if (bast.Count > 0) { for (int i = 0; i < bast.Count; i++) { if (bast[i].transform.childCount == 0) { int index = i; switch (index) { case 0: await Movepos(machine, Point3, speed); await Movepos(machine, Point6, speed); bettay.transform.SetParent(bast[i].transform); int point1 = GetRandomPointBetween(); if (point1 == 0) { await Movepos(machine, Point3, speed); await Movepos(machine, Point4, speed); await Movepos(machine, Point7, speed); GameObject battery = bast[1].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point4, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else if (point1 == 1) { await Movepos(machine, Point3, speed); await Movepos(machine, Point5, speed); await Movepos(machine, Point8, speed); GameObject battery = bast[2].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point5, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else { Debug.Log("没有点位"); } break; case 1: await Movepos(machine, Point4, speed); await Movepos(machine, Point7, speed); bettay.transform.SetParent(bast[i].transform); int point2 = GetRandomPointBetween(); if (point2==0) { await Movepos(machine, Point4, speed); await Movepos(machine, Point3, speed); await Movepos(machine, Point6, speed); GameObject battery = bast[0].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point3, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else if (point2 == 1) { await Movepos(machine, Point4, speed); await Movepos(machine, Point5, speed); await Movepos(machine, Point8, speed); GameObject battery = bast[2].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point5, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else { Debug.Log("没有点位"); } break; case 2: await Movepos(machine, Point5, speed); await Movepos(machine, Point8, speed); bettay.transform.SetParent(bast[i].transform); int point3 = GetRandomPointBetween(); if (point3 == 0) { await Movepos(machine, Point5, speed); await Movepos(machine, Point3, speed); await Movepos(machine, Point6, speed); GameObject battery = bast[0].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point3, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else if (point3 == 1) { await Movepos(machine, Point5, speed); await Movepos(machine, Point4, speed); await Movepos(machine, Point7, speed); GameObject battery = bast[1].transform.GetChild(0).gameObject; battery.transform.SetParent(machine.transform); await Movepos(machine, Point4, speed); await Movepos(machine, Point1, speed); await Movepos(machine, Point2, speed); Destroy(battery); await Movepos(machine, Point1, speed); } else { Debug.Log("没有点位"); } break; default: break; } break; } } } } /// /// 位移方法 /// /// /// /// /// public async UniTask Movepos(GameObject battery, Transform corpuscle, float speed) { float value = Vector3.Distance(battery.transform.position, corpuscle.transform.position) / speed; await battery.transform.DOMove(corpuscle.transform.position, value).SetEase(Ease.InOutQuad).AsyncWaitForCompletion(); } /// /// 随机一个电池换装 /// /// /// /// int GetRandomPointBetween() { // 生成一个0到1之间的随机值 int t = Random.Range(0, 2); // 使用Lerp在a和b之间插值 return t; } }