public class Pin : MonoBehaviour { public float speed = 15;//插针移动到发射点的速度 public float speed1 = 25;//插针移动到目标位置点的速度 private bool isFly = false;//是否往目标点发射 private bool isReach = false;//是否到达就绪点 private Transform startPoint;//起始点(空物体) private Transform circle; private Vector3 targetCirclePos;//Pin的目标位置点 void Start() { startPoint = GameObject.Find("StartPoint").transform;//获取就绪点的Transform circle = GameObject.Find("Circle").transform;//获取circle的Transform targetCirclePos = circle.position;//圆形的位置点 targetCirclePos.y -= 1.48f;//计算得到Pin的位置点 } void Update() { if (isFly == false) { if(isReach == false) { transform.position = Vector3.MoveTowards(transform.position, startPoint.position, speed1 * Time.deltaTime);//往就绪点发射 //如果插针和就绪点之间的距离小于0.05,表示插针到达位置点 if (Vector3.Distance(transform.position, startPoint.position) < 0.05f) { isReach = true; } } } else { transform.position = Vector3.MoveTowards(transform.position, targetCirclePos, speed * Time.deltaTime);//往目标点移动 //如果Pin的位置和目标位置点的距离小于0.05 if (Vector3.Distance(transform.position, targetCirclePos) < 0.05f) { transform.position = targetCirclePos; transform.parent = circle;//把当前插针的父亲设置为circle 这样能够跟随父物体一起运动 isFly = false;//不再运动 } } } public void StartFly() { isFly = true; isReach = true; } } public class GameManager : MonoBehaviour { private Transform startPoint;//就绪点 private Transform spawnPoint;//开始点 public GameObject pinPrefabs; private Pin currentPin; private bool isGameOver = false; private int score = 0;//定义分数变量 public Text scoreText;//在面板直接拖拽赋值 private Camera mainCamera;//游戏结束的渐变动画 public float speed = 3;//设置动画渐变的速度 // Start is called before the first frame update void Start() { startPoint = GameObject.Find("StartPoint").transform; spawnPoint = GameObject.Find("SpawnPoint").transform; mainCamera = Camera.main;//获取主相机 SpawnPin(); } // Update is called once per frame void Update() { if (isGameOver) return; if (Input.GetMouseButtonDown(0))//如果鼠标按键按下,分数+1 { score++; scoreText.text=score.ToString();//.text的类型是String currentPin.StartFly(); SpawnPin(); } } void SpawnPin() { currentPin = GameObject.Instantiate(pinPrefabs, spawnPoint.position, pinPrefabs.transform.rotation).GetComponent<Pin>();//根据pinPrefabs生成对象 } //处理游戏的失败 public void GameOver() { if (isGameOver) return;//如果isGameOver=true 直接游戏结束 GameObject.Find("Circle").GetComponent<RotateSelf>().enabled = false;//脚本失效 StartCoroutine(GameOverAnimatiion());//开启协程 isGameOver = true;//游戏继续 } IEnumerator GameOverAnimatiion() { while (true) { mainCamera.backgroundColor = Color.Lerp(mainCamera.backgroundColor, Color.red, speed * Time.deltaTime);//插值,speed参数反映了变化的速度 mainCamera.orthographicSize = Mathf.Lerp(mainCamera.orthographicSize, 4, speed * Time.deltaTime);//lerp插值运算,朝目标颜色、size的变化 if (Mathf.Abs(mainCamera.orthographicSize - 4) < 0.01) { break; } yield return 0; } yield return new WaitForSeconds(1);//暂停一秒继续 SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);//重新加载场景 } } public class RotateSelf : MonoBehaviour { public float speed = 100; // Update is called once per frame void Update() { transform.Rotate(new Vector3(0, 0, speed * Time.deltaTime)); } } public class PinCircleTrigger : MonoBehaviour { // Start is called before the first frame update private void OnTriggerEnter2D(Collider2D other) {//碰撞监测函数,如果主动碰撞的名字为PinHead,触发碰撞监测函数 if (other.tag == "PinHead") { GameObject.Find("GameManager").GetComponent<GameManager>().GameOver();//GameManager对象的GameManager脚本的GameOver方法 } } }
