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

Unity贝塞尔曲线的落地应用-驱动飞行特效

前言

本文教你怎么用贝塞尔曲线驱动一个飞行特效

中间点的准备

开放一些可以给策划配置的变量

startPos = flyEffect.transform.position;
var right = (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1;  
midPos = startPos + new Vector3(right*Mathf.Tan((angle*Mathf.PI)/180)*height,height,0);
public int angle = 45;//向上角度
public int height = 2;//飞行上浮高度

三次贝塞尔曲线是一种数学工具,可以用来描述一条平滑的曲线,它由四个控制点决定:起始点、终止点和两个中间点。起始点和终止点是曲线的端点,而中间点是用来调整曲线的形状和方向的。中间点越靠近起始点或终止点,曲线就越接近直线;中间点越远离起始点或终止点,曲线就越弯曲。

在这段代码中,midPos是一个中间点,它用来控制飞行效果的物体的移动轨迹。为了让物体沿着一条抛物线飞行,midPos需要满足以下条件:
• midPos的x坐标要和startPos的x坐标相差一个固定的值,这个值由right、angle和height决定。right是一个整数,表示物体飞行的方向,如果是正数,表示向右飞行;如果是负数,表示向左飞行。angle是一个角度,表示物体飞行的初始角度。height是一个高度,表示物体飞行的最高点。这三个变量可以在编辑器中调整,以改变物体飞行的效果。

• midPos的y坐标要等于startPos的y坐标加上height,这样就可以让物体飞到最高点。

• midPos的z坐标要等于startPos的z坐标,这样就可以让物体在同一个平面上飞行。

具体计算公式

开飞

if (triggered && !!flyEffect)  
{  removeEffect(_action);  return;  
}  float t = _localTime / costTime;  
t = Mathf.Clamp(t, 0, 1);  
if(t >= 1)  triggered = true;  var targetPos = GetAimPoistion(targetActor);  
flyEffect.transform.position = (1 - t) * (1 - t) * startPos + 2 *t* (1 - t) * midPos + t * t * targetPos;

• 首先,它检查了一个布尔变量triggered和一个对象变量flyEffect的值,如果triggered为真且flyEffect不为空,那么它就调用了一个函数removeEffect,用于移除飞行效果,并结束了这段代码的执行。

• 然后,它计算了一个浮点变量t,表示飞行效果的物体移动的进度,它的值是当前时间_localTime除以总时间costTime,然后用Mathf.Clamp函数将其限制在0到1之间。

• 接着,它判断了t是否大于等于1,如果是,就将triggered设为真,表示飞行效果已经完成。

• 最后,它调用了一个函数GetAimPosition,用于获取目标物体targetActor的位置,并将其赋值给一个向量变量targetPos。然后,它用一个三次贝塞尔曲线公式计算了飞行效果的物体的当前位置,并将其赋值给flyEffect.transform.position。这个公式使用了起始位置startPos、中间位置midPos和目标位置targetPos作为控制点,用t作为参数

什么是ObjectTemplate?

ObjectTemplate是一个用于在运行时创建对象的模板。它可以定义对象的属性和方法,以及对象与其他对象的关系。其实就是用来存特效的句柄,然后把特效存为GO飞出去。

相关文章:

Unity贝塞尔曲线的落地应用-驱动飞行特效

前言 本文教你怎么用贝塞尔曲线驱动一个飞行特效 中间点的准备 开放一些可以给策划配置的变量 startPos flyEffect.transform.position; var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1; midPos startPos new Vector3(righ…...

VTK——设置交互样式上的鼠标回调函数

函数介绍 VTKPointPickerInteractorStyle是一个自定义的交互样式类,它是VTK库中vtkInteractorStyleTrackballCamera类的子类。VTK(Visualization Toolkit)是一个开源的,跨平台的库,用于处理、渲染和视觉化科学数据。它…...

Flutter实现动画列表AnimateListView

由于业务需要,在打开列表时,列表项需要一个从右边飞入的动画效果,故封装一个专门可以执行动画的列表组件,可以自定义自己的动画,内置有水平滑动,缩放等简单动画。花里胡哨的动画效果由你自己来定制吧。 功…...

【LeetCode-中等题】236. 二叉树的最近公共祖先

文章目录 题目方法一:后序遍历 回溯 题目 方法一:后序遍历 回溯 解题的核心就是:采用后序遍历 讨论p,q是否在当前的root的两边,如在两边则返回当前节点root 如何不在两边,只要出现一个节点等于p或者q就…...

如何拼接两个视频在一起?

如何拼接两个视频在一起?在度过一个美好周末的时候,我和朋友一起拍摄了两组视频,准备将两个视频合并成一个并发布到朋友圈。这个想法非常棒,但是我在第一步就遇到了麻烦:如何将这两个视频拼接在一起?这听起…...

Programming abstractions in C阅读笔记:p130-p131

《Programming Abstractions In C》学习第52天,p130-p131,总结如下: 一、技术总结 1. pig latin game 通过pig latin game掌握字符复制,指针遍历等操作。 /** 输入:字符串,这里采用书中坐着自定义的get…...

如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…...

C#---第二十:不同类型方法的执行顺序(new / virtual / common / override)

本文介绍不同类型的方法,在代码中的执行顺序问题: 构造方法普通方法(暂用common代替)、虚方法(Virtual修饰)、New方法(new修饰)三个优先级相同overide方法(会替换virtual…...

lnmp架构-PHP

08 PHP源码编译 09 php初始化配置 nginx 的并发能力强 phpinfo函数 就是 显示php信息 10 php的功能模块 编译memcache模块 php的动态模块方式 mamcache 就是内存 直接从内存中命中 所以性能非常好 但是 这还不是最好的方式 工作流程 关键看后端的 php 什么时候处理完 mamcac…...

【javascript实操记录】

功能描述: 1. 利用split()方法对测试数据进行解析:学科,日期 2. 将测试数据封装成对象数组的格式 3. 使用数组的sort()方法和Date对象,将测试数据按照日期从早到晚进行排序 4. 表格数据的静态填充 5. 距离最近考试的倒计时天…...

Mysql--技术文档--悲观锁、乐观锁-《控制并发机制简单认知、深度理解》

阿丹: 首先在谈到并发控制机制的时候,我们通常会提及两种重要的锁策略。悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)。这两个是在处理并发的时候采取的不同思路。 悲观锁: 悲观锁…...

【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性,就顺便整理一下文档。 Tempo 会分为 4 篇文章: Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 根据官方文档实操跑起来 tempo,中间根…...

git 口令

把当前目录变成 Git 可以管理的仓库: git init 下载一个项目和它的整个代码历史 git clone [url] 切换到 develop 分支: git checkout develop 建立并切换到 new 分支 git checkout -b new 查看所有分支: git branch -a 删除 tese …...

【回眸】剑指offer(二)解题思路

题解 | #数字在升序数组中出现的次数# JZ3数字在升序数组中出现的次数 描述 给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数 数据范围:0≤n≤1000,0≤k≤100,数组中每个元素的值满足 0≤val≤100 要求…...

Python 基本文件操作及os库

内置函数文件操作 python内置函数提供了简单的文件操作支持。 open() open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。 语法为: open(file,moder,buffering-1,encodingNone,errorsNone,newlineNone,closefdT…...

YOLOv5算法改进(9)— 替换主干网络之ShuffleNetV2

前言:Hello大家好,我是小哥谈。ShuffleNetV2 是一种轻量级的神经网络架构,适用于移动设备和嵌入式设备等资源受限的场景,旨在在计算资源有限的设备上提供高效的计算和推理能力,它通过引入通道重排操作和逐点组卷积来减…...

三、mycat分库分表

第五章 分库分表 一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业 务将表进行分类,分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同 的库上面,如下图: 系统被切分成了&…...

gitlab提交项目Log in with Access Token错误

目录 报错信息 问题描述 解决方案 报错信息 问题描述 在提交项目到gitlab时,需要添加账户信息 ,但是报了这样一个错,原因应该就是路径问题,我在填写server地址的时候,就出现了路径问题,我把多余的几个/…...

openGauss学习笔记-56 openGauss 高级特性-DCF

文章目录 openGauss学习笔记-56 openGauss 高级特性-DCF56.1 架构介绍56.2 功能介绍56.3 使用示例 openGauss学习笔记-56 openGauss 高级特性-DCF DCF全称是Distributed Consensus Framework,即分布式一致性共识框架。DCF实现了Paxos、Raft等解决分布式一致性问题典…...

Xcode 14 pod init报错

文章目录 1.报错2.解决方法(本人亲测有效) 1.报错 [!] Oh no, an error occurred. Search for existing GitHub issues similar to yours: https://github.com/CocoaPods/CocoaPods/search?q%5BXcodeproj%5DUnknownobjectversion%2856%29.&typeIs…...

ShizuTools LookBack功能剖析:无需卸载即可降级应用的原理与实现

ShizuTools LookBack功能剖析:无需卸载即可降级应用的原理与实现 【免费下载链接】ShizuTools Contains many tools to control android system via shizuku. 项目地址: https://gitcode.com/gh_mirrors/sh/ShizuTools ShizuTools LookBack功能是一款创新的A…...

工程技巧 用缓存把 Agent 延迟打下来 结果缓存 语义缓存 计划缓存

从3s到300ms:用三级缓存体系把LLM Agent响应延迟打下来|结果缓存+语义缓存+计划缓存全落地指南 副标题:面向LangChain/Agent开发人员的生产级优化方案,附可直接复用的完整代码 摘要/引言 你是不是也遇到过这样的痛点:辛辛苦苦搭好的LLM Agent,功能都跑通了,但是用户问…...

Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图

Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图 在ROS开发中,地图可视化工具Mapviz因其强大的插件系统和高度可定制性备受青睐。然而,Ubuntu20.04环境下安装Mapviz时,Qt版本冲突和OpenCV链接错误…...

用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析

用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析 当硬件电路搭建完成,代码烧录进单片机后,真正的挑战才刚刚开始——如何验证那些看不见的电信号是否按预期工作?本文将以STC15W408AS驱动无感BLDC电机为例&#…...

nuScenes数据集“平替”指南:Mini版够用吗?完整版、Test版到底怎么选?

nuScenes数据集选型实战指南:从Mini版到完整版的决策逻辑 第一次接触nuScenes数据集时,面对动辄几百GB的庞然大物和仅有3.9GB的mini版本,相信不少研究者都会陷入选择困难。这就像站在自助餐厅里,既想品尝所有美味,又担…...

从DICOM到3D打印:手把手教你用3D Slicer处理医学影像全流程(含STL导出)

从DICOM到3D打印:医学影像处理全流程实战指南 在数字化医疗时代,将CT、MRI等医学影像转化为可触摸的3D打印模型,正在成为临床教学、手术规划和医患沟通的革命性工具。这套技术链条中最关键的桥梁,正是开源的3D Slicer平台——它能…...

多功能手持仪设计:从传感器融合到低功耗架构的工程实践

1. 项目概述与核心价值最近几年,我身边不少从事设备维护、户外作业和现场检测的朋友,都在抱怨一个事儿:工具包越来越沉,功能却越来越单一。巡检要带测温枪,查线路要带万用表,记录数据还得掏出手机或平板&am…...

革命性AI emojis:一键生成个性化Slack表情的完整指南

革命性AI emojis:一键生成个性化Slack表情的完整指南 【免费下载链接】emojis Turn your ideas into emojis in seconds. Generate your favorite Slack emojis with just one click. 项目地址: https://gitcode.com/gh_mirrors/em/emojis GitHub加速计划的e…...

RT-Thread下lwIP协议栈内存优化实战:从300KB降至120KB

1. 项目概述与核心价值最近在做一个基于RT-Thread的物联网网关项目,硬件资源是STM32F407,带1MB的RAM。项目需要同时处理4路TCP长连接和若干UDP广播包,原本以为内存绰绰有余,结果一上电跑起来,系统内存占用直接飙到了90…...

Perplexity文化新闻搜索效率翻倍:从冷启动到高信噪比输出的7个被低估的底层参数配置

更多请点击: https://codechina.net 第一章:Perplexity文化新闻搜索效率翻倍:从冷启动到高信噪比输出的7个被低估的底层参数配置 Perplexity 的文化新闻检索能力并非仅由模型规模或训练数据量决定,其真实效能高度依赖于七个常被忽…...