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

网站外包 博客wordpress来源转载

网站外包 博客,wordpress来源转载,公司财务记账软件,网站备案要啥Unity基础-Mathf相关 一、Mathf数学工具 概述 Mathf是Unity中封装好用于数学计算的工具结构体,提供了丰富的数学计算方法,特别适用于游戏开发场景。它是Unity开发中最常用的数学工具之一,能够帮助我们处理各种数学计算和插值运算。 Mathf…

Unity基础-Mathf相关

一、Mathf数学工具

概述

Mathf是Unity中封装好用于数学计算的工具结构体,提供了丰富的数学计算方法,特别适用于游戏开发场景。它是Unity开发中最常用的数学工具之一,能够帮助我们处理各种数学计算和插值运算。

Mathf与Math的区别

  • Math是C#中封装好用于数学计算的工具类——位于System命名空间下
  • Mathf是Unity中封装好用于数学计算的工具结构体
  • 二者相关方法几乎一样
  • Math是C#自带的工具类,主要提供有关数学的方法
  • Mathf是Unity专门封装的,包含Math的相关方法,还有适用游戏开发的相关方法

Mathf常用方法

1. 计算一次的方法
// 1. 圆周率PI
print(Mathf.PI); // 输出3.141593// 2. 绝对值Abs
print(Mathf.Abs(-10)); // 输出10// 3. 向上取整CeilToInt
print(Mathf.CeilToInt(1.1f)); // 输出2// 4. 向下取整FloorToInt
print(Mathf.FloorToInt(1.9f)); // 输出1// 5. 钳制函数Clamp
print(Mathf.Clamp(10, 0, 5)); // 输出5
print(Mathf.Clamp(20, 0, 25)); // 输出25
print(Mathf.Clamp(-1, 0, 25)); // 输出0// 6. 最大值Max
print(Mathf.Max(1, 2)); // 输出2// 7. 最小值Min
print(Mathf.Min(1, 2)); // 输出1// 8. 幂运算Pow
print(Mathf.Pow(2, 3)); // 输出8// 9. 四舍五入RoundToInt
print(Mathf.RoundToInt(1.5f)); // 输出2// 10. 平方根Sqrt
print(Mathf.Sqrt(4)); // 输出2// 11. 是否为2的幂IsPowerOfTwo
print(Mathf.IsPowerOfTwo(4)); // 输出true// 12. 判断正负Sign
print(Mathf.Sign(1)); // 输出1

总结:这些基础数学方法在游戏开发中经常使用,特别是在处理数值计算、位置计算和游戏逻辑时。它们提供了精确的数学运算,帮助我们实现各种游戏功能。

2. 计算多次的方法
线性插值Lerp

线性插值是游戏开发中最常用的数学工具之一,它能够实现平滑的过渡效果,使游戏画面更加自然流畅。

// 用于两个值之间的差值过渡Mathf.Lerp(初始值,目标值,插值系数)
// 差值系数取值范围[0,1]
// 计算公式:result = start + (end - start) * t
print(Mathf.Lerp(1, 10, 0.5f)); // 输出5.5// 差值运算用法一
// 每帧更新start的值 变化速度先快后慢,位置无限接近end,但是不会得到end
start = Mathf.Lerp(start, end, Time.deltaTime);// 差值运算用法二
// 每帧更新time的值,变化速度匀速,位置每帧接近,当time=1时,result=end
float time = 0;
time += Time.deltaTime;
result = Mathf.Lerp(start, end, time);

扩展知识

  1. Lerp不仅可以用于位置插值,还可以用于:
    • 颜色渐变
    • 旋转角度
    • 缩放大小
    • 透明度变化
  2. 除了线性插值,Unity还提供了其他插值方法:
    • Vector3.Lerp:向量插值
    • Quaternion.Lerp:四元数插值
    • Color.Lerp:颜色插值
Lerp实际应用示例

下面通过一个具体的示例来展示Lerp在游戏开发中的实际应用,这个示例展示了两种不同的移动实现方式。

public class MathfTest : MonoBehaviour
{public Transform cube;private Vector3 start;private float speed=1;private float time=0;private Vector3 startPos;private Vector3 bPos;// Start is called before the first frame updatevoid Start(){start=this.transform.position;}// Update is called once per framevoid Update(){// Move1();// Move2();}private void Move1(){//方法1 先快后慢start.x=Mathf.Lerp(start.x,cube.position.x,speed*Time.deltaTime);start.y=Mathf.Lerp(start.y,cube.position.y,speed*Time.deltaTime);start.z=Mathf.Lerp(start.z,cube.position.z,speed*Time.deltaTime);this.transform.position=start;//使用Vector3.Lerp方法// transform.position=Vector3.Lerp(transform.position,cube.position,speed*Time.deltaTime);}private void Move2(){//方法2 匀速time+=Time.deltaTime;if(bPos!=cube.position){time=0;bPos=cube.position;startPos=transform.position;}start.x=Mathf.Lerp(startPos.x,bPos.x,time);start.y=Mathf.Lerp(startPos.y,bPos.y,time);start.z=Mathf.Lerp(startPos.z,bPos.z,time);transform.position=start;}
}

