【Unity】Mathf

embedded/2024/11/17 9:37:28/

【Unity】Mathf

1.Math与Mathf

推荐使用Mathf

  • Math是C#中封装好的用于数学计算的工具 类,Math位于System命名空间中
  • Mathf是Unity中封装好的用于数学计算的工具 结构体,Mathf位于UnityEngine命名空间中
  • Mathf比Math方法多,不仅包含Math中的方法 还多了适用于游戏开发的方法

2.常用成员

  • Π PI
Debug.Log(Mathf.PI);//3.141593
  • 绝对值 Abs
Debug.Log(Mathf.Abs(-1));//1
  • 向上取整 CeilToInt
Debug.Log(Mathf.CeilToInt(1.1f));//2
  • 向下取整 FloorToInt
Debug.Log(Mathf.FloorToInt(1.99f));//1
  • 钳制函数 Clamp
Debug.Log(Mathf.Clamp(5, 1, 10));//5
Debug.Log(Mathf.Clamp(0, 1, 10));//1
Debug.Log(Mathf.Clamp(11, 1, 10));//10
  • 最大值 Max
Debug.Log(Mathf.Max(1, 2, 3, 4, 5, 8, 9, 10));//10
  • 最小值 Min
Debug.Log(Mathf.Min(5, 6, 8, 1, 8));//1
  • 数的n次幂 Pow
Debug.Log(Mathf.Pow(2, 4));//16
  • 四舍五入 RoundToInt
Debug.Log(Mathf.RoundToInt(1.5f));//2
Debug.Log(Mathf.RoundToInt(1.49f));//1
  • 平方根 Sqrt
Debug.Log(Mathf.Sqrt(64));//8
  • 是否是2的n次方 IsPowerOfTwo
Debug.Log(Mathf.IsPowerOfTwo(4));//true
Debug.Log(Mathf.IsPowerOfTwo(3));//false
  • 是否正负数 Sign
Debug.Log(Mathf.Sign(0));//1
Debug.Log(Mathf.Sign(-10));//-1
Debug.Log(Mathf.Sign(11));//1
  • 角度转换成弧度 Deg2Rad
180° == Π 弧度
Debug.Log(30 * Mathf.Deg2Rad);//0.5235988
  • 弧度转换角度 Rad2Deg
Debug.Log(0.5235988 * Mathf.Rad2Deg);//30.0000017482986
  • 正弦(弧度) Sin
Debug.Log(Mathf.Sin(30 * Mathf.Deg2Rad));//0.5
  • 余弦(弧度) Cos
Debug.Log(Mathf.Cos(60 * Mathf.Deg2Rad));//0.5
  • 反正弦 得到弧度 Asin
Debug.Log(Mathf.Asin(0.5f) * Mathf.Rad2Deg);//30
  • 反余弦 得到弧度 Acos
Debug.Log(Mathf.Acos(0.5f) * Mathf.Rad2Deg);//60

3.插值Mathf.Lerp

公式 Lerp : result = start + (end - start) * t

private float start = 0;
private float end = 0;
private float time = 0;
// Update is called once per frame
void Update()
{//插值Lerp : result = start + (end - start) * t//先快后慢 (end - start) 由大到小, 无限接近 但不会到达目标start = Mathf.Lerp(start, 10, Time.deltaTime);//优化 匀速变化 会达到目标time += Time.deltaTime;end = Mathf.Lerp(start, 10, time);
}

4.案例跟随

public GameObject Player;
public float speed;
private Vector3 pos;private Vector3 targetPos;
private Vector3 startPos;
private float time;void Update()
{//先快后慢//pos = transform.position;//pos.x = Mathf.Lerp(pos.x, Player.transform.position.x, Time.deltaTime * speed);//pos.y = Mathf.Lerp(pos.y, Player.transform.position.y, Time.deltaTime * speed);//pos.z = Mathf.Lerp(pos.z, Player.transform.position.z, Time.deltaTime * speed);//transform.position = pos;//匀速if (targetPos != Player.transform.position){time = 0;targetPos = Player.transform.position;startPos = transform.position;}time += Time.deltaTime;pos.x = Mathf.Lerp(startPos.x, targetPos.x, time * speed);pos.y = Mathf.Lerp(startPos.y, targetPos.y, time * speed);pos.z = Mathf.Lerp(startPos.z, targetPos.z, time * speed);transform.position = pos;
}

因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。


http://www.ppmy.cn/embedded/37053.html

相关文章

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

Hi3516标准系统入门(命令行方式) 注意: 从3.2版本起,标准系统不再针对Hi3516DV300进行适配验证,建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作,则可能会…

分布式锁概述

什么是分布式锁 分布式锁是一种在分布式计算环境中用于同步访问共享资源的机制。它的主要目的是在一个分布式系统中,当多个进程或服务需要同时访问同一个资源时,确保任一时刻只有一个进程或服务能够执行涉及该资源的关键操作。这类似于传统单体应用中的…

基于SSM的“商店积分管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“商店积分管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统登录页面 商店首页 用户登录 用户管理 积分商品展示 摘…

Python轴承故障诊断 (18)基于CNN-TCN-Attention的创新诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

MySQL 高级 - 第七章 | 索引的数据结构

目录 一、为什么使用索引二、什么是索引2.1 索引的概述2.2 索引的优缺点 三、InnoDB 中索引的推演3.1 InnoDB 页简介3.2 没有索引的查找3.3 设计索引3.3.1 一个简单的索引设计方案3.3.2 InnoDB 中索引方案① 迭代 1 次:目录项记录的页② 迭代 2 次:多个目…

C++语法|模板的完全特例化和非完全特例化

首先明确一点,有模板的特例化,就必须得先有原模板。 什么是完全特例化 这里直接举一个例子。 首先写一个函数模板,这个函数应该能够比较整型数,并且应该按照字典序大小比较字符串,但是本题如果直接调用compare(&quo…

FFmpeg———encode_video(学习)

目录 前言源码函数最终效果 前言 encode_video:实现了对图片使用指定编码进行编码,生成可播放的视频流,编译时出现了一些错误,做了一些调整。 基本流程: 1、获取指定的编码器 2、编码器内存申请 3、编码器上下文内容参数设置 4、…

NVME Doorbell 寄存器 数据请求时doorbell 处理

3.NVMe寄存器配置 3.1 寄存器定义 NVMe寄存器主要分为两部分,一部分定义了Controller整体属性,一部分用来存放每组队列的头尾DB寄存器。 CAP——控制器能力,定义了内存页大小的最大最小值、支持的I/O指令集、DB寄存器步长、等待时间界限、仲…