1. 计算运动参数

运动特征: 竖直方向受到重力作用,水平方向有空气阻力作用

第一种情况: 起抛点位置和掉落点位置处于同一水平面中。已知开始抛起的点位置和掉落目标位置,由此可以求出两点之间的距离 distance;

运动轨迹如下所示:

①根据rand 函数产生出[0,1]之间的数值,作为运动总的时间。并且heigt 也可以根据则会个随机值扩大些,作为运动的高度

t = seed()

height = 16 * seed() * seed();

②根据 sV/2 * t/2 = heght, 可以求出 sV

sV = 4*height / 4

③ 根据 sV = g * (t/2)  . 求出

g= 2*sV /t;

④ 假设,水平方向,受到空气阻力的作用,速度会减少,减少到 0.75 sH, 则根据水平方向速度距离关系,可以推导

(sH + 0.75 sH)/2 * t = distance       =>     sH = (8/7) * distance /  t

进一步,可以知道水平方向的减速度

hg = 0.25* sH / t

这样,就可以实时计算出运动的位置了

Vector3 tDist = dirDistance * (initSpeedH * t - 0.5f * hVelocity * t * t);
tDist.y += initSpeedV * t- gVelocity * t * t * 0.5f;

第二种情况:起跑点和掉落点不是处于同一水平面中

这个时候,需要把红色部分给加上来,才是完整的运动轨迹。即确定红色那部分运动时间,以及水平方向运动距离

① 第一种情况中的①②③ ,因为计算都是用的运动的前半部分,都是一样的。根据y 的差值结合计算出来变量,可以知道花费的时间

tAdd= Math::pow(2 * △y / g,  0.5f);

② 整个运动时间,也要加上刚才计算出来的时间

t = t + tAdd;

③ 同样假设,水平方向,受到空气阻力的作用,速度会减少,减少到 0.75 sH, 则根据水平方向速度距离关系,可以推导

(sH + 0.75 sH)/2 * (t+tAdd) = distance       =>     sH = (8/7) * distance /  (t+tAdd)

进一步,可以知道水平方向的减速度

hg = 0.25* sH /(t+tAdd)

这样,就可以实时计算出运动的位置了

Vector3 tDist = dirDistance * (initSpeedH * t - 0.5f * hVelocity * t * t);
tDist.y += initSpeedV * t- gVelocity * t * t * 0.5f;

第三种情况 如下所示,掉落到坑里去了;此时,同样需要计算出那部分运动的时间,tMus, 并减去这部分时间,来计算水平方向的减速度

源码如下:

bool GoodsFallEffect::calcData(Vector3 & startPos,Vector3 & endPos)
{if (!mRecord){return false;}mContext.dirDistance = endPos - startPos;float length = mContext.dirDistance.length();mContext.dirDistance.normalize();float cx = length;float cy = 0;float seed = rnd();float height =10*seed *seed;//*Math::Pow(seed,0.5f);;float t= seed;    // second unitsfloat n = 2 * height;   //得到解if (cx > 0){if(endPos.y - startPos.y <3.0f){mContext.initSpeedH = 1.3f * length / t;mContext.initSpeedV = 4*height /t;mContext.gVelocity = 2* mContext.initSpeedV / t;mContext.angle = atanf(mContext.initSpeedV / mContext.initSpeedH);mContext.initSpeed = Math::Pow(mContext.initSpeedH * mContext.initSpeedH + mContext.initSpeedV * mContext.initSpeedV, 0.5f);mContext.hVelocity = 0.5f *mContext.initSpeedH / t;mContext.maxHightTime = t*500.0f;mContext.sumTime = t*1000.0f;}else{mContext.initSpeedV = 4*height /t;mContext.gVelocity = 2*mContext.initSpeedV / t;float devia = Math::Abs(endPos.y - startPos.y);float tAdd = Math::Pow(2*devia / mContext.gVelocity, 0.5f);// 此处有个近视,lengthif(endPos.y > startPos.y){mContext.initSpeedH = 1.3f * length / (t+tAdd);mContext.maxHightTime = (t+tAdd)*500.0f;mContext.sumTime = (t+tAdd)*1000.0f;}else{mContext.initSpeedH = 1.3f * length / (t-tAdd);mContext.maxHightTime = (t-tAdd)*500.0f;mContext.sumTime = (t-tAdd)*1000.0f;}}}else{mContext.initSpeedH = 0;mContext.angle = PI/2.0f;mContext.initSpeed = 20/seed;}Vector3 tDist = mContext.dirDistance *(mContext.initSpeedH * t *0.5f - 0.5f * mContext.hVelocity * 0.5f * t * 0.5f * t);mContext.rotateAxis= Vector3(height * mContext.dirDistance.z - tDist.z * mContext.dirDistance.y, tDist.z * mContext.dirDistance.x - tDist.x * mContext.dirDistance. z, tDist.x * mContext.dirDistance.y - height *mContext.dirDistance. x);return true;
}

2. 旋转

运动参数计算好了,需要控制物品的的旋转,模拟自然物品抛起来的自转。此时采用四元数的旋转,关键在于旋转轴的选择。

这里我们选择抛物线所在平面的法向量作为旋转轴。 取抛物线上两个点向量做叉乘,此处选择最高点和水平点;

    Vector3 tDist = dirDistance *(initSpeedH * t *0.5f - 0.5f * hVelocity * 0.5f * t * 0.5f * t);rotateAxis= Vector3(height * dirDistance.z - tDist.z * dirDistance.y, tDist.z * dirDistance.x - tDist.x * dirDistance. z, tDist.x * dirDistance.y - height *dirDistance. x);...node->rotate(mContext.rotateAxis,mAngle);

3. 大小变化

控制抛起过程中物品的逐渐变大,下降过程中的逐渐减小

配置文件中配置物品抛起来刚开始的minSize,最高点的maxSize, 如果上升中,即运动时间runTime < t/2   ; 既可以

    if(mRunTime < maxHightTime){f = (float)mRunTime/(float)mContext.maxHightTime;scale = mContext.startScale + f*(mContext.maxHightScale - mContext.startScale);scale = Clamp(scale,0.0f,mContext.maxHightScale);}

同样的下降过程中也是可以类似的处理。

最后贴几张图。。

游戏中掉落效果的实现相关推荐

  1. 游戏中掉落系统的设计

    我们在游戏中会采用不同的随机方式.而玩家感觉起来像随机的事件其实也不完全是按随机事件来设计的.下面我们来谈谈这些做法. 1.计数随机 在早期游戏中,有些道具的掉落是和怪物被击杀的次数相关的,通常在成千 ...

  2. 【游戏算法】2D游戏中聚光灯效果

    前言 前几日在游戏技术群里吹水时,有个人问了下面图片中的效果怎么做 当时我就觉得这个效果应该不难,研究了一段时间后,便在Unity里完成了2D聚光灯的效果,闲言少叙,先上图! 思路 首先可以确定的是, ...

  3. 我的世界会员特效在服务器显示,腐竹教你在游戏中制作登录提示效果

    来源:游戏园日期:2019-02-03 04:01:08 今天小编为大家带来我的世界登入提示教程,让大家知道登入提示怎么才能在游戏中显示出来,让你的服务器高大上! 这个东西做完以后成品是这样的: 1. ...

  4. 游戏中实现鼠标拖尾效果

    游戏中使用Trail Renderer这个通过设置参数来实现拖尾效果,通过在update中吧鼠标的点击的路径给怪哉这个得物体. 转载于:https://www.cnblogs.com/qinshuai ...

  5. 游戏开发小结——在unity3d中开发类塞尔达游戏的反冲效果

    游戏开发小结--在unity3d中开发类塞尔达游戏的反冲效果 在 2D ARPG 中为角色创建反冲效果 我们将在Unity中实现这个效果.首先,我们将进行演示场景的设置.我们将创建一个控制器(cont ...

  6. 归纳贴:武侠小说和游戏中的武功效果(转)

    归纳贴:武侠小说和游戏中的武功效果(转)[@more@] 最近归纳了下武侠小说和游戏中的武功效果,做了个总结如下.希望能对大家有所帮助,另外有不全之处还请大家补充.谢谢!~ 一般武功绝招都是有一种或多 ...

  7. 游戏中制作酷炫拖尾残影效果实战

    发现好多人都想要这个拖尾残影的效果,今天贴出来. 今天制作拖尾残影效果,效果如图:两个视角 我的游戏中角色有冲刺技能,冲刺中身后要有一个残影效果,这种效果就满足了,现在分享给大家如何制作. 1.观察需 ...

  8. Unity 实现游戏中多相机屏幕CutIn效果

    效果展示 下图是Game窗口里面显示的两个不同物体的cutin拼接起来的效果,当然可以自由调整斜切的角度,以及拍摄的内容 原理说明 基本原理还是使用的RenderTexture,将相机照射的内容都拼接 ...

  9. java游戏最终boss烛龙_游戏中劝退玩家的变态小怪!神装扛不住它一击,难度秒杀最终BOSS?...

    原标题:游戏中劝退玩家的变态小怪!神装扛不住它一击,难度秒杀最终BOSS? 各大游戏中,许多变态BOSS经常让我们头痛不已. FF15中的精金龟就是其中的一位,562万点的超高血量和防御一度成为了不少 ...

最新文章

  1. JBDC更新计数行以及调用存储过程返回多个结果集
  2. 比特币的锁定脚本与解锁脚本
  3. JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用
  4. mysql+多列外键_MySQL中的多列外键?
  5. 个人或结对项目 - 动态显示程序运算的过程
  6. 计算机网络中使用最广泛的交换技术是什么,04741计算机网络原理试题及答案201604...
  7. .Net QQ互联教程 1
  8. 【Landsat 8】遥感影像文件内容及命名规则
  9. 日志分析工具 GoAccess v1.3 发布,支持简体中文和安装使用
  10. 【自动化测试工具】QTP/UFT入门
  11. Git Commit failed with error The Git process exited with the code -1,073,741,819
  12. 帆软报表更新到服务器控件展示不出来_报表工具软件FineReport常见问题与解答总结...
  13. Python 画星星图案
  14. 致那些喜欢站在上帝视角的人
  15. 人大金仓命令行客户端工具KSQL系列1
  16. 记一次windows 10 无法升级问题的处理(系统盘MBR转GPT)
  17. 紫外线检测仪,WKM-UV1,紫外线检测仪UV汞灯LEDUV通用
  18. (灵感)集设网关于设计灵感的网站
  19. python用三重引号_python三引号
  20. 3D可视化智慧档案馆一体建设平台设计的主要依据

热门文章

  1. Android开发笔记(一百四十八)自定义输入法软键盘
  2. 无盘系统服务器虚拟内存,Windows7无盘虚拟内存如何设置
  3. JS HTML5仿微信朋友圈特效
  4. MATLAB读取excel表格中指定位置的数据
  5. android蓝牙键盘光标,如何将Android手机连接到无线蓝牙鼠标?
  6. 办公软件测试题目,Office高级办公软件测试(附答案)
  7. OSG OIT 顺序无关透明绘制(PPLL_OIT, WB_OIT) 实现及注意事项
  8. 网站使用手机相机_孩子拿手机是在上课,还是玩游戏、看不良网站?4招查看使用记录...
  9. 如何使用OBS Virtualcam 和 Live2DViewEX 在视频会议中成为最靓的仔
  10. Html漂亮的table样式模板