Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)
本案例素材和教程都来自Siki学院,十分感谢教程中的老师
本文仅作学习笔记分享交流,不作任何商业用途
基础效果

游戏管理脚本
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{public static GameManager gameManager;public LineRenderer lineRenderer;//控制鼠标抬起时不会画线private bool isDown;//优化相同点List<Vector2> points = new List<Vector2>();//铅笔对象public GameObject Pencil;//水龙头对象public GameObject Tap;//滑动条public Slider slider;//游戏内的星星public Image[] starts;//设置不可检测的层级public LayerMask wall;//设置胜利条件,和获取赢得界面的星星public int winWater;public GameObject[] winStars;//胜利界面public GameObject winPanel;//通过的星星数量public int starsCount;//失败时控制杯子的表情变化void Start(){gameManager = this;isDown = true;lineRenderer.positionCount = 0;//初始化点的个数slider.value = 1;starsCount = 3;}void Update(){DrawLine();UpMouse();}private void DrawLine(){if (slider.value == 0){Pencil.SetActive(false);}if (Input.GetMouseButton(0) && isDown == true && slider.value > 0){//屏幕坐标转世界坐标Vector2 MousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);//铅笔跟随鼠标Pencil.transform.position = MousePosition;Pencil.SetActive(true);//画线并优化点的位置if (!points.Contains(MousePosition)){//开启铅笔晃动脚本Pencil.GetComponent<Pencil>().enabled = true;lineRenderer.positionCount++;lineRenderer.SetPosition(lineRenderer.positionCount - 1, MousePosition);//画出点points.Add(MousePosition);}//为画出来的线添加碰撞体if (points.Count > 1){//设置滑动条和星星减少的逻辑slider.value -= (MousePosition - points[lineRenderer.positionCount - 2]).magnitude / 20;if (slider.value < 0.75 && starts[2].enabled){starts[2].enabled = false;starsCount--;}if (slider.value < 0.5 && starts[1].enabled){starts[1].enabled = false;starsCount--;}if (slider.value < 0.25 && starts[0].enabled){starts[0].enabled = false;starsCount--;}//获取两点位置Vector2 p1 = points[lineRenderer.positionCount - 2];Vector2 p2 = points[lineRenderer.positionCount - 1];//添加碰撞器GameObject gameObject = new GameObject("Collider");gameObject.transform.parent = lineRenderer.transform;gameObject.transform.localPosition = (p1 + p2) / 2;gameObject.AddComponent<BoxCollider2D>();//设置碰撞器的位置gameObject.GetComponent<BoxCollider2D>().size = new Vector2((p1 - p2).magnitude, lineRenderer.endWidth);gameObject.transform.right = (p1 - p2).normalized;}}}private void UpMouse(){//如果抬起鼠标if (Input.GetMouseButtonUp(0)){//铅笔隐藏Pencil.SetActive(false);Pencil.GetComponent<Pencil>().enabled = false;//水龙头触发Tap.GetComponent<AboutWater>().enabled = true;isDown = false;if (!lineRenderer.gameObject.GetComponent<Rigidbody2D>())lineRenderer.gameObject.AddComponent<Rigidbody2D>();StartCoroutine(Reset());}}//失败重置场景public IEnumerator Reset(){yield return new WaitForSeconds(10f);SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);}//获胜激活面板public IEnumerator Win(){//激活胜利panelwinPanel.SetActive(true);for (int i = 0; i < starsCount; i++){//激活星星数量yield return new WaitForSeconds(0.5f);winStars[i].SetActive(true);} }
}
