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