using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public enum PrizeType//几种获奖状态
{
SuperPrize,
FirstPrize,
SecondPrize,
ThirdPrize,
ThankYou
}
public class test : MonoBehaviour
{
private float RotateSpeed;//旋转速度
private Vector3 PauseAngle;//获取转变的Vector3类型
private float AngleZ;//z轴
private string Text;//提示文字
public Text TextUI;//提示文字UI
private bool enable = false;//控制UI出现的bool值
public PrizeType type;//奖品类型
private void Start()
{
RotateSpeed = 0;
TextUI.enabled = false;
}
private void Update()
{
UpdateAngle();//更新角度
UpdatePrize();//更新奖品
RotateSpeed -= Time.deltaTime * 100;
TextUI.text = Text;
transform.Rotate(Vector3.forward * Time.deltaTime * RotateSpeed);
if (RotateSpeed <= 0)
{
RotateSpeed = 0;
Time.timeScale = 0;
PauseAngle = GetInspectorRotationValueMethod(transform);
AngleZ = PauseAngle.z;
if(enable)
{
TextUI.enabled = true;
}
}
}
public void StartButton()//开始按钮
{
RotateSpeed = Random.Range(1000, 2500);
Time.timeScale = 1;
enable = true;
}
private void UpdateAngle()//更新状态
{
float angle = AngleZ;//临时变量来处理角度的超出范围的问题
if (angle > 360)
{
angle -= 360;
}
else if (angle < -331.2f)
{
angle += 360;
}
if(angle >= -31.7f && angle < 32.6f)
{
type = PrizeType.FirstPrize;
}
else if (angle >= -91.1f && angle < -31.7f)
{
type = PrizeType.SuperPrize;
}
else if (angle >= -149.5f && angle < -91.1f)
{
type = PrizeType.ThankYou;
}
else if (angle >= -210f && angle < -149.5f)
{
type = PrizeType.ThirdPrize;
}
else if (angle >= -269f && angle < -210f)
{
type = PrizeType.SecondPrize ;
}
else if (angle >= -331.2f && angle < -269f)
{
type = PrizeType.ThankYou;
}
}
public Vector3 GetInspectorRotationValueMethod(Transform transform)//把四元数转换成为Vector3类型的参数
{
// 获取原生值
System.Type transformType = transform.GetType();
PropertyInfo m_propertyInfo_rotationOrder = transformType.GetProperty("rotationOrder", BindingFlags.Instance | BindingFlags.NonPublic);
object m_OldRotationOrder = m_propertyInfo_rotationOrder.GetValue(transform, null);
MethodInfo m_methodInfo_GetLocalEulerAngles = transformType.GetMethod("GetLocalEulerAngles", BindingFlags.Instance | BindingFlags.NonPublic);
object value = m_methodInfo_GetLocalEulerAngles.Invoke(transform, new object[] { m_OldRotationOrder });
string temp = value.ToString();
//将字符串第一个和最后一个去掉
temp = temp.Remove(0, 1);
temp = temp.Remove(temp.Length - 1, 1);
//用‘,’号分割
string[] tempVector3;
tempVector3 = temp.Split(',');
//将分割好的数据传给Vector3
Vector3 vector3 = new Vector3(float.Parse(tempVector3[0]),
float.Parse(tempVector3[1]), float.Parse(tempVector3[2]));
return vector3;
}
private void UpdatePrize()//更新奖品
{
switch(type)
{
case PrizeType.FirstPrize :
Text = "恭喜你获得一等奖!";
break;
case PrizeType.SecondPrize :
Text = "恭喜你获得二等奖!";
break;
case PrizeType.ThirdPrize:
Text = "恭喜你获得三等奖!";
break;
case PrizeType.SuperPrize:
Text = "恭喜你获得特等奖!";
break;
case PrizeType.ThankYou :
Text = "感谢参与!";
break;
}
}
}