用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码

2023-10-25 17:50

本文主要是介绍用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码

  • 前言
  • 运行效果
  • 实现构思
  • 实现过程
    • 编写脚本
      • 水果类
      • 水果控制类
      • 结束线类
      • 中心类
    • 配置工程
      • 配置“水果”
      • 配置脚本的节点
  • 工程源码
  • 结语

用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码)

前言

前几天这个大西瓜游戏特别火,同时微信小游戏也迅速冒出各种同类产品,玩了几局感觉是不错的,觉得这个玩意肯定没那么难,昨晚就想着使用Unity3d实现一下试试。整个编写过程花了将近4个小时。
没有制作任何的特效、UI和动画等,基本都是系统默认组件实现。
但是功能基本完善,大厅、计分、结束检测等都实现了。
代码量将近150行,编写起来较快,就是制作场景和测试花些时间。

运行效果

先看看效果吧:
在这里插入图片描述

实现构思

定义水果类型,主要便于同类碰撞合并判断,以及合成的下一级生成使用。
使用2d实现,即UGUI,同时通过2d圆形碰撞体和 2d钢体作为碰撞检测,同类的就要发生合成。

通过鼠标左键进行扔下水果的操作,按下拖拽上部水果跟随左右移动,释放左键放下水果。

基本思路就是上面这些!

实现过程

## 搭场景
左右下方分别用一根带碰撞的image线围起来,这样水果不会往下掉了。
上部用根红色的image线,带碰撞使用触发器,主要判断结束。
制作水果,用一个圆形图,2d圆形碰撞体和 2d钢体。
其他UI无非按钮和文字,看图便知不再赘述。
大厅场景:
在这里插入图片描述

游戏场景:
在这里插入图片描述

结束场景:

在这里插入图片描述

编写脚本

水果类

定义每个“水果”的参数,等级、重量、颜色和大小等。

using UnityEngine;
[System.Serializable]
public class Item
{public int Lv;public int Mass;public Color color;public float Scale;
}

水果控制类

只有一个碰撞检测判断功能

using UnityEngine;
public class ItemCtrl : MonoBehaviour
{public int lv;public bool Coled = false; //已碰撞void OnCollisionEnter2D(Collision2D collision){ItemCtrl otherItm = collision.collider.gameObject.GetComponent<ItemCtrl>();if (otherItm == null)return;if (!Coled && otherItm != null && otherItm.lv == lv) {if (Center.instance != null && Center.instance.Items.Length > lv +1){otherItm.Coled = true;this.Coled = true;Vector3 pos = (this.transform.localPosition + collision.collider.transform.localPosition) / 2;Center.instance.GenerateItem(pos, lv + 1);Destroy(this.gameObject);Destroy(collision.collider.gameObject);}}}
}

结束线类

结束判定的触发类


using UnityEngine;public class EndLine : MonoBehaviour
{float EndTime = 0;void OnTriggerEnter2D(Collider2D collision){ItemCtrl tc = collision.GetComponent<ItemCtrl>();if (tc != null)EndTime = Time.time;}void OnTriggerStay2D(Collider2D collision){ItemCtrl tc = collision.GetComponent<ItemCtrl>();if (tc != null && Time.time - EndTime >= 3 && Center.instance != null)Center.instance.GameOver();}
}

中心类

核心逻辑,计分、UI控制,UI按钮事件等都在这里实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Center : MonoBehaviour
{public Transform ItemsParent;public Item[] Items;public Text GNum, Enum;public GameObject ItemMod,StartCanvas,GameCanvas,OverCanvas;float ItemPosY = 470;GameObject NextItem = null;bool gaming = false;public static Center instance = null;int score = 0;void Start(){GameCanvas.SetActive(false);OverCanvas.SetActive(false);instance = this;ShowNextItem();}void Update(){if (gaming && NextItem != null) {if (Input.GetMouseButtonUp(0)){NextItem.GetComponent<Rigidbody2D>().simulated = true;NextItem = null;ShowNextItem();}if (Input.GetMouseButton(0)) {float x = Input.mousePosition.x - Screen.width / 2f;NextItem.transform.localPosition = new Vector3(x, ItemPosY, 0);}}}void ShowNextItem() {int idx = Random.Range(0, 4);GameObject go = GameObject.Instantiate<GameObject>(ItemMod);go.transform.SetParent(ItemsParent);go.transform.localPosition = new Vector3(0, ItemPosY, 0);go.transform.localScale = Vector3.one * Items[idx].Scale;go.GetComponent<Rigidbody2D>().mass = Items[idx].Mass;go.GetComponent<Image>().color = Items[idx].color;ItemCtrl itmctrl = go.AddComponent<ItemCtrl>();itmctrl.lv = idx;NextItem = go;}public void GenerateItem(Vector3 pos,int lv){GameObject go = GameObject.Instantiate<GameObject>(ItemMod);go.transform.SetParent(ItemsParent);go.transform.localPosition = pos;go.transform.localScale = Vector3.one * Items[lv].Scale;go.GetComponent<Rigidbody2D>().mass = Items[lv].Mass;go.GetComponent<Rigidbody2D>().simulated = true;go.GetComponent<Image>().color = Items[lv].color;ItemCtrl itmctrl = go.AddComponent<ItemCtrl>();itmctrl.lv = lv;score += lv;GNum.text = score.ToString() ;}public void Play() {gaming = true;score = 0;GNum.text = "0";for (int i = 0; i < ItemsParent.childCount; i++)Destroy(ItemsParent.GetChild(i).gameObject);ShowNextItem();StartCanvas.SetActive(false);GameCanvas.SetActive(true);OverCanvas.SetActive(false);}public void BackHall() {StartCanvas.SetActive(true);GameCanvas.SetActive(false);OverCanvas.SetActive(false);}public void GameOver() {gaming = false;Enum.text = score.ToString();OverCanvas.SetActive(true);}
}

配置工程

将脚本挂接在节点上后,就可以进行最后一步,配置这些参数、事件等。

配置“水果”

这个容量和参数自行修改,这里配置了12个,你也可以随意配置,可以改的很变态。
在这里插入图片描述

只不过这里要注意一下顺序和lv最好别有跳跃的情况。

配置脚本的节点

公用变量节点就是拖拖拽拽的,也没啥了。

按钮事件也是拖拖拽拽,再选一下,也不说了。

工程源码

CSDN下载:https://download.csdn.net/download/qq_33789001/14999163
GitHub:https://github.com/LeeLexHong/ShuiGuoHeCheng/tree/master
方便的话留下你们的小星星!!

结语

功能较为简单,工程压缩包也仅有27KB,整个过程比较快,基本完成了核心功能。

这篇关于用Unity3d仿制前几日爆红的“合成大西瓜”小游戏源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/284207

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。