/*** * OneAlive 放逐勇士 * 控制层 * 时间控制脚本 * 控制毒圈的刷新时间以及毒圈的缩小和刷新(demo) * 何张强 * 2018.3.19 第一次创建 * ***/ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.DOTweenEditor; using DG.Tweening; public class TimerControl : MonoBehaviour { public Text StageText; //目前是第几个圈 public Text TimeingText; //倒计时 public float[] LimitTime; //数组:每一圈的限制时间 public int Stage; //目前所属的阶段,第几个圈 public bool IsArrive; //判断毒圈是否到达 public float Timeing; //倒计时,时间等于毒圈限制时间 private float mRadius ; //毒圈的半径 private float mCircleX; //毒圈的位置X private float mCircleZ; //毒圈的位置Y public GameObject CirclePrefab; //毒圈的预制品 private GameObject Safetyzone; //安全区 public float ShrinkTime=10f; //缩毒时间 void Start () { Stage = 0; Timeing = LimitTime[Stage]; IsArrive = true; mRadius = 35; //mRadius = 0.5f * mRadius; //mCircleX = Random.Range(-0.2f * mRadius, 0.2f * mRadius); //mCircleZ = Random.Range(-0.2f * mRadius, 0.2f * mRadius); mCircleX = -5f; mCircleZ = 5f; } void Update () { if (IsArrive) { TimeingText.text = "还有" + Timeing + "刷毒"; StageText.text = "目前是第" + Stage+1 + "圈"; Timeing -= Time.deltaTime; if (Timeing <= 0) { Timeing = 0; ElectricCircleMove(); Stage++; IsArrive = false; } } } /// <summary> ///协程用来等待毒圈到位后重新倒计时 /// </summary> /// <returns></returns> IEnumerator StartNextTime() { yield return new WaitForSeconds(ShrinkTime); StartNextElectricCircle(); } /// <summary> /// 开始下一个毒圈 /// </summary> public void StartNextElectricCircle() { IsArrive = true; print(Stage); print(LimitTime .Length); Timeing = LimitTime[Stage]; } /// <summary> /// 毒圈缩小方法 /// </summary> public void ElectricCircleMove() { // mRadius = 0.5f * mRadius; //mcirclex = random.range(-0.2f * mradius, 0.2f * mradius); //mcirclez = random.range(-0.2f * mradius, 0.2f * mradius); CircleCenter(); SafetyzoneMove(mRadius, mCircleX, mCircleZ); CirclePrefab.transform.DOMove(new Vector3(mCircleX, 0, mCircleZ), ShrinkTime); CirclePrefab.transform.DOScaleX(mRadius, ShrinkTime); CirclePrefab.transform.DOScaleZ(mRadius, ShrinkTime); if(Stage < LimitTime .Length-1) { StartCoroutine(StartNextTime()); } } /// <summary> /// 安全区的移动方法 /// </summary> /// <param name="radius">半径</param> /// <param name="circleX">安全区的圆心X坐标</param> /// <param name="circleY">安全区的圆心Y坐标</param> public void SafetyzoneMove(float radius,float circleX,float circleY) { Safetyzone = Instantiate(CirclePrefab, new Vector3(circleX, 0, circleY), Quaternion.identity); Safetyzone.transform.DOMove(new Vector3(circleX, 0, circleY), 0.1f); Safetyzone.transform.DOScaleX(radius, 0.1f); Safetyzone.transform.DOScaleZ(radius, 0.1f); } /// <summary> /// 圆心坐标及半径的算法 /// </summary> public void CircleCenter() { mRadius = 0.5f * mRadius; mCircleX = Random.Range(mCircleX - 0.2f*mRadius, mCircleX +0.2f* mRadius); mCircleZ = Random.Range(mCircleZ - 0.2f*mRadius, mCircleZ +0.2f* mRadius); } }
OneAlive-毒圈设计
猜你喜欢
转载自blog.csdn.net/qq_35711014/article/details/79615774
今日推荐
周排行