两种移动方式的区别

  1. 方法1(先快后慢)

    • 使用Time.deltaTime作为插值系数
    • 移动速度随着距离目标越近而越慢
    • 永远不会完全到达目标位置
    • 适合相机跟随等场景
  2. 方法2(匀速移动)

    • 使用time变量作为插值系数
    • 移动速度保持恒定
    • 可以完全到达目标位置
    • 适合需要精确控制的场景

使用建议

  1. 选择移动方式时需要考虑:
    • 是否需要精确控制移动时间
    • 是否需要完全到达目标位置
    • 移动效果的自然程度要求
  2. 可以结合两种方法的特点:
    • 使用方法1实现平滑的相机跟随
    • 使用方法2实现精确的物体移动

应用场景

Mathf在游戏开发中的应用非常广泛,主要包括:

  1. 游戏对象移动和旋转

    • 角色移动
    • 相机跟随
    • 物体旋转
  2. 平滑动画过渡

    • UI动画
    • 场景切换
    • 特效渐变
  3. 物理计算和碰撞检测

    • 碰撞检测
    • 物理模拟
    • 力的计算
  4. 游戏逻辑中的数学运算

    • 伤害计算
    • 属性计算
    • 随机数生成

扩展应用

  1. 游戏AI

    • 寻路算法
    • 行为决策
    • 状态转换
  2. 特效系统

    • 粒子效果
    • 光照变化
    • 材质过渡
  3. UI系统

    • 界面动画
    • 进度条
    • 数值显示

文章转载自:

http://d7AYklZv.wsnjn.cn
http://KPCbM4CA.wsnjn.cn
http://O5ZbzsTE.wsnjn.cn
http://agtw2tyj.wsnjn.cn
http://nHRNSqqc.wsnjn.cn
http://bfUUOg7f.wsnjn.cn
http://JShfTmhu.wsnjn.cn
http://m51uUktH.wsnjn.cn
http://JA9UU2Gy.wsnjn.cn
http://3bLaJEjj.wsnjn.cn
http://L3uypluu.wsnjn.cn
http://HoitpowE.wsnjn.cn
http://AfuxT0wR.wsnjn.cn
http://8PZ1g0Sh.wsnjn.cn
http://u4ukCmwQ.wsnjn.cn
http://796SKaVJ.wsnjn.cn
http://OXVYE3tV.wsnjn.cn
http://3uS034DU.wsnjn.cn
http://zK9pUXiE.wsnjn.cn
http://tRutOl8T.wsnjn.cn
http://XmaoEzFf.wsnjn.cn
http://PNFoXDHN.wsnjn.cn
http://KenzoqE4.wsnjn.cn
http://IVNS0v6U.wsnjn.cn
http://qPIkZCyj.wsnjn.cn
http://bFKM0OeY.wsnjn.cn
http://SZTvgo1F.wsnjn.cn
http://A67XmuRb.wsnjn.cn
http://tE0Hxa9x.wsnjn.cn
http://f8bRsDwi.wsnjn.cn
http://www.dtcms.com/wzjs/721635.html

相关文章:

  • 做网站找客源p2p网站开发的多少钱
  • 网站seo具体怎么做?深圳 电子商务网站开发
  • 建网站代理有什么做ppt参考的网站
  • 科学小制作小发明seo的培训班
  • 做网站还是做业务员如何建设网站兴田德润实惠
  • 如何帮公司做网站礼品网站制作
  • 做网站收录的网站有哪些热点事件营销案例
  • sentos上部署.net网站施工企业价值链
  • 唐山建设集团招聘信息网站智通人才东莞招聘网
  • 网上买吃的网站做代理济南旅游网页设计
  • 阿里巴巴国际网站首页视频怎么做拼多多推广联盟
  • 移动网站不备案吗qq营销网站源码
  • 离退休工作网站建设方案地方网站域名选择
  • 如何做视频网站赚钱珠宝网站建设需求
  • 手机端网站动效类怎么做网店网站怎么做的
  • 音乐网站禁止做浅度链接wordpress 插件 h5
  • 厦门网站个人制作网站建设为什么要全款
  • 长春建站塔山双喜舆情服务公司
  • 微网站搭建教程应用网站模板
  • 百度收录排名好的网站南京网站制作有限公司
  • 昆明网站建设团队网站建设一般多少钱官网
  • 路由硬盘做网站空间不小程序开发小程序制作
  • 做公司的网站的需求有哪些内容网站的建设与维护需要资质吗
  • 做丝网网站哪个好汉语国际网站建设
  • 医学招聘网站开发区搜索引擎网站分析
  • 怎么做网站收款二维码wordpress付费阅读全文
  • 临沂建设中专官方网站潍坊网站关键字优化
  • 邢台网站制作报价多少钱服务器安全防护
  • 建立网站的目的是什么境外电商哪个平台好
  • 天津省网站制作厂家wordpress 收费主题