UnityUI炸出金币再收集的特效

2023-11-19

完成的效果,在指定位置生成一定数量的货币ICON,然后扩散出去。等待一定时间后,汇集到指定位置。

在这里插入图片描述
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UICurrencyCollect : MonoBehaviour
{
  
  [Header("[Count Param]")]
  public int maxIcon; //最大Icon数量
  public int minIcon; //最少Icon数量
  public int maxCurrency; //到达最大Icon数量时候的数量
  [Header("[Boomb Param]")]
  public float range; //炸出范围
  public float timeToBoom;  //飞出时间
  public float timeToStop;  //飞出后停滞的时间
  public float timeToCollect; //飞去固定位置的时间
  [Header("[UnityObj]")]

  public Image prefab; //复制的预设

  //--------------- status --------------
  public bool isPlaying { get { return ani != null; } }
  public Sprite sprite
  {
    get { return prefab.sprite; }
    set { prefab.sprite = value; }
  }
  public Vector3 startPos
  {
    get { return _startPos; }
    set { this._startPos = value; }
  }
  //--------------- private -------------
  Coroutine ani;
  Transform parentOfCurrency;
  Vector3 _startPos;


  private void Start()
  {
    _startPos = this.transform.position;
    prefab.gameObject.SetActive(false);
  }
  //--------------- function ------------
  public void BoombToCollectCurrency(int count, Vector3 to)
  {
    if (isPlaying) return;
    CreateParent();
    int coinCount = count / maxCurrency * maxIcon;
    coinCount = Mathf.Clamp(coinCount, minIcon, maxIcon);
    ani = StartCoroutine(_BoombToCollectCurrency(coinCount, to));
  }

  public void StopAni()
  {
    if (!isPlaying) return;
    StopAllCoroutines();
    ani = null;
    DestroyImmediate(parentOfCurrency.gameObject);
  }

  //----------- boomb ani -----------------

  IEnumerator _BoombToCollectCurrency(int count, Vector3 to)
  {
    List<Transform> currencyObj = new List<Transform>();
    for (int i = 0; i < count; i++)
    {
      currencyObj.Add(CreateCurrencyObj());
    }
    yield return StartCoroutine(ExporeOut(currencyObj));
    yield return new WaitForSeconds(timeToStop);
    yield return StartCoroutine(FlyToPos(currencyObj, to));
    Destroy(parentOfCurrency.gameObject);
    ani = null;
  }

  IEnumerator ExporeOut(List<Transform> currencyObj)
  {
    List<Vector3> toPos = new List<Vector3>();
    List<Vector3> fromPos = new List<Vector3>();
    foreach (Transform obj in currencyObj)
    {
      Vector3 pos = Random.insideUnitCircle;
      pos = pos * range + obj.transform.position;
      toPos.Add(pos);
      fromPos.Add(obj.transform.position);
    }
    float timer = 0;
    while (timer < timeToBoom)
    {
      timer += Time.deltaTime;
      for (int i = 0; i < currencyObj.Count; i++)
      {
        Vector3 from = fromPos[i];
        Vector3 to = toPos[i];
        Transform obj = currencyObj[i];
        Vector3 pos = Vector3.Lerp(currencyObj[i].transform.position, to, timer / timeToBoom);
        obj.transform.position = pos;
      }
      yield return null;
    }
  }
  IEnumerator FlyToPos(List<Transform> currencyObj, Vector3 to)
  {
    Vector3 toPos = to;
    List<Vector3> fromPos = new List<Vector3>();
    foreach (Transform obj in currencyObj)
      fromPos.Add(obj.transform.position);
    float timer = 0;
    while (timer < timeToCollect)
    {
      timer += Time.deltaTime;
      for (int i = 0; i < currencyObj.Count; i++)
      {
        Vector3 from = fromPos[i];
        Transform obj = currencyObj[i];
        Vector3 pos = Vector3.Lerp(from, to, timer / timeToCollect);
        obj.transform.position = pos;
      }
      yield return null;
    }
  }



  Transform CreateCurrencyObj()
  {
    GameObject obj = GameObject.Instantiate(prefab.gameObject);
    obj.SetActive(true);
    obj.transform.SetParent(parentOfCurrency);
    //obj.GetComponent<Image>().sprite = sprite;
    obj.transform.position = parentOfCurrency.transform.position;
    return obj.transform;
  }

  void CreateParent()
  {
    GameObject obj = new GameObject("parentOfCurrency");
    parentOfCurrency = obj.transform;
    parentOfCurrency.SetParent(this.transform);
    parentOfCurrency.position = startPos;

  }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UnityUI炸出金币再收集的特效 的相关文章

  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • unity game界面按下play会不断闪烁,按下暂停键(pause)或者中止/下一步(step),game界面的画面会接连变化

    没找到答案 改了两个下午的程序 改完还是这样 后来发现是FixedUpdate Update与OnDrawGizmos的问题 OnDrawGizmos是每帧都会绘制 用FixedUpdate理所当然就那啥了 分析的时候 就突然想到是不是这俩
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • Python的复制,深拷贝和浅拷贝的区别

    在python中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 python并没有拷贝这个对象 而只是拷贝了这个对象的引用 一般有三种方法 alist 1 2 3 a b 1 直接赋值 传递对象的引用而已 原始列
  • 三目运算的多目运算技巧(三种及三种以上的状态怎么使用)

    1 使用场景 当有人一提到三目运算就会想着用0 1代表男女等的显示问题 只有两种状态值 但你有没有想过当状态不止两种的时候 比如三种及以上的时候 也可以使用三木运算呢 答案是可以 比如常用的vue数据渲染的时候 div class Bott
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Ctrl Shift Enter 语句完成 否定完成 输入表达式时按 键 Ctrl E 最近的文件 Ctrl Shift E 最近更改的文件 Shift Click 可以关闭文件 Ctrl OR
  • linux 内核学习3-自己编译一个ARM Linux内核

    linux 内核学习3 自己编译一个ARM Linux内核 1 目的 编译一个ARM版本的内核镜像 谁让我是做Android的呢 并且在QEMU上运行 2 准备工作 2 1 开发环境 ubuntu 18 4虚拟机 linux内核版本 4 1
  • 高清人脸数据集—FFHQ

    FFHQ全称Flickr Faces Hight Quality Flickr Faces HQ 是英伟达作为生成对抗网络 GAN 的基准创建的 也用于Style GAN的训练数据集中 于2019年开源 FFHQ是一个高质量的人脸数据集 包
  • 悟空CRM9.0(JAVA版)正式发布

    悟空CRM9 0 JAVA版 悟空软件长期为企业提供企业管理软件 CRM HRM OA ERP等 的研发 实施 营销 咨询 培训 服务于一体的信息化服务 悟空软件以高科技为起点 以技术为核心 以完善的售后服务为后盾 秉承稳固与发展 求实与创
  • 归一化

    归一化方法 线性归一化 也称min max标准化 离差标准化 是对原始数据的线性变换 使得结果值映射到 0 1 之间 转换函数如下 x x
  • Java的扩容机制

    类别 初始容量 扩容方式 最大容量 HashMap 16 达到0 75就乘2 2的30次方 HashSet 16 达到0 75就乘2 2的30次方 Hashtable 11 达到0 75就乘2 1 Integer MAX VALUE 8 A
  • react基础--组件通讯:props基础、子传父、父传子、兄弟组件通讯、context跨级组件、props进阶

    目录 一 props基础 1 1 概述 1 2 函数组件通讯 1 2 1 基本用法 1 2 1 对象数据传递 1 3 类组件通讯 1 4 props的特点 二 组件通讯三种方式 2 1 父传子 2 2 子传父 2 3 兄弟组件通讯 三 co
  • 【Easy-RL】中科院-清华-北大3位作者贡献的200页强化学习总结笔记

    深度强化学习实验室 官网 http www neurondance com 论坛 http deeprl neurondance com 编辑 DeepRL 核心贡献者 王琦 杨毅远 江季 关于本书 Easy RL 由开源组织 Datawh
  • 最大公约数 辗转相除的原理

    最大公约数 指两个或多个整数共有约数中最大的一个 Go代码如下 package main import fmt func gcd x y int int for y 0 x y y x y return x func main fmt Pr
  • HJ32 密码截取(c++/最长回文子串)

    一 暴力解 O N 3 include
  • cpu的出错概率?

    我今天想到了一个很不懂的问题 cpu执行指令会出错吗 出错的概率是多少 为什么服务器能够不间断的工作很长时间呢 难道cpu指令级的东西不会出错 操作系统怎么避免这些错误呢 2012 5 27 找到一篇文章 http wuyudong blo
  • MATLAB实现五种边缘检测

    一 原理 常用的边缘检测算法有拉普拉斯边缘检测算法 Robert边缘检测算子 Sobel边缘检测算子 Prewitt边缘检测算子 Canny边缘检测算子 二 代码 filename pathname uigetfile jpg bmp gi
  • 一些办公技巧的分享

    分享一 借助微信聊天转换图片的格式 如果你只想要将照片转换成同一种格式 我们可以借助微信的聊天界面 它可以将图片转换成JPG格式 具体操作步骤如下 打开微信的任意聊天对话框 发送图片 然后按下鼠标右键 多选照片 点击 保存 确定 即可 分享
  • git 生成补丁文件及打补丁

    一 patch 和diff 的区别 Git 提供了两种补丁方案 一是用git diff生成的UNIX标准补丁 diff文件 二是git format patch生成的Git专用 patch 文件 diff文件只是记录文件改变的内容 不带有c
  • R语言函数之——ifelse

    ifelse 向量化的函数 在向量赋值的时候 特别有用 如下面例子 gt x lt 1 10 gt y lt ifelse x gt 5 0 10 gt y 1 10 10 10 10 10 0 0 0 0 0 把向量中的NA换为0 gt
  • Spring 新版本修复远程命令执行漏洞(CVE-2022-22965),墨菲安全开源工具可应急排查

    漏洞简述 3月31日 spring 官方通报了 Spring 相关框架存在远程代码执行漏洞 并在 5 3 18 和 5 2 20 RELEASE 中修复了该漏洞 漏洞评级 严重 影响组件 org springframework spring
  • 测试IP和端口是否被封锁

    操作 将自己IP和端口分别输入以下两个网站的测试栏中 国内测试 http tool chinaz com port 国外测试 https www yougetsignal com tools open ports 判断 如果国内的显示关闭
  • UnityUI炸出金币再收集的特效

    完成的效果 在指定位置生成一定数量的货币ICON 然后扩散出去 等待一定时间后 汇集到指定位置 代码 using System Collections using System Collections Generic using Unity