游戏中关于跳跃的函数图像的推导以及应用

2023-11-11

跳跃应该是游戏开发中一个最常见的功能之一,实现的方法也有很多,这里我来讲一个我以前用的一个方法.


正常的跳跃,如果使用物理引擎的话,就直接给一个向上的力就可以了,但是有一些游戏,例如跑酷,角色的移动速度都是越来越快的,而如果还是只给一个向上的力的话,跳跃的距离就会相应的变远,这样肯定是不行的,所以为了让角色能够按照固定的路径来跳跃,我们就需要设计一个函数能够模拟出跳跃的效果。下面我会给出函数的推导过程。


首先从最基础的开始y=x^2,它是这样的



但这个看上去和一点也不像跳跃的路径,我们还需要把它翻转过来,翻转的话我们在前面加上一个负号就可以了,像这样:



这下比较像了,但是从0,0点出发就直接往下掉了,跳跃肯定是要先向上的,我们还需要把它往右上方平移,我们把x^2写成x*x,这样比较方便修改。我们给第一个x减去2,公式变成:y=-(x-2)*x,它长这个样子:



这下看上去就和正常的跳跃差不多了,但是实际游戏中我们还需要调节手感以及和策划同学编辑的关卡对应上,所以我们还需要调节跳跃的距离和高度,我们继续来修改我们的公式,,我们来看一下这个公式:

y=-(x-w)*x;


其中w为一个常数,代表了y>0的部分的长度,即跳跃的距离,高度为(w/2)^2,很明显现在的高度是随着距离的增加而增加的,并不能随意调节,所以我们还需要增加一个参数b,来对y轴进行缩放。像这样:

y=-(x-w)*x*b;


那现在我们应该如何确定我们公式中的b应该取多少呢?

我们假设宽度已知为w,想要的高度为h,则有(w/2)^2*b = h;

可以推导出 b =  h/(w/2)^2

所以我们把公式中的b替换一下:

y=-(x-w)*x*(h/(w/2)^2);

这就是我们的最终公式,其中w代表跳跃的宽度,h代表跳跃的高度。

让我们在项目里试一下看看效果~

创建脚本Test,内容如下:

public class Test : MonoBehaviour {
	
	const int w = 10;
	const int h = 2;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		float x = transform.position.x + Time.deltaTime;
		float y = JumpFormula(x);

		Debug.Log(x + "///" + y);
		transform.position = new Vector3(x,y,transform.position.z);
		
	}

	float JumpFormula(float x){
		return -(x-w)*x*(h/Mathf.Pow((w/2),2));
	}
}
在场景中创建一个物体,放到0,0点,并添加此脚本,我们来看看效果:

这是w=10,h=2的函数图像



可以看到,这就是我们想要的~~~

关于数学部分的内容很简单,都是初中的学习内容,重要的还是要活学活用。

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

游戏中关于跳跃的函数图像的推导以及应用 的相关文章

