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.pswp.cn/web/82634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82634.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋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;任何單位或個人不得以任何形式復制、發行、出租、改編、匯編、傳播、展示或利用本博…