当前位置: 首页 > news >正文

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);}     }
}


http://www.mrgr.cn/news/14426.html

相关文章:

  • 引擎切换pdf识别简历分析
  • HTTP的通讯流程
  • 群晖NAS本地使用Docker搭建Home Assistant智能家居平台与远程访问
  • 贪心算法三道经典题(买卖股票,分发饼干)
  • 300W才能开通,A股自动交易公平吗?散户如何实现程序化交易?|邢不行
  • 【STM32】IIC
  • 深入理解 Go 语言并发编程--管道(channel) 的底层原理
  • 2024.8.29 作业
  • 【准则化的思想】绝对充分度
  • 探索 Linux 内核启动过程
  • 爬取数据时,如何避免违法问题
  • 使用ddns-go实现自动配置IPv6的DDNS
  • 数据库(专业存储数据)
  • 【工具使用】clang++踩坑记录
  • mac系统下Java环境安装
  • React滚动加载(无限滚动)功能实现
  • 「个性化定制」引领美业新潮流|博弈美业SaaS系统探索未来美业的个性化革新
  • 恒电流间歇滴定法 (GITT) 测试教程
  • 高级MySQL数据库备份脚本
  • Flask-RESTFul 之 RESTFul 的响应处理