U3D_TobaccoWarehouseISMDTSy.../Assets/Scripts/YL/Batterychangesystem.cs

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;
}
}