OvertakingLegend/Assets/Script/SkinCar.cs

201 lines
5.9 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 车皮肤
/// </summary>
public class SkinCar : MonoBehaviour
{
/// <summary>
/// 惊险超车射线
/// </summary>
[HideInInspector] public Transform judgmentOvertakingRay;
/// <summary>
/// 左前转向灯
/// </summary>
[HideInInspector] public GameObject leftFrontIndicator;
/// <summary>
/// 右前转向灯
/// </summary>
[HideInInspector] public GameObject rightFrontIndicator;
/// <summary>
/// 左后转向灯
/// </summary>
[HideInInspector] public GameObject leftQueenIndicator;
/// <summary>
/// 右后转向灯
/// </summary>
[HideInInspector] public GameObject rightQueenIndicator;
/// <summary>
/// 右轮
/// </summary>
[HideInInspector] public GameObject rightWheel;
/// <summary>
/// 大小类型
/// </summary>
[HideInInspector]public E_CarSizeType carSizeType;
/// <summary>
/// 闪烁协程
/// </summary>
private Coroutine flashingCoroutine;
private void Awake()
{
leftQueenIndicator = transform.Find("LeftQueenIndicator").gameObject;
rightQueenIndicator = transform.Find("RightQueenIndicator").gameObject;
leftFrontIndicator = transform.Find("LeftFrontIndicator").gameObject;
rightFrontIndicator = transform.Find("RightFrontIndicator").gameObject;
rightWheel = transform.Find("Wheels/Meshes/FrontRightWheel").gameObject;
judgmentOvertakingRay = transform.Find("JudgmentOvertakingRay").transform;
SetAllLight(false);
}
/// <summary>
/// 关闭灯
/// </summary>
public void SetAllLight(bool isTrue)
{
leftQueenIndicator.gameObject.SetActive(isTrue);
rightQueenIndicator.gameObject.SetActive(isTrue);
leftFrontIndicator.gameObject.SetActive(isTrue);
rightFrontIndicator.gameObject.SetActive(isTrue);
}
/// <summary>
/// 打开前灯
/// </summary>
public void OpenFrontLight()
{
leftFrontIndicator.gameObject.SetActive(true);
rightFrontIndicator.gameObject.SetActive(true);
}
/// <summary>
/// 停止闪烁
/// </summary>
public void StopFlashing()
{
if(flashingCoroutine!=null)
{
StopCoroutine(flashingCoroutine);
MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
for (int j = 0; j < meshRenderers.Length; j++)
{
meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync<Material>(PackagesName.GameData, "ColorVar1_Material");
}
}
}
/// <summary>
/// 车身透明
/// </summary>
public void BodyTransparency()
{
MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < meshRenderer.Length; i++)
{
meshRenderer[i].material = YooAssetManager.Instance.LoadAssetSync<Material>(PackagesName.GameData, "ghost");
}
}
/// <summary>
/// 车身恢复
/// </summary>
public void BodyRecovery()
{
MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < meshRenderer.Length; i++)
{
meshRenderer[i].material = YooAssetManager.Instance.LoadAssetSync<Material>(PackagesName.GameData, "ColorVar1_Material");
}
}
/// <summary>
/// 闪烁
/// </summary>
public void Flashing(string materialName,UnityAction unityAction)
{
flashingCoroutine=StartCoroutine(IE_Flashing(materialName,unityAction));
}
/// <summary>
/// 闪烁协程
/// </summary>
/// <returns></returns>
private IEnumerator IE_Flashing(string materialName, UnityAction callBack)
{
UIManager.Instance.GetUI<GameUI>().SetShimmerCountDownSetActive(true);
MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < meshRenderers.Length; j++)
{
meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync<Material>(PackagesName.GameData, materialName);
}
yield return new WaitForSeconds(0.2f);
for (int j = 0; j < meshRenderers.Length; j++)
{
meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync<Material>(PackagesName.GameData, "ColorVar1_Material");
}
yield return new WaitForSeconds(0.2f);
}
callBack?.Invoke();
}
/// <summary>
/// 使用闪灯
/// </summary>
public void USE()
{
StartCoroutine(IE_USE());
}
/// <summary>
/// 使用车协程
/// </summary>
/// <returns></returns>
private IEnumerator IE_USE()
{
for (int i = 0; i < 2; i++)
{
leftFrontIndicator.gameObject.SetActive(false);
rightFrontIndicator.gameObject.SetActive(false);
yield return new WaitForSeconds(0.1f);
leftFrontIndicator.gameObject.SetActive(true);
rightFrontIndicator.gameObject.SetActive(true);
yield return new WaitForSeconds(0.1f);
}
}
private void OnEnable()
{
if (leftQueenIndicator != null)
{
leftQueenIndicator.gameObject.SetActive(false);
}
if (rightQueenIndicator != null)
{
rightQueenIndicator.gameObject.SetActive(false);
}
}
/// <summary>
/// 右轮旋转
/// </summary>
public void RightWheelSpin()
{
if (Scenes.Instance.e_GameState == E_GameState.GameVictory)
{
rightWheel.transform.Rotate(Vector3.right * 800 * Time.deltaTime);
}
}
}