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://www.tpcf.cn/web/82634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio 之基础代码解析

1、 onCreate 在 Android 开发中,MainActivity 作为应用的入口 Activity,其 onCreate() 方法是生命周期中第一个且最重要的回调方法,负责初始化核心组件和界面。以下是其核心要点: 一、基本定义与作用 调用时机 当 Activity 首次…

AIGC图像去噪:核心原理、算法实现与深度学习模型详解

1. 背景概述 1.1 目标与范畴 在AIGC(人工智能生成内容) 的技术生态系统中,图像生成模型(如生成对抗网络GAN、扩散模型Diffusion Model)所产出的视觉内容,其质量常因训练数据中的固有瑕疵、生成过程中的随机扰动或数据传输期间的信号衰减而呈现出不同程度的退化。因此,…

电路图识图基础知识-自耦变压器降压启动电动机控制电路(十六)

自耦变压器降压启动电动机控制电路 自耦变压器降压启动电动机控制电路是将自耦变压器的原边绕组接于电源侧,副边绕组接 于电机侧。电动机定子绕组启动时的电压为自耦变压器降压后得到的电压,这样可以减少电动 机的启动电流和启动力矩,当电动…

Life:Internship finding

1. 前言 fishwheel writes this Blog to 记录自分自身在研二下找实习的经历。When 写这篇 Blog 的时候我的最后一搏也挂掉了,只能启用保底方案了。When I 打开我的邮箱时,发现里面有 nearly 100 多封与之相关的邮件,顿时感到有些心凉&#x…

Redis 常用数据类型和命令使用

目录 1 string 2 hash 3 list 4 set集合 5 zset有序集合 1 string 值可以是字符串、数字和二进制的value&#xff0c;值最大不能超过512MB 应用场景&#xff1a; 应用程序缓存 计数器 web共享session 限速 1.1 设置单个键值 set <key> value [EX seconds|PX…

Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast

一、Spring Boot缓存架构核心 Spring Boot通过spring-boot-starter-cache提供统一的缓存抽象层&#xff1a; #mermaid-svg-PW9nciqD2RyVrZcZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PW9nciqD2RyVrZcZ .erro…

【photoshop】专色浓度和专色密度

1.1 专色浓度 是图层填充到专色前&#xff0c;设置的前景色CMYK的K值。填充到专色后&#xff0c;可以查看到专色中图层的k值。 ps前景色填充快捷键 1.Windows 系统&#xff1a;Alt Delete&#xff1b;2.Mac 系统&#xff1a;Option Delete。 1.2专色密度 专色的属性&…

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点&#xff1a; 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比&#xff0c;使用 14 位模数转换器 &#xff08;ADC&#xff09; 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …

leetcode hot100刷题日记——33.二叉树的层序遍历

解题总结二维vector的初始化方法 题目描述情况1&#xff1a;不确定行数和列数情况2&#xff1a;已知行数和列数情况3&#xff1a;已知行数但不知道列数情况4&#xff1a;已知列数但不知道行数 题目描述 解答&#xff1a;用队列 思路都差不多&#xff0c;我觉得对于我自己来说&a…

微服务面试资料1

在当今快速发展的技术领域&#xff0c;微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计&#xff0c;以及敏捷开发实践等关键问题展开深入探讨&#xff0c;旨在为准备面试的 Java 开发者提供一份全面的复…

【设计模式-4.8】行为型——中介者模式

说明&#xff1a;本文介绍行为型设计模式之一的中介者模式 定义 中介者模式&#xff08;Mediator Pattern&#xff09;又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互&#xff0c;中介者使各对象不需要显式地互相作用&#xff0c;从而使其耦合松散&#xf…

Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数

Oracle 的SEC_CASE_SENSITIVE_LOGON 参数 关键版本信息 SEC_CASE_SENSITIVE_LOGON 参数在以下版本中被弃用&#xff1a; Oracle 12c Release 1 (12.1)&#xff1a; 该参数首次被标记为"过时"(obsolete)但依然保持功能有效 Oracle 18c/19c 及更高版本&#xff1a; …

《图解技术体系》How Redis Architecture Evolves?

Redis架构的演进经历了多个关键阶段&#xff0c;从最初的内存数据库发展为支持分布式、多模型和持久化的高性能系统。以下为具体演进路径&#xff1a; 单线程模型与基础数据结构 Redis最初采用单线程架构&#xff0c;利用高效的I/O多路复用&#xff08;如epoll&#xff09;处…

【电赛培训课】测量与信号类赛题分析

一、赛题基本情况及硬件电路准备 &#xff08;一&#xff09;赛题基本情况 1.测量与信号类赛题统计 2.测量与信号类赛题特点 &#xff08;二&#xff09;硬件电路准备 综测环节不允许带入电脑和手机&#xff0c;需要自己根据题目要求和芯片参数指标进行设计和计算&#xff0c…

移动AI神器GPT Mobile:多模型自由切换

GPT Mobile是什么 GPT Mobile是一款开源的本地移动部署AI工具,主要用于安卓设备。以下是其相关介绍: 功能特点 多模型交互:支持与多个大型语言模型(LLM)同时进行对话,用户导入相应的API密钥,就可连接OpenAI、Anthropic、Google、Ollama等平台,还能根据需求自由切换不同…

AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景

在实际的开发过程中很少会只用 AirSim 自带的 Blocks 场景&#xff0c;通常需要用到自定义的一些环境和模型&#xff0c;依托于强大的 UE 引擎可以较为逼真地完成场景渲染。这篇博客记录了如何从头开始导入一个自定义场景并加载 AirSim 插件。 【Note】&#xff1a;由于 UE Ed…

GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)

2000年左右&#xff0c;微软在DirectX 8.0中首次提出了Shader Model 1.0和顶点着色器&#xff08;Vertex Shader&#xff09;的概念&#xff0c;标志着可编程管线时代的来临。随后&#xff0c;在DirectX 9.0中推出了Shader Model 2.0和像素着色器&#xff08;Pixel Shader&…

【Go语言基础【3】】变量、常量、值类型与引用类型

文章目录 一、值&#xff08;Value&#xff09;与字面量&#xff08;Literal&#xff09;1. 值2. 字面量 二、变量&#xff08;Variable&#xff09;1. 声明方式2. 赋值方式3. 变量默认值4. 类型与值的匹配 三、常量&#xff08;Constant&#xff09;1. 声明方式2. 常量的特性3…

AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用

自己踩过坑不想别人也踩坑了 亚马逊S3存储桶直传前端demo复制即可使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Python数据可视化科技图表绘制系列教程(四)

目录 带基线的棒棒糖图1 带基线的棒棒糖图2 带标记的棒棒糖图 哑铃图1 哑铃图2 包点图1 包点图2 雷达图1 雷达图2 交互式雷达图 【声明】&#xff1a;未经版权人书面许可&#xff0c;任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博…