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

从0到1做一个“字母拼词”Unity小游戏(含源码/GIF)- 字母拼词正确错误判断


目录

前言

创建正确错误判断UI结构

正确错误判断逻辑实现

结果展示


前言

        从零开始,用 Unity 打造一个“字母拼词”小游戏!本系列将带你一步步完成从界面布局、逻辑实现到动画优化与发布的全过程。无需复杂算法,新手也能轻松上手,最终做出一款可玩又有趣的文字益智游戏。


创建正确错误判断UI结构

        在Canvas下面新建一个名为ResultUI的游戏物体,在其下新建一个Image名为ResultImage,新建一个按钮容器Buttons并添加Horizontal Layout Group组件,在Buttons容器下新建两个按钮,一个是ResetButton重置按钮,另一个是ConfirmButton提交按钮。

        ResultImage设置锚点为UI界面的顶部,并设置好对应的距离。

        设置Buttons容器上Horizontal Layout Group组件的参数,以UI界面的底部为锚点,设置为居中排列,间隔为100,并使用子物体的宽高。

        设置ResetButton和ConfirmButton的宽高为350*120。


正确错误判断逻辑实现

        声明正确及错误的图片资源,并声明要显示结果的Image,声明重置和提交按钮。重置按钮包含清空字母格子和字母状态的逻辑,提交按钮包含提交填满的字母格子判断正确错误的逻辑。当字母格子被填满时,提交按钮才可以点击,未填满时提交按钮不可点击。

    [Header("Result")][SerializeField] private Sprite _correctSprite;    //正确的图片资源[SerializeField] private Sprite _wrongSprite;    //错误的图片资源[SerializeField] private Image _resultImage;    //显示结果的图片[SerializeField] private Button _resetButton;    //重置按钮[SerializeField] private Button _confirmButton;    //提交按钮private readonly Random _lettersRandom = new();private readonly List<WordLetterSlot> _wordLetterSlots = new();private readonly List<WordLetter> _wordLetters = new();private void OnEnable(){_resetButton.onClick.AddListener(HandleOnResetButtonClicked);_confirmButton.onClick.AddListener(HandleOnConfirmButtonClicked);}private void OnDisable(){_resetButton.onClick.RemoveListener(HandleOnResetButtonClicked);_confirmButton.onClick.RemoveListener(HandleOnConfirmButtonClicked);}//重置按钮,清空字母和字母格子,以及结果图片,禁用提交按钮private void HandleOnResetButtonClicked(){foreach (var wordLetter in _wordLetters){wordLetter.Reset();}foreach (var wordLetterSlot in _wordLetterSlots){wordLetterSlot.Reset();}_resultImage.gameObject.SetActive(false);_confirmButton.interactable = false;}//点击提交按钮进行正确错误校验private void HandleOnConfirmButtonClicked(){var isCorrect = false;foreach (var wordLetterSlot in _wordLetterSlots){isCorrect = wordLetterSlot.CheckIsCorrect();}_resultImage.gameObject.SetActive(true);_resultImage.sprite = isCorrect ? _correctSprite : _wrongSprite;}private void Start(){//隐藏结果图片,禁用提交按钮_resultImage.gameObject.SetActive(false);_confirmButton.interactable = false;string testWord = "HELLO";var lettersArray = testWord.ToCharArray();var randomLettersArray = ShuffleLetters(lettersArray);foreach (var testLetter in testWord){var wordLetterSlot = Instantiate(_wordLetterSlotPrefab, _wordLettersSlotsSpawnPoint);wordLetterSlot.Initialize(testLetter.ToString());wordLetterSlot.OnLetterClicked += HandleOnLetterSlotClicked;_wordLetterSlots.Add(wordLetterSlot);}foreach (var randomLetter in randomLettersArray){var wordLetter = Instantiate(_wordLetterPrefab, _wordLettersSpawnPoint);wordLetter.Initialize(randomLetter.ToString());wordLetter.OnLetterClicked += HandleOnLetterClicked;_wordLetters.Add(wordLetter);}}private void HandleOnLetterSlotClicked(string letter){foreach (var wordLetter in _wordLetters){if (wordLetter.IsSelected && letter == wordLetter.CurrentLetter){wordLetter.Reset();break;}}}//当所有字母格子都填满了提交按钮可以交互private void HandleOnLetterClicked(string letter){var fillAllLetters = false;for (int i = 0; i < _wordLetterSlots.Count; i++){if (!_wordLetterSlots[i].HasLetter){_wordLetterSlots[i].SetLetter(letter);fillAllLetters = i == _wordLetterSlots.Count - 1;break;}}_confirmButton.interactable = fillAllLetters;}private char[] ShuffleLetters(char[] letters){char[] result = (char[])letters.Clone();int n = result.Length;while (n > 1){n--;int k = _lettersRandom.Next(n + 1);(result[k], result[n]) = (result[n], result[k]);}return result;}

结果展示

http://www.dtcms.com/a/581264.html

相关文章:

  • 网站建设自查情况报告做淘宝联盟网站要多少钱?
  • 重新思考 weapp-tailwindcss 的未来
  • RuoYi .net-实现商城秒杀下单(redis,rabbitmq)
  • Langchain 和LangGraph 为何是AI智能体开发的核心技术
  • C++与C#布尔类型深度解析:从语言设计到跨平台互操作
  • 贵阳 网站建设设计企业门户网站
  • Rust 练习册 :Matching Brackets与栈数据结构
  • Java基础——常用算法3
  • 【JAVA 进阶】SpringAI人工智能框架深度解析:从理论到实战的企业级AI应用开发指南
  • 对话百胜软件产品经理CC:胜券POS如何用“一个APP”,撬动智慧零售的万千场景?
  • 用ps怎么做短视频网站建立网站的步骤 实湖南岚鸿
  • wordpress使用latex乱码长沙优化网站厂家
  • 【uniapp】解决小程序分包下的json文件编译后生成到主包的问题
  • MySQL-5-触发器和储存过程
  • HTTPS是什么端口?443端口的工作原理与网络安全重要性
  • 从零搭建一个 PHP 登录注册系统(含完整源码)
  • Android 端离线语音控制设备管理系统:完整技术方案与实践
  • 网站流量一般多少合适asp网站实例
  • 想学网站建设与设计的书籍基于网站开发小程序
  • 【双指针类型】---LeetCode和牛客刷题记录
  • h5单页预览PDF文件模糊问题解决
  • LeetCode 每日一题 2025/11/3-2025/11/9
  • php网站开发干嘛的营销推广内容
  • STM32外设学习--TIM定时器--编码器接口
  • qiankun + Vue实现微前端服务
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(15):階段の訓練
  • 学习Linux——文件管理
  • C# OpenCVSharp使用yolo11n人脸关键点检测模型进行人脸检测
  • 【ATL定时器深度解析:概念、功能与项目实战指南】
  • wp_head() wordpressseo优化软件有哪些