unity 收货币动画
来源:互联网 发布:8寸windows平板 编辑:程序博客网 时间:2024/04/30 14:16
小小小---最近项目需求做了一个小功能
using UnityEngine;using System.Collections;using UnityEngine.UI;public class CoinAnimation : MonoBehaviour{ //货币预制体 public GameObject[] mCoinPrefab; public float mRate = 0.03f; //移动速度 public float mMoveSpeed = 10; public AnimationCurve mMoveSpeedCurve; public float mRotateSpeed = 3; //随机位置 public float startRangeOffect = 1f; //点击播放动画 public Button btnClick; private static CoinAnimation Instance; //货币属性 private class Coin { //移动时间 public float mMoveProgress; //货币对象 public Transform mTransform; public Vector3 mRotateSpeed; //起始位置 public Vector3 startIn; //目标 public Vector3 targetIn; } private void Start() { btnClick.onClick.AddListener(BtnPlay); Instance = this; } private void OnDestroy() { Instance = null; } public void BtnPlay() { Play(0, btnClick.transform.position, new Vector3(4, 4), 10); } private IEnumerator OnAnimation(float flyTime, int type, Vector3 startIn, Vector3 targetIn, int count) { Camera sceneCamera = Camera.main; Camera uiCamera = null; Vector3 start, target; if (null != uiCamera) { start = startIn; target = targetIn; // 将UI起点坐标转换为场景起点坐标并保存 startIn = sceneCamera.ViewportToWorldPoint(uiCamera.WorldToViewportPoint(startIn)); } else { start = startIn; target = targetIn; } System.Collections.Generic.List<Coin> coins = new System.Collections.Generic.List<Coin>(); float generateTime = 0; float generateCount = 0; float moveSpeed = flyTime; while (true) { if (generateCount < count && generateTime <= 0) { //计算实例化数量(创建数量依次增多 count / 2 时依次减少) int instantiateCount = (int)(generateCount >= count / 2 ? count / 2 - (generateCount - count / 2) : generateCount); //实例化对象 for (int i = 0; i <= instantiateCount; ++i) { Coin coin = new Coin(); coin.mRotateSpeed = new Vector3( Mathf.Lerp(0, 360, Random.Range(0, 1f)), Mathf.Lerp(0, 360, Random.Range(0, 1f)), Mathf.Lerp(0, 360, Random.Range(0, 1f))) * mRotateSpeed; //实例化的对象可从列表中根据自己需求来 GameObject go = Instantiate(mCoinPrefab[type], start, Random.rotationUniform) as GameObject; go.SetActive(true); go.transform.SetParent(transform); go.transform.localScale = Vector3.one; //将实例化的货币初始化 coin.mTransform = go.transform; coin.startIn = new Vector3(Random.Range(startIn.x - startRangeOffect, startIn.x + startRangeOffect), Random.Range(startIn.y - startRangeOffect, startIn.y + startRangeOffect), Random.Range(startIn.z - startRangeOffect, startIn.z + startRangeOffect)); coin.targetIn = targetIn; coins.Add(coin); } generateTime = mRate; //创建次数 generateCount++; } else {//实例化间隔时间 generateTime -= Time.deltaTime; } if (null != uiCamera) { // 将场景起点坐标转换为UI起点坐标,因为场景可以拖动,不然会造成效果分离的问题,所以必须转换一次 start = uiCamera.ViewportToWorldPoint(sceneCamera.WorldToViewportPoint(startIn)); } for (int i = coins.Count - 1; i >= 0; --i) { Coin coin = coins[i]; coin.mTransform.position = Vector3.Lerp(coin.startIn, coin.targetIn, coins[i].mMoveProgress); coin.mTransform.Rotate(coin.mRotateSpeed.x * Time.deltaTime, coin.mRotateSpeed.y * Time.deltaTime, coin.mRotateSpeed.z * Time.deltaTime); //现在的移动进度 coin.mMoveProgress = coin.mMoveProgress + Mathf.Max(mMoveSpeedCurve.Evaluate(coin.mMoveProgress), 0.1f) * moveSpeed * Time.deltaTime; if (coin.mMoveProgress >= 1) {//移动结束之后删除预制体 coins.RemoveAt(i); Destroy(coin.mTransform.gameObject); } } //播放结束退出 if (generateCount >= count && coins.Count == 0) break; yield return null; } } public float BeginAnimation(int type, Vector3 source, Vector3 target, int count) { // 飞行时长 float flyTime = (target - source).magnitude / mMoveSpeed; StartCoroutine(OnAnimation(flyTime, type, source, target, Mathf.Clamp(count, 1, 20))); return flyTime; } /// <summary> /// 播放特效 /// </summary> /// <param name="type">类型</param> /// <param name="source">UI相机中的起点坐标</param> /// <param name="target">UI相机中的终点坐标</param> /// <param name="count">粒子数量</param> /// <returns>播放时长</returns> public static float Play(int type, Vector3 source, Vector3 target, int count) { if (null != Instance) { return Instance.BeginAnimation(type, source, target, count); } return 0; }}
阅读全文
0 0
- unity 收货币动画
- Unity-动画
- unity动画
- Unity动画事件
- Unity动画系统
- Unity动画事件
- Unity 动画帧
- unity动画编辑
- unity动画无法运行
- Unity动画事件
- Unity Avatar动画系统
- Unity添加GIF动画
- Unity 动画初探
- Unity MegaFiers 顶点动画
- Unity创建UV动画
- Unity的动画调用
- Unity 序列帧动画
- Unity旧版动画系统
- Manthan, Codefest 17
- flume-ng+Hadoop实现日志收集
- Ubuntu14.04 telnet 服务安装
- 冒泡排序
- opencv3.3 svm的使用
- unity 收货币动画
- git使用方式
- C-COT核心思想
- C语言 getchar(),putchar()函数的使用
- yii2 之图片上传插件fileinput使用说明
- IDEA dao层“Could not autowired”(已用使用MapperScannerConfigurer扫描)
- jstl在jsp中比较的
- 学习笔记07
- python爬虫由浅入深5--的html格式输出 prettify()