loudixvmuniu/Assets/_Scripts/Application/UI/OperationStepPanel.cs
2025-01-02 19:54:22 +08:00

615 lines
29 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CG.Framework;
using CG.UTility;
using DG.Tweening;
using KinematicCharacterController;
using KinematicCharacterController.Examples;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
/*******************************************************************************
*Create By CG
*Function
*******************************************************************************/
namespace ZXK.LouDiXvMuNiu
{
public class OperationStepPanel : UIBase
{
protected Transform _stepContent = null;
protected GameObject _stepBigItemPrefab = null;
protected GameObject _stepSmallItemPrefab = null;
private List<GameObject> _stepBigs = new List<GameObject>();
private List<GameObject> _stepChildrens = new List<GameObject>();
protected const float _smallItemSizeY = 25.0f;//每个子项大小
protected const float _smallItemIntervalY = 5.0f;//每个子项之间间隔
protected const float _smallParentInitPosY = -40.0f;//子项父物体初始位置
private const float _openCloseAnmSpeed = 0.01f;//开合动画播放速度控制
private GameObject _introduceGeo = null;
private Text _trainExplainTxt = null;
private Button _nextBtn = null;
private Toggle _defaultCameraTRTog = null;
private Toggle _nearCameraTRTog = null;
#region
private KinematicCharacterMotor kinematic = null;
private ExampleCharacterCamera characterCamera = null;
#endregion
protected override void Awake()
{
base.Awake();
_stepContent = GetWedage("StepContent_N").transform;
_stepBigItemPrefab = GetWedage("StepBigItemPrefab_N");
_stepSmallItemPrefab = GetWedage("StepSmallItemPrefab_N");
_introduceGeo = GetWedage("introduce_N");
_trainExplainTxt = GetWedage("TrainExplain_N").GetComponent<Text>();
_nextBtn = GetWedage("NextBtn_N").GetComponent<Button>();
_defaultCameraTRTog = GetWedage("DefaultTR_N").GetComponent<Toggle>();
_nearCameraTRTog = GetWedage("NearTR_N").GetComponent<Toggle>();
List<NiuData> dataSrc = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
List<string[]> dataTemp = new List<string[]>();
for (int i = 0; i < dataSrc.Count; i++)
{
string[] msg = new string[4] { dataSrc[i].id.ToString(), dataSrc[i].TaskName, dataSrc[i].ThreeTaskName, dataSrc[i].TaskType };
dataTemp.Add(msg);
}
kinematic = Camera.main.GetComponent<CameraControl>()._CameraCtrl.transform.GetComponent<KinematicCharacterMotor>();
characterCamera = Camera.main.GetComponent<ExampleCharacterCamera>();
//TODO 临时内容
switch (GameManager.Instance._CurModelType)
{
case ConstCtrl.ModuleName_TQFAQCL:
case ConstCtrl.ModuleName_CSPLCL:
case ConstCtrl.ModuleName_RGSJ:
case ConstCtrl.ModuleName_CP:
case ConstCtrl.ModuleName_PTYZ:
case ConstCtrl.ModuleName_YYZD:
ChangeCameraPos(new Vector3(2.2f, -1.19f, -2.24f), new Vector3(18.474f, -38.834f, 0));
break;
case ConstCtrl.ModuleName_PTXZ:
case ConstCtrl.ModuleName_JZLVJC:
ChangeCameraPos(new Vector3(1.071f, -2.406f, 39.0302f), new Vector3(7.35f, 0, 0));
break;
}
_defaultCameraTRTog.onValueChanged.AddListener((isOn) =>
{
if (isOn)
{
NiuData curStep = GameManager.Instance._DataNiuHandler.CurNiuHandler.Value;
CameraSetDefaultTR(curStep);
}
});
_nearCameraTRTog.onValueChanged.AddListener((isOn) =>
{
if (isOn)
{
NiuData curStep = GameManager.Instance._DataNiuHandler.CurNiuHandler.Value;
CameraSetNearTR(curStep);
}
});
_defaultCameraTRTog.isOn = _nearCameraTRTog.isOn = false;
InitStepSecondMenuDataUI(dataTemp);
GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged += OnValueChanged;
}
private void Update()
{
if(Input.GetKey(KeyCode.Z))
{
if (kinematic == null || characterCamera == null) return;
Vector3 pos = kinematic.transform.position;
float rotY = kinematic.transform.rotation.eulerAngles.y;
Vector3 rot = new Vector3(characterCamera.transform.rotation.eulerAngles.x, rotY, 0);
int index = GameManager.Instance._DataNiuHandler.CurNiuHandler.Value.id;
string cameraTRInfo = string.Format("{0}_{1}_{2}|{3}_{4}_{5}", pos.x, pos.y, pos.z, rot.x, rot.y, rot.z);
GetWedage("TempReadCameraPos_N").GetComponent<InputField>().text = cameraTRInfo;
}
}
protected override void OnDestroy()
{
base.OnDestroy();
GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged -= OnValueChanged;
WDebug.Log("解绑");
}
/// <summary>
/// 实例化数据到流程栏(带有二级菜单功能)
/// </summary>
/// <param name="partsInfo">[id,TaskName,ThreeTaskName,TaskType]</param>
private void InitStepSecondMenuDataUI(List<string[]> partsInfo)
{
string bigStep = "";
int bigStepIndex = 0;
float extensionTxt = 0;
RectTransform smallParent = null;
RectTransform stepBigRect = null;
foreach (string[] item in partsInfo)
{
if (item[3].Equals(ConstCtrl.TASKTYPE_Tran)
|| item[3].Equals(ConstCtrl.TASKTYPE_Finish)
|| item[3].Equals(ConstCtrl.TASKTYPE_VideoAuto)) continue;
if (!item[1].Equals(bigStep))
{
bigStepIndex++;
GameObject stepBigGeo = Instantiate(_stepBigItemPrefab, _stepContent);
stepBigRect = stepBigGeo.GetComponent<RectTransform>();
smallParent = stepBigGeo.transform.Find("StepSmallParent").GetComponent<RectTransform>();
stepBigGeo.name = /*curShowGeo + "_" + */item[1];
stepBigGeo.transform.Find("IsSelectBG/TextDetail").GetComponent<Text>().text = item[1];
_stepBigs.Add(stepBigGeo);
Button bigBtn = stepBigGeo.transform.Find("BigBtnTri").GetComponent<Button>();
#if !UNITY_EDITOR
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
bigBtn.interactable = false;
}
#endif
bigBtn.onClick.AddListener(() =>
{//点击大步骤,直接选择对应第一个小步骤
Toggle smallStepTog = bigBtn.transform.parent.Find("StepSmallParent").GetChild(1).GetComponent<Toggle>();
smallStepTog.isOn = true;
SelectBigStepGeo(bigBtn.transform.parent);
});
Toggle bigOpenClose = stepBigGeo.transform.Find("OpenCloseBtn").GetComponent<Toggle>();
#if !UNITY_EDITOR
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
bigOpenClose.interactable = false;
}
#endif
bigOpenClose.GetComponent<Toggle>().onValueChanged.AddListener((isOn) =>
{
OnClickBigStep(bigOpenClose.transform.parent.GetComponent<RectTransform>(), !isOn);
});
bigOpenClose.isOn = _stepBigs.Count == 1;
bigStep = item[1];
stepBigGeo.SetActive(true);
extensionTxt = 0;
}
if (_stepChildrens.Count > 1)
{
string previousStepThreeTaskName = _stepChildrens[_stepChildrens.Count - 1].transform.Find("TextContent").GetComponent<Text>().text;
if (item[2] == previousStepThreeTaskName) continue;
}
GameObject stepSmallGeo = Instantiate(_stepSmallItemPrefab, smallParent.transform);
stepSmallGeo.name = item[0];
string contentStr = item[2];
stepSmallGeo.transform.Find("TextContent").GetComponent<Text>().text = contentStr;
Toggle smallTog = stepSmallGeo.GetComponent<Toggle>();
#if !UNITY_EDITOR
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
smallTog.interactable = false;
}
#endif
smallTog.group = stepSmallGeo.transform.parent.GetComponent<ToggleGroup>();
smallTog.onValueChanged.AddListener((isOn) =>
{
List<NiuData> tempData = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
for (int i = 0; i < tempData.Count; i++)
{
if (tempData[i].id.ToString().Equals(smallTog.transform.name))
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = tempData[i];
break;
}
}
});
RectTransform stepSmallRectTran = stepSmallGeo.GetComponent<RectTransform>();
int smallNumber = smallParent.childCount - 2;//多减掉一个隐藏的预制体
stepSmallRectTran.anchoredPosition = new Vector2(stepSmallRectTran.anchoredPosition.x, -(_smallItemSizeY + _smallItemIntervalY) * smallNumber - extensionTxt);
//if (CG.UTility.UtilitiesMng.GetTransCharNum(contentStr) > 25)
//{
// extensionTxt += _smallItemSizeY;
// stepSmallRectTran.sizeDelta = new Vector2(stepSmallRectTran.sizeDelta.x, _smallItemSizeY + _smallItemSizeY);
//}
stepBigRect.sizeDelta = new Vector2(stepBigRect.sizeDelta.x, -_smallParentInitPosY - _smallItemIntervalY + _smallItemSizeY + (_smallItemSizeY + _smallItemIntervalY) * smallNumber + extensionTxt);
smallParent.sizeDelta = new Vector2(smallParent.sizeDelta.x, _smallItemSizeY + (_smallItemSizeY + _smallItemIntervalY) * smallNumber + extensionTxt);
stepSmallGeo.SetActive(true);
_stepChildrens.Add(stepSmallGeo);
}
}
private void OnValueChanged(NiuData obj)
{
if (obj.TaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.TaskName)
{//前后任务名字不同
NiuSceneMng._Instance.InitPlayAnmState(obj, GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue);
}
if(obj.ThreeTaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.ThreeTaskName)
{//前后三级人物名字不同
_defaultCameraTRTog.isOn = true;
//考核模式下,在物品选择之前,物品需要隐藏
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
int geoShowID = 0;
foreach (NiuData item in GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType])
{
if (item.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo))
{
geoShowID = item.id;
}
}
NiuSceneMng._Instance.UseToolsActive(obj.id > geoShowID);
}
}
UpdateTaskType(obj);
UpdateSelectItem(obj);
WordExplain(obj);
//此处判断是否显示工具箱
if (!GameManager.Instance._IsTrain&&
obj.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo))
{
UI_Manage.Instance.ShowPanel("SelectToolsPanel", Type.GetType("ZXK.LouDiXvMuNiu.SelectToolsPanel"), UIGroup.Main);
}
else
{
UI_Manage.Instance.HidePanel("SelectToolsPanel");
}
}
/// <summary>
/// 实时跟新选择选项对应的样式信息
/// </summary>
/// <param name="obj"></param>
private void UpdateSelectItem(NiuData obj)
{
//找到选项所在的三级子任务当中的第一项作为高亮选项
NiuData objLight = null;
List<NiuData> threeTasks = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
for (int i = 0; i < threeTasks.Count; i++)
{
if (threeTasks[i].ThreeTaskName == obj.ThreeTaskName)
{
objLight = threeTasks[i];
break;
}
}
//选项自身变化
Transform seleTran = null;
for (int i = 0; i < _stepChildrens.Count; i++)
{
_stepChildrens[i].GetComponent<Toggle>().isOn = false;
_stepChildrens[i].transform.Find("TextContent").GetComponent<Text>().color = Color.white;
if (_stepChildrens[i].name.Equals(objLight.id.ToString()))
{
seleTran = _stepChildrens[i].transform;
}
}
Text nameTxt = seleTran.Find("TextContent").GetComponent<Text>();
nameTxt.color = Color.blue;
//根据子选项Transform找到大步骤选项变化
for (int i = 0; i < _stepBigs.Count; i++)
{
_stepBigs[i].transform.Find("IsSelectBG/TextDetail").GetComponent<Text>().color = Color.white;
_stepBigs[i].transform.Find("IsSelectBG/TextDetail").GetComponent<Outline>().effectColor = new Color(Color.white.r, Color.white.g, Color.white.b, 0.2f);
_stepBigs[i].transform.Find("IsNoSelectLogo/IsSelectLogoLINE").gameObject.SetActive(false);
}
SelectBigStepGeo(seleTran.parent.parent);
}
/// <summary>
/// 根据任务不同类型进行处理每个步骤
/// </summary>
/// <param name="obj"></param>
private void UpdateTaskType(NiuData obj)
{
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
List<GameObject> tempToolArray = NiuSceneMng._Instance.GetNeedClickTools(obj);
NiuSceneMng._Instance.OnlyShowBTGeo(tempToolArray.ToArray());
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (string.IsNullOrEmpty(obj.Question))
{
NiuSceneMng._Instance.GetNeedClickTools(obj);
}
else
{
NiuSceneMng._Instance.AnswerSystemInStep(obj);
}
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoiceVideoQuestion))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
bool isExam = GameManager.Instance._StateContext.GetState().Name.Equals("ExamState");
string[] answers = obj.OptionsAll.Split("|");
if (answers.Length % 2 != 0)
{
PopUpMng.ThreeVideoChoicePanel(obj.Question, answers, answers, NiuSceneMng._Instance.GetOptionIndex(obj.OptionRight), isExam, () =>
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoicePicQuestion))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
NiuSceneMng._Instance.ChoiceImgInStep(obj.ModelBT.Split("|"));
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Video))
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
List<GameObject> tempToolArray = NiuSceneMng._Instance.GetNeedClickTools(obj);
NiuSceneMng._Instance.OnlyShowBTGeo(tempToolArray.ToArray());
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip);
videoGeo.GetComponent<VideoShowPanel>().PlayVideoClip(obj.VideoPath, () =>
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(obj.QNextNum);
});
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_VideoAuto))
{
GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip);
videoGeo.GetComponent<VideoShowPanel>().PlayVideoClip(obj.VideoPath, () =>
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Tran))
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
NiuSceneMng._Instance.TimeTranInStep(obj);
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (string.IsNullOrEmpty(obj.Question))
{
NiuSceneMng._Instance.TimeTranInStep(obj);
}
else
{
NiuSceneMng._Instance.AnswerSystemInStep(obj);
}
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_TranAnim))
{
NiuSceneMng._Instance.TimeTranAnmInStep(obj);
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Finish))
{
NiuSceneMng._Instance.TimelineContinue();
PopUpMng.PopAlert("提示", "当前模块已完成", "确认", null);
}
}
/// <summary>
/// 点击大步骤,控制大步骤展开合并
/// </summary>
/// <param name="stepBigRect"></param>
private void OnClickBigStep(RectTransform stepBigRect,bool isClose)
{
RectTransform smallItemParent = stepBigRect.transform.Find("StepSmallParent").GetComponent<RectTransform>();
if (isClose)
{//处于展开状态
//关闭动画
//DOTween.Kill("OpenSequence");
Sequence closeSequence = DOTween.Sequence();
closeSequence.Append(stepBigRect.DOSizeDelta(new Vector2(stepBigRect.sizeDelta.x, -_smallParentInitPosY - _smallItemIntervalY), _openCloseAnmSpeed * smallItemParent.childCount));
closeSequence.Insert(0, stepBigRect.Find("OpenCloseBtn").DORotate(Vector3.forward * 0.0f, _openCloseAnmSpeed * smallItemParent.childCount));
closeSequence.Insert(0, smallItemParent.DOSizeDelta(new Vector2(smallItemParent.sizeDelta.x, 0), _openCloseAnmSpeed * smallItemParent.childCount));
for (int i = 0; i < smallItemParent.GetComponentsInChildren<Button>().Length; i++)
{
RectTransform item = smallItemParent.GetComponentsInChildren<Button>()[i].GetComponent<RectTransform>();
closeSequence.Insert(0, item.DOAnchorPosY(0, _openCloseAnmSpeed * (i + 1)));
}
closeSequence.Insert(0, smallItemParent.DOAnchorPosY(0, _openCloseAnmSpeed * smallItemParent.childCount)).OnComplete(() =>
{
smallItemParent.gameObject.SetActive(false);
}).SetId("CloseSequence");
}
else
{//处于合并状态
//展开动画
//DOTween.Kill("CloseSequence");
Sequence openSequence = DOTween.Sequence();
float smallItemParentSizeY = _smallItemSizeY + (_smallItemSizeY + _smallItemIntervalY) * (smallItemParent.childCount - 2);//多减掉一个隐藏的预制体
openSequence.Append(stepBigRect.DOSizeDelta(new Vector2(stepBigRect.sizeDelta.x, -_smallParentInitPosY - _smallItemIntervalY + smallItemParentSizeY), _openCloseAnmSpeed * smallItemParent.childCount));
openSequence.Insert(0, stepBigRect.Find("OpenCloseBtn").DORotate(Vector3.forward * -90.0f, _openCloseAnmSpeed * smallItemParent.childCount));
openSequence.Insert(0, smallItemParent.DOSizeDelta(new Vector2(smallItemParent.sizeDelta.x, smallItemParentSizeY), _openCloseAnmSpeed * smallItemParent.childCount));
for (int i = 0; i < smallItemParent.GetComponentsInChildren<Button>().Length; i++)
{
RectTransform item = smallItemParent.GetComponentsInChildren<Button>()[i].GetComponent<RectTransform>();
openSequence.Insert(0, item.DOAnchorPosY(-(_smallItemSizeY + _smallItemIntervalY) * i, _openCloseAnmSpeed * (i + 1)));
}
openSequence.Insert(0, smallItemParent.DOAnchorPosY(_smallParentInitPosY, _openCloseAnmSpeed * smallItemParent.childCount)).OnStart(() =>
{
smallItemParent.gameObject.SetActive(true);
}).SetId("OpenSequence");
}
}
/// <summary>
/// 选择对应的大步骤
/// </summary>
/// <param name="seleTran">代表大步骤物体</param>
private void SelectBigStepGeo(Transform bigBtnTran)
{
Toggle bigOpenClose = bigBtnTran.Find("OpenCloseBtn").GetComponent<Toggle>();
bigOpenClose.isOn = true;
Transform itemTxt = bigBtnTran.Find("IsSelectBG/TextDetail");
itemTxt.GetComponent<Text>().color = Color.blue;
itemTxt.GetComponent<Outline>().effectColor = new Color(Color.blue.r, Color.blue.g, Color.blue.b, 0.2f);
bigBtnTran.Find("IsNoSelectLogo/IsSelectLogoLINE").gameObject.SetActive(true);
}
/// <summary>
/// 文字说明界面
/// </summary>
private void WordExplain(NiuData obj)
{
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_WordExp))
{
UI_Manage.Instance.ClosePanel("ShowToastUIPrefab");
_introduceGeo.SetActive(true);
_trainExplainTxt.text = obj.ProcessDescription;
if (!string.IsNullOrEmpty(obj.SoundPath))
{
string audioPath = Application.streamingAssetsPath + "/Audios/NiuTips/" + obj.SoundPath + ".mp3";
CG.UTility.UtilitiesMng.LoadAudio(audioPath, (AudioClip clip) =>
{
if (clip)
{
_trainExplainTxt.GetComponent<AudioSource>().clip = clip;
_trainExplainTxt.GetComponent<AudioSource>().Play();
}
});
}
_nextBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(1.3f, 388.3f);
}
else if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo))
{
_introduceGeo.SetActive(false);
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
PopUpMng.PopAddAudToast(obj.ProcessDescription, obj.SoundPath, -1, UIGroup.Tip);
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
PopUpMng.PopToast(obj.ExamTip, -1, UIGroup.Tip);
}
_nextBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(890.0f, 966.0f);
}
else if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
{
_introduceGeo.SetActive(false);
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
if (string.IsNullOrEmpty(obj.ProcessDescription))
{
UI_Manage.Instance.HidePanel("ShowToastUIPrefab");
}
else
{
PopUpMng.PopAddAudToast(obj.ProcessDescription, obj.SoundPath, -1, UIGroup.Tip);
}
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (string.IsNullOrEmpty(obj.ExamTip))
{
UI_Manage.Instance.HidePanel("ShowToastUIPrefab");
}
else
{
PopUpMng.PopToast(obj.ExamTip, -1, UIGroup.Tip);
}
}
_nextBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(890.0f, 966.0f);
}
_nextBtn.onClick.RemoveAllListeners();
_nextBtn.onClick.AddListener(() =>
{
if (NiuSceneMng._Instance._IsPlayAnm) return;
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
}
/// <summary>
/// 手动摄像机则按钮变为false
/// </summary>
public void SetCameraTRTogFalse()
{
_defaultCameraTRTog.isOn = _nearCameraTRTog.isOn = false;
}
/// <summary>
/// 设置摄像机为近距离视角
/// </summary>
private void CameraSetNearTR(NiuData obj)
{
if (string.IsNullOrEmpty(obj.CameraNearTR)) return;
try
{
string[] cameraDefaultTR = obj.CameraNearTR.Split("|");
string[] camDefPosStr = cameraDefaultTR[0].Split("_");
string[] camDefRotStr = cameraDefaultTR[1].Split("_");
Vector3 cameraDefPos = new Vector3(float.Parse(camDefPosStr[0]), float.Parse(camDefPosStr[1]), float.Parse(camDefPosStr[2]));
Vector3 cameraDefRot = new Vector3(float.Parse(camDefRotStr[0]), float.Parse(camDefRotStr[1]), float.Parse(camDefRotStr[2]));
ChangeCameraPos(cameraDefPos, cameraDefRot);
}
catch (Exception ex)
{
WDebug.LogError($"数据出现错误:{ex.Message}");
return;
}
}
/// <summary>
/// 设置摄像机为默认视角
/// </summary>
/// <param name="obj"></param>
private void CameraSetDefaultTR(NiuData obj)
{
if (string.IsNullOrEmpty(obj.CameraDefaultTR)) return;
try
{
string[] cameraDefaultTR = obj.CameraDefaultTR.Split("|");
string[] camDefPosStr = cameraDefaultTR[0].Split("_");
string[] camDefRotStr = cameraDefaultTR[1].Split("_");
Vector3 cameraDefPos = new Vector3(float.Parse(camDefPosStr[0]), float.Parse(camDefPosStr[1]), float.Parse(camDefPosStr[2]));
Vector3 cameraDefRot = new Vector3(float.Parse(camDefRotStr[0]), float.Parse(camDefRotStr[1]), float.Parse(camDefRotStr[2]));
ChangeCameraPos(cameraDefPos, cameraDefRot);
}
catch (Exception ex)
{
WDebug.LogError($"数据出现错误:{ex.Message}");
return;
}
}
/// <summary>
/// 调整场景摄像机位置
/// </summary>
/// <param name="pos"></param>
/// <param name="rot"></param>
private void ChangeCameraPos(Vector3 pos, Vector3 rot)
{
///设置人偶物体旋转,位置
kinematic.SetPositionAndRotation(pos, Quaternion.Euler(0, rot.y, 0));///设置相机旋转,位置
characterCamera.transform.rotation = Quaternion.Euler(rot.x, rot.y, 0);
characterCamera.transform.position = characterCamera.pos.transform.position;
}
}
}