随机推荐

  • JAVA常用类(IO篇)-DataOutputStream详解

    文方便阅读和理解 本文翻译自源码 适合具有一定数据结构 算法基础且有志专研源码的朋友阅读 初学者请无视 错漏之处 多谢指正 package java io DataOutputStream 可以实现java对象到流的便捷写入 一个应用可以随
  • React 事件处理

    React 元素的事件处理和 DOM 元素的很相似 但是有一点语法上的不同 React 事件的命名采用小驼峰式 camelCase 而不是纯小写 使用 JSX语法时你需要传入一个函数作为事件处理函数 而不是一个字符串 例如 传统的 HTML
  • c语言游戏代码大全直接复制_无法直接复制网页文字?只需一串代码,全网内容任你免费复制!...

    在职场办公时候 经常需要在网上找素材文档 不过现在网上很多网页都有限制性 想要直接复制的话是不可能的 这时候我们该怎么办呢 是望梅止渴还是另寻他家 这里小编为大家分享几招 保准管用 想怎么复制就怎么复制 什么限制都没有 一 0 只需在网页后
  • python中scrapy框架使用flask框架编写api接口

    仅作参考 1在scrapy框架中编写api接口 在与setting py同级处新建api py 在该api py中编写一下代码 from flask import Flask import os app Flask name app rou
  • 【nvivo11plus教程】02_编码与节点

    1 对文档进行编码 1 建立节点 2 使用快速编码栏进行编码 3 将整个文件编码为一个代码 4 范围编码 5 在vivo中编码 6 使用节点昵称加快编码速度 2 取消 增加和查看编码 1 编码带 2 删除编码 3 查看编码邻近区 4 增加编
  • Pandas.read_excel详解

    文章目录 基础知识 语法 参数详解 index col 参数详解 header 参数详解 usecols 参数详解 dtype 其他参数 多表读取 顺带提一句如何用pandas写数据到excel 基础知识 pandas 可以读取多种的数据格
  • DLL load failed while importing win32gui: 找不到指定的程序

    pip install pywin32 226
  • 九、软考2014年上半年软件设计师易错题整理

    文章目录 错题1 错题2 错题3 错题4 错题5 错题6 错题7 错题8 错题9 错题10 错题11 错题12 错题13 错题14 错题15 错题16 错题17 错题18 错题19 错题20 专业英语 错题1 在CPU中 常用来为ALU执行
  • 字节跳动暑期实习生一面面经 大三

    身份 双非本科大三 大二从小程序开始学起前端 之后自学前端 自我介绍 了解box sizing吗 这里脑子没转 说了不太了解 面试官特别好 是会引导着你去回答问题的 了解盒模型吗 了解的 盒模型分为标准盒模型和IE盒模型 标准盒模型是包括m
  • reg型变量怎么赋值_FPGA的wire和reg类型变量

    1 wire型 网络类型变量表示结构实体 如门 之间的物理连接 网络类型变量不能存储值 而且它必须要受到驱动器 如门或连续赋值语句 如assign 的驱动 如果没有驱动器连接到网络类型变量上 则该变量就是高阻的 即值为Z 常用的网络类型变量
  • 完美国际服务器管理修改经验倍数,魔兽地图编辑问题--修改经验倍数

    呵呵 我来说说吧 1 选择英雄 提供了多种英雄选择方式包括技能 能量圈 双击选择英雄的方式 2 点击单位 出现文本提示 可以用在选择英雄的时候 单击想要选择的英雄 出现该英雄拥有技能的文本提示 3 同类物品不能同时携带 当单位身上已经携带该
  • git错误The TLS connection was non-properly terminated解决

    问题描述 在执行hexo d发布文章时候 出现错误 error fatal unable to access https github com huanyouchen huanyouchen github io git gnutls han
  • java OA 系统开发二:数据库设计之oa数据库设计

    一 概述 oa数据库表设计 用户信息表 机构信息表 部门信息表 员工考勤 我的便签 消息管理 邮件管理 登入日志 操作日志 考勤标准 文档类型 考勤统计 我的日程 部门日程表 用户角色中间表 角色管理 角色菜单中间表 菜单父节点 菜单子节点
  • 这篇文章完美的解释了为什么有人不喜欢Spinner,当它在某些主题下出来的非常丑

    这篇文章完美的解释了为什么有人不喜欢Spinner 当它在某些主题下出来的非常丑 http www jcodecraeer com a anzhuokaifa androidkaifa 2015 0105 2264 html
  • 华为OD机试真题 Java 实现【最远足迹】【2022Q4 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 某探险队负责对地下洞穴进行探险 探险队成员在进行探险任务时 随身携带的记录
  • Java基础小测总结

    1 非抽象实现接口后 实现接口中方法的原则 两同两小一大原则 方法名相同 参数类型相同 子类返回类型小于等于父类方法返回类型 子类抛出异常小于父类方法抛出异常 子类访问权限大于等于父类方法访问权限 2 volatile关键字 被volati
  • 踩坑 calendar.getActualMaximum(calendar.DAY_OF_MONTH)函数

    当使用calendar getActualMaximum calendar DAY OF MONTH 获取每月最后一天时或者获取当季的最后一天时 会出现在二月的时候获取的不准确的情况 问题出现原因 代码没有动过 之前一直是使用这个时间函数来
  • 如何使用数字孪生和人工智能优化制造

    将数字孪生 digital twin 与人工智能 AI 相结合 可以减少甚至消除产品制造过程中的 臆测 几率 降低因不合理的想法实施带来的损失 那么 到底什么是数字孪生 它又是如何使现实中的生产过程变得更加高效的 CXO TALK采访了西门
  • 白嫖 IBM LinuxOne 服务器教程

    白嫖 IBM LinuxOne 教程 1 介绍 1 1前言 LinuxONE Community Cloud是IBM联合Marist大学为学生提供的用于测试应用程序和网站的平台 提供长达120天的免费VPS 温馨提醒 这个 VPS 是 S3
  • 游戏中关于跳跃的函数图像的推导以及应用

    跳跃应该是游戏开发中一个最常见的功能之一 实现的方法也有很多 这里我来讲一个我以前用的一个方法 正常的跳跃 如果使用物理引擎的话 就直接给一个向上的力就可以了 但是有一些游戏 例如跑酷 角色的移动速度都是越来越快的 而如果还是只给一个向上的