文章目录

  • 前言
  • 效果
  • 思路
  • 代码生成
  • 拓展

前言

  • 项目中需要在彩虹发生爆炸的时候,发出射线到这些和彩虹交换位置棋子相同颜色的所有物体。
  • 一开始的项目中使用的是直线。但是很单调,我改成了曲线。

效果


思路

  • 因为使用的插件LeanTween自带曲线的API,会在给予的四个点间生成移动路径。
  • 这四个点分别是startPoint,controlOne,controlTwo,endPoint
  • 所以难点在于其中两个控制点的计算上。
  • 我在通过LeanTween的TweenEditor观察几次过后发现,当两个控制点处于对称情况下的时候,刚好能够得到我想要的图形效果。
    -
  • 因为项目中开始点和结束点都是完全随机的,所以两点之间的距离完全不是固定的,所以如果想要在所有的点之间生成相同的曲线形状,需要计算出一个比例值
  • 上图就是我的数据,Control0的x值就是距离开始点的值,相比于整个开始点与结束点间距离的比例是10/3 = 3,而y值就是 2/3 =0.6
  • 因此我们在计算的时候只需要动态的调整这两个参数就可以调整曲线的弯曲程度

代码生成

 private static LTBezierPath GetCurvePath(Vector2 from, Vector2 to){float dir = -1;Vector3 fromPos = Common.getPiecePosition((int)from.x,(int)from.y);Vector3 toPos = Common.getPiecePosition((int)to.x, (int)to.y);float rateY = 0.3f;float rateX = 3;float xRadius = Vector3.Distance(fromPos, toPos) / rateX;float yRadius = xRadius * rateY;Vector3 controlPoint1 = Vector3.zero, controlPoint2 = Vector3.zero;if (from.x == to.x){if (to.y > from.y){controlPoint1 = new Vector3(fromPos.x - yRadius, fromPos.y + xRadius, 0);controlPoint2 = new Vector3(toPos.x - yRadius, toPos.y - xRadius, 0);}else if (to.y < from.y){controlPoint1 = new Vector3(fromPos.x + yRadius, fromPos.y - xRadius, 0);controlPoint2 = new Vector3(toPos.x + yRadius, toPos.y + xRadius, 0);}}else if (from.y == to.y){if (to.x > from.x){controlPoint1 = new Vector3(fromPos.x + xRadius, fromPos.y + yRadius, 0);controlPoint2 = new Vector3(toPos.x - xRadius, toPos.y + yRadius, 0);}else if (to.x < from.x){controlPoint1 = new Vector3(fromPos.x - xRadius, fromPos.y - yRadius, 0);controlPoint2 = new Vector3(toPos.x + xRadius, toPos.y - yRadius, 0);}}else{float y = (to.y - from.y);float x = (to.x - from.x);float z = Mathf.Sqrt(x * x + y * y);float xOffset = xRadius * (x / z);float yOffset = xRadius * (y / z);//按照斜率方向在直线上取距离From一定距离的点Vector3 pointOne = new Vector3(fromPos.x + xOffset, fromPos.y + yOffset, 0);//与他垂直的线//根据这个来区分方向float y2 = x;float x2 = -y;float xOffset2 = yRadius * (x2 / z);float yOffset2 = yRadius * (y2 / z);controlPoint1 = new Vector3(pointOne.x + xOffset2, pointOne.y + yOffset2, 0);Vector3 pointTwo = new Vector3(toPos.x - xOffset, toPos.y - yOffset, 0);controlPoint2 = new Vector3(pointTwo.x + xOffset2, pointTwo.y + yOffset2, 0);}return new LTBezierPath(new Vector3[] { fromPos, controlPoint2, controlPoint1, toPos });}

拓展

  • 通过更改曲线的扭曲方向,可以生成逆时针,蝴蝶的效果。你们自己拓展了。

在unity中生成螺旋线的效果相关推荐

  1. [教程] 在Unity中制作物体破碎效果

    这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...

  2. Unity 中实现子弹时间效果

    在以前,学习xna游戏框架时,由于xna封装的游戏元素很少,很多功能,只能自己去写一篇: 如:子弹时间效果: 先来介绍一个何为"子弹时间"效果: 这得始源于:著名科幻电影<黑 ...

  3. 如何在Unity中实现震动反馈效果

    一.Unity中提供了震动的接口:Handheld.Vibrate(); Unity提供的这个接口的震动时长是0.5s.不能缩短震动时长 二.在Unity中要自定义震动时长的话,那就得在android ...

  4. Unity中制作UI光晕效果(发光效果)

    Unity中,我们怎么制作UI物体发光的渐隐渐现的效果呢? 比如说我们有一张月亮光晕的精灵图片 我们可以给它添加一个CanvasGroup组件 我们可以发现,组件上的Alpha值可以控制图片的透明度, ...

  5. Unity中实现翻书效果——Book Page Curl Pro插件

    一:效果演示 二:介绍 --插件下的Scripts文件夹下有四个脚本 BookPro脚本是挂载到BookPro预制体上的,最最重要 Auto Flip脚本是实现自动翻页或者按钮翻页的扩展脚本 Page ...

  6. Unity中SpriteRender实现广告牌效果

    通过刷新修改SpriteRender组建来实现一个翻广告牌的效果,一般的资源原图最好是能两张或更多,实现起来就能类似广告牌那样展现,或者只有一张也可以单独作为一个显示图片的动画来用: 首先是游戏场景中 ...

  7. Unity中的淡入淡出效果

    一.问题 想要在场景的转换做个过渡,不想直接的跳转.最简单的就是做个淡入淡出的效果. 二.搜索 百度基本是不指望了,资料太少,所以要用google,并且英文搜索. 搜关键字"unity3d ...

  8. Unity中UI的LookAt效果实现

    代码: //参数分别为:1.UI修改目标的Transform 2.朝向向量 3.起始向量public void UILookAt(Transform transform, Vector3 dir, V ...

  9. unity中瞄准倍镜效果和源码

    以上是效果展示图. 看起来可能很粗糙,大家不要介意!哈哈哈哈.功能实现就行了.

  10. Unity中实现刮奖效果

    需要一个Shader和一个CS脚本: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*) ...

最新文章

  1. 爬虫爬取https://www.exploit-db.com/老是跳过一个
  2. C++实现冒泡排序(附完整源码)
  3. c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现
  4. 香港印象:维多利亚港湾·张学友的手印
  5. C++实现各种交换排序(冒泡,快速)
  6. 2.3线性表的链式表示和实现
  7. servlet (七)javaBean
  8. 超8千Star,火遍Github的Python反直觉案例集!
  9. 计算机搜索不到PDF,PDF能打印吗,pdf虚拟打印机找不到
  10. nebula模拟器_nebula(街机模拟器) V 2.1.5.0 官方版
  11. python哥德巴赫猜想_Python验证哥德巴赫猜想
  12. CSDN怎么自动生成目录
  13. Unity问题(1)——mesh法线反转
  14. Pygame Surface对象
  15. AIIA-2021版《电信行业人工智能应用白皮书》
  16. Python_爬虫_中文乱码
  17. 统计学之基础知识(数据分析准备)
  18. 二见钟情之UML时序图
  19. vscode 自定义代码主题颜色
  20. 【文末下载地址】Adobe Photoshop 2022原版免注册免登录来啦

热门文章

  1. spring awre的理解
  2. Django模板语言(DTL)
  3. Java面向对象之内部类(访问格式)
  4. 数据库 SQL语法二
  5. HCIE-Security Day3:防火墙特征和组网方式
  6. MySQL引擎详解(一)——引擎基本原理和操作
  7. 记一次DNS运维排错
  8. Linux之mariadb数据库
  9. 初识计算机操作系统与进程
  10. nyoj--20-吝啬的国度