2025-02-11 17:11:14 +08:00

273 lines
5.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using DG.Tweening;
using RenderHeads.Media.AVProVideo;
using ZXK.BYSS;
using UnityEngine.EventSystems;
public class AvproVideoStep : MonoBehaviour, IPointerClickHandler
{
//-1.是否交互
[Header("是否交互")]
public bool Isinteraction;
//是否播放音频
[Header("是否播放音频")]
public bool IsPlayAudio;
[Header("音频对应的索引号")]
public int AudioClipIndex;
//0.视频地址,一个视频一个地址
[Header("一个视频一个地址")]
public string AvproVideoPath;
// public MediaPlayer AvproVideoMedia;
//1.下拉框,按钮
[Header("下拉框,按钮")]
public BtnType btnType;
//2.双击 ,单击
[Header("双击 ,单击")]
public ClickType clickType;
//3.事件(支持按钮是否点击,下拉框是否正确);
private UnityEvent FinishEvent;
[Header("显示的提示文本")]
public string TextStr;
[Header("下拉框,默认显示")]
public int DefaultIndex;
[Header("下拉框,正确答案")]
public int RightIndex;
[ReadOnly]
public GameObject ShouZhiObj;
[ReadOnly]
public Button Btn;
[ReadOnly]
public Dropdown Ddown;
/// <summary>
/// 外部调用隐藏
/// </summary>
public void OnHide()
{
//清除事件
if (Btn!=null)
{
seq?.Kill(); seq = null;
Btn.onClick.RemoveAllListeners();
Btn.gameObject.SetActive(false);
}
if (ShouZhiObj!=null)
{
seq?.Kill(); seq = null;
Btn.onClick.RemoveAllListeners();
Btn.gameObject.SetActive(false);
ShouZhiObj.gameObject.SetActive(false);
}
if (Ddown!=null)
{
Ddown.gameObject.SetActive(false);
}
}
//private string FloderPath;
///组件初始化
public void OnInitd()
{
//是否可以交互
if (Isinteraction)
{
//判断按钮类型
switch (btnType)
{
case BtnType.btn:
Btn = transform.GetComponent<Button>();
Btn.gameObject.SetActive(true);
Btn.onClick.RemoveAllListeners();
//判断交互方式
break;
case BtnType.dropDown:
Ddown = transform.GetComponent<Dropdown>();
//初始参数设置
Ddown.gameObject.SetActive(true);
Ddown.value = DefaultIndex;
Ddown.onValueChanged.AddListener(
(int index) => DowpBack(index)
) ;
break;
case BtnType.none:
//不做任何操作
break;
case BtnType.shouzhi:
ShouZhiObj = transform.GetChild(0).gameObject;
Btn = transform.GetComponent<Button>();
ShouZhiObj.gameObject.SetActive(true);
Btn.gameObject.SetActive(true);
break;
}
//不同类型不同动画。方式
if (Btn!=null)
{
seq = OnBtnShow();
seq.Play().SetLoops(-1);
}
if (ShouZhiObj!=null)
{
seq = OnShouZhiShow();
seq.Play().SetLoops(-1);
}else
if (Ddown!=null)
{
Ddown.gameObject.SetActive(true);
}
}
else
{
//单视频播放,直接发送结果
CallBackController();
}
}
Sequence seq;
///显示按钮动画
public Sequence OnBtnShow()
{
var _seq = DOTween.Sequence();
var v = Btn.gameObject.GetComponent<Image>().DOFade(0,0.3f);
_seq.Insert(0, v);
v = Btn.gameObject.GetComponent<Image>().DOFade(1, 0.3f);
_seq.Insert(0.5f, v);
return _seq;
}
//显示手指动画
public Sequence OnShouZhiShow()
{
var _seq = DOTween.Sequence();
var v = ShouZhiObj.gameObject.GetComponent<Image>().DOFade(0, 0.3f);
_seq.Insert(0, v);
v = Btn.gameObject.GetComponent<Image>().DOFade(0, 0.3f);
_seq.Insert(0, v);
v = Btn.gameObject.GetComponent<Image>().DOFade(1, 0.3f);
_seq.Insert(0.5f, v);
v = ShouZhiObj.gameObject.GetComponent<Image>().DOFade(1, 0.3f);
_seq.Insert(0.5f, v);
return _seq;
}
///直接返回给管理器结果的方法
public void CallBackController() {
Debug.Log("操作完成");
AvproVideoController.Instance.GetStepFuction(this);
}
//dropDown返回方法
public void DowpBack(int index)
{
if (index==RightIndex)
{
Debug.Log("操作完成");
AvproVideoController.Instance.GetStepFuction(this);
}
}
public void OnPointerClick(PointerEventData eventData)
{
if (btnType== BtnType.btn)
{
int clickCount = eventData.clickCount;
switch (clickType)
{
case ClickType.once:
if (clickCount == 1)
OnSingleClick();
break;
case ClickType.two:
if (clickCount == 2)
OnDoubleClick();
break;
}
}
}
void OnSingleClick()
{
CallBackController();
}
void OnDoubleClick()
{
CallBackController();
}
}