245 lines
9.7 KiB
C#
245 lines
9.7 KiB
C#
using Cysharp.Threading.Tasks;
|
|
using DG.Tweening;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class Batterychangesystem : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// 需要换点的装置
|
|
/// </summary>
|
|
public GameObject Pointchanger;
|
|
/// <summary>
|
|
/// 电池预制体
|
|
/// </summary>
|
|
public GameObject batterys;
|
|
/// <summary>
|
|
/// 换电池装置位置1
|
|
/// </summary>
|
|
public Transform Point1;
|
|
/// <summary>
|
|
/// 换电池装置位置2
|
|
/// </summary>
|
|
public Transform Point2;
|
|
/// <summary>
|
|
/// 换电池装置位置3
|
|
/// </summary>
|
|
public Transform Point3;
|
|
/// <summary>
|
|
/// 换电池装置位置4
|
|
/// </summary>
|
|
public Transform Point4;
|
|
/// <summary>
|
|
/// 换电池装置位置5
|
|
/// </summary>
|
|
public Transform Point5;
|
|
/// <summary>
|
|
/// 换电池装置位置6
|
|
/// </summary>
|
|
public Transform Point6;
|
|
/// <summary>
|
|
/// 换电池装置位置7
|
|
/// </summary>
|
|
public Transform Point7;
|
|
public Transform Point8;
|
|
/// <summary>
|
|
/// 换电池位移速度
|
|
/// </summary>
|
|
private float speed = 1f;
|
|
/// <summary>
|
|
/// 生成电池点位
|
|
/// </summary>
|
|
public Transform Batspoint;
|
|
/// <summary>
|
|
/// 所有电池的点位
|
|
/// </summary>
|
|
public List<Transform> BatspointList;
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
/// <summary>
|
|
/// 小车触发换电池系统
|
|
/// </summary>
|
|
/// <param name="other"></param>
|
|
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);
|
|
|
|
//}
|
|
}
|
|
/// <summary>
|
|
/// 判断电池槽点位
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async UniTask Batteryslot(List<Transform> 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 位移方法
|
|
/// </summary>
|
|
/// <param name="battery"></param>
|
|
/// <param name="corpuscle"></param>
|
|
/// <param name="speed"></param>
|
|
/// <returns></returns>
|
|
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();
|
|
}
|
|
/// <summary>
|
|
/// 随机一个电池换装
|
|
/// </summary>
|
|
/// <param name="a"></param>
|
|
/// <param name="b"></param>
|
|
/// <returns></returns>
|
|
int GetRandomPointBetween()
|
|
{
|
|
// 生成一个0到1之间的随机值
|
|
int t = Random.Range(0, 2);
|
|
// 使用Lerp在a和b之间插值
|
|
return t;
|
|
}
|
|
}
|