• 这个游戏是重A计划上看来的,全部看完根据自己思路写的(有3D版如果需要也可以发)
  • 最后有素材 ,APK文件,以及项目
  • 然后先发下效果图见缝插针(基于unity5.6.6f2)
  • 代码依然比较简单
  • 转盘旋转
  • public class CicleRotate : MonoBehaviour {
        /// 旋转角度
        public int RotateAngle = 90;
        void Start () {

            
        }
        
        
        void FixedUpdate () {
            if (!GameManger.isOver)
            {
                //进行旋转
                transform.Rotate(new Vector3(0, 0, -RotateAngle * Time.deltaTime));
            }
        }
    }

  • 游戏管理
  • public class GameManger : MonoBehaviour {
        ///创建位置
        private Transform creatPos;
        ///针
        private GameObject pin;
        //是否游戏结束
        public static bool isOver = false;
        void Start () {

            creatPos = GameObject.Find("CreatPos").transform;
            //获取针
            pin = Resources.Load<GameObject>("Pin");
            CreatPin();
        }

        void Update () {
            //点击进行创建针
            if (Input.GetMouseButtonDown(0))
            {
                CreatPin();
            }
            
        }
        ///创建针
        void CreatPin()
        {
            Instantiate(pin, creatPos.position, pin.transform.rotation);
        }
    }

  • 控制针的移动
  • public class PinMove : MonoBehaviour {
        private bool isFly = false;
        ///速度
        public int speed = 3;
        ///准备发射位置
        private Transform startPos;
        //移动到的位置
        private Transform Circle;
        //确切移动的位置
        private Vector3 sureTarget;
        //分数
        private Text ScoreText;

        void Start () {
            //获取位置
            startPos = GameObject.Find("StartPos").transform;
            Circle = GameObject.Find("Circle").transform;
            //确切移动到的位置
            sureTarget = new Vector3(Circle.position.x, Circle.position.y - 1.55f, Circle.position.z);
            ScoreText = GameObject.Find("Canvas").transform.Find("Score").GetComponent<Text>();
            
        }
        void FixedUpdate()
        {
            GamePinMove();
        }
        //针的移动
        private void GamePinMove()
        {
            //如果游戏在进行中
            if (!GameManger.isOver)
            {
                if (!isFly)
                {
                    ///移动到目标位置
                    transform.position = Vector3.MoveTowards(transform.position, startPos.position, speed * Time.deltaTime);
                    //因为差值  让其判断一下移动
                    if (Vector3.Distance(transform.position, startPos.position) < 0.05f)
                    {
                        //将其归位到移动位置
                        transform.position = startPos.position;

                    }
                    //当点击后切换状态
                    if (Input.GetMouseButtonDown(0))
                    {
                        isFly = true;
                    }
                }
                else
                {
                    //第二段移动
                    transform.position = Vector3.MoveTowards(transform.position, sureTarget, speed * Time.deltaTime);
                    //同上
                    if (Vector3.Distance(transform.position, sureTarget) < 0.05f)
                    {
                        //将位置放好
                        transform.position = sureTarget;
                        //将其重置为转盘的子物体
                        transform.SetParent(Circle);
                        //分数增加
                        ScoreText.text = (int.Parse(ScoreText.text) + 1).ToString();
                        //将脚本关闭
                        this.enabled = false;
                    }
                }
            }
        } 
    }

  • 处理游戏结束
  • public class PinHandle : MonoBehaviour {
        //控制动画结束的速度
        public float speed = 0.5f;

        //对分数与移动进行控制
       ///用触发检测来判断游戏是否结束
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (collision.tag == "PinHandle")
            {
                GameManger.isOver = true;
                StartCoroutine("GameOver");
            }
        }
        //使用协程执行当游戏结束时的逻辑
        IEnumerator GameOver()
        {
            while(true)
            {
                //通过控制主相机的背景颜色与视角缩放来进行游戏的结束动画
                Camera.main.backgroundColor = Color.Lerp(Camera.main.backgroundColor, Color.red, speed * Time.deltaTime);
                Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, 4, speed * Time.deltaTime);
                //判断动画是否结束
                if (Mathf.Abs(Camera.main.orthographicSize - 4) < 0.05f)
                {
                    break;
                }
                yield return 0;
            }
            //等待动画结束重新开始游戏
            yield return new WaitForSeconds(0.2f);
            SceneManager.LoadScene("Main");
            GameManger.isOver = false;
        }
    }

  • 最后说一下这只是用来熟悉一下的项目  代码写的感觉很差,等到4月多会有一个大型的RPG项目更新,用来做自己的毕业设计
  • 这里是贴工程的地方链接:https://pan.baidu.com/s/1ifwobzgQ0eqHKDyAeMIxZQ 
    提取码:i7vo 
     

相关文章: