异步编程小案例-FlayCoins

2024-09-06 12:52
文章标签 编程 异步 案例 flaycoins

本文主要是介绍异步编程小案例-FlayCoins,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

使用Dotween和UniTask 结合的方式实现金币飞入指定位置,这中间会用到UniTask和Dotween相关的知识点。

准备工作
  1. 最需要准备的无非就是导入 UniTask 我在上一篇已经说过了,这里还需要导入 Dotween,直接使用免费版本的即可。免费版本的Dotween可以直接在Unity Asset Store 里面下载导入。
  2. 场景的搭建也很简单结构如下图
  3. 制作一个简单的预制体金币的
    在这里插入图片描述
脚本编写

这里有有一个脚本啊直接挂载在CoinCollection 上面去。

using Cysharp.Threading.Tasks;
using DG.Tweening;
using System;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
// 注意如果没有添加好 宏 这里是无法在Dotween上使用UniTask的public class UniTaskTargetMove : MonoBehaviour
{public GameObject coin;public Transform coinParent;[SerializeField,Tooltip("金币生成的位置")] private Transform _locationPosition;[SerializeField,Tooltip("金币最终要飞到的位置")] private Transform _endPosition;[SerializeField] private Text _coinText;[Header("金币随机生成的范围")][SerializeField] private int _minX;[SerializeField] private int _maxX;[SerializeField] private int _minY;[SerializeField] private int _maxY;[SerializeField,Tooltip("金币生成的数量")] private int _coinAmount;[SerializeField,Tooltip("金币移动的时间")] private float _duration;private List<GameObject> coins = new List<GameObject>();private Tween tweenCoins;private int coinCount;CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();private void Start(){// CollectCoins();}[Button("cioinCollections")]private async void CollectCoins() {cancellationTokenSource.Cancel();SetCoins(0);for (int i = coins.Count-1; i >= 0; i--) {Destroy(coins[i]);}coins.Clear();List<UniTask> uniTasks = new List<UniTask>();for (int i = 0; i < _coinAmount; i++){var tempCoinPos = Instantiate(coin, coinParent);var xPosition = _locationPosition.position.x + UnityEngine.Random.Range(_minX, _maxX);var yPosition = _locationPosition.position.y + UnityEngine.Random.Range(_minY, _maxY);tempCoinPos.transform.position = new Vector3(xPosition, yPosition);uniTasks.Add (tempCoinPos.transform.DOPunchPosition(new Vector3(0,30,0),UnityEngine.Random.Range(0,1f)).SetEase(Ease.InOutElastic).ToUniTask());coins.Add(tempCoinPos);await UniTask.Delay(TimeSpan.FromSeconds(0.01f));}//await UniTask.Delay(TimeSpan.FromSeconds(1f));await UniTask.WhenAll(uniTasks);await moveCoinsTask();}private async UniTask moveCoinsTask() {List<UniTask> movecoinTaskList = new List<UniTask>();for (int i = coins.Count-1; i >= 0; i--){movecoinTaskList.Add(MoveCoinTask(coins[i]));await UniTask.Delay(TimeSpan.FromSeconds(0.05f)); // 等待0.05f}}/// <summary>/// 更新金币的数量/// </summary>/// <param name="value"></param>private void SetCoins(int value) {coinCount = value;_coinText.text = coinCount.ToString();}/// <summary>/// 移动金币/// </summary>/// <param name="coinInstance"></param>/// <returns></returns>private async UniTask MoveCoinTask(GameObject coinInstance) {await coinInstance.transform.DOMove(_endPosition.position, _duration).SetEase(Ease.InBack).ToUniTask();var temp = coinInstance;coins.Remove(coinInstance);Destroy(temp);await ReactToCollectionCoin();SetCoins(coinCount + 1);}/// <summary>/// 当金币到达endPosition后面的时候会 变大变小/// </summary>/// <returns></returns>private async UniTask ReactToCollectionCoin() {if (tweenCoins == null) {tweenCoins = _endPosition.DOPunchScale(new Vector3(1.5f, 1.5f, 1.5f), 0.1f).SetEase(Ease.InOutElastic);await tweenCoins.ToUniTask();tweenCoins = null;}}
}

这个效果用到了很多UniTask和DoTween相关的知识,这个也主要是为了更好的学习如何使用UniTask。

这篇关于异步编程小案例-FlayCoins的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow