2D橫板跳躍游戲筆記(查漏補缺ing...)

1.Compression(壓縮質量):可以改為None,不壓縮的效果最好,但占用內存

2.Filter Mode(過濾模式):可以選擇Point(no filter)

3.Pixels Per Unit:是每個方格所容納的像素個數

4.切割圖集要選擇Sprite Mode 為 Multiple

注:Pivot(錨點)也就是圖片中心軸

5.在Preferences中的Tile Palette中可以添加更多快捷功能。

6.在animator中的每個animation,可以點擊Add Behaviour可以創建該類腳本,進行代碼控制。

7.動畫腳本寫設置動畫的函數,然后用其他腳本中調用,Trigger單獨調用,Int/float/bool在動畫腳本的update中更新。

8.Layer Override Priority是代表碰撞優先級,越高越會優先碰撞。

9.關于數值一般需要兩個:maxValue與currentValue。

10.繼承關系的父類可以寫成虛函數,通過子類進行覆寫。

public virtual void Move()
{//父類方法
}
override public void Move()
{base.Move();//依然使用父類中的方法,只是增加新的//子類覆寫方法
}

11.如果只是在子父之間使用的變量可以使用protected修飾符?。

12.如果合并的碰撞體無法檢測,可以調整Composite Collider 2D中Geometry Type為Polygons。

13.自動添加必需的組件添加可以使用:

[RequireComponent(typeof(Rigidbody2D))]

14.cinemachine中的confiner2D每次獲取都需要清理緩存(InvalidateCache)

15.多設備的管理需要使用InputSystem庫中的方法進行操作。

16.管理者一般只有一個,被管理者有多個。

17.調用不同物體的相同接口執行不同方法,接口中的方法不需要實現。

18.使用SO寫的事件,可以使用激活UnityEvent的方式來呼叫執行事件。

19.攻擊執行邏輯

????????1)Attack(攻擊者)

public class Attack : MonoBehaviour
{public int damage;public float attackRange;public float attackRate;//攻擊頻率private void OnTriggerStay2D(Collider2D other){other.GetComponent<Character>()?.TakeDamage(this);}
}

? ? ? ? 2)Character(被攻擊者)

public void TakeDamage(Attack attacker)
{if (currentHealth - attacker.damage > 0){currentHealth -= attacker.damage;}else{currentHealth = 0;}
}

具體邏輯:實際執行血量減少邏輯實在被攻擊者中,攻擊者主要起到通知的作用。?

20.數據保存邏輯

? ? ? ? 1)保存接口(需要保存數據的代碼調用接口)

public interface ISaveable
{DataDefination GetDataID();void RegisterSaveData(){DataManager.instance.RigisterSaveData(this);} void UnRegisterSaveData() => DataManager.instance.UnRegisterSaveData(this);void GetSaveData(Data data);void LoadData(Data data);
}

? ? ? ? 2)?數據管理者

public class DataManager : MonoBehaviour
{public static DataManager instance;[Header("事件監聽")]public VoidEventSO saveDataEvent;public VoidEventSO loadDataEvent;private List<ISaveable> saveableList = new ();private Data saveData;private void Awake(){if(instance == null)instance = this;elseDestroy(gameObject);saveData = new Data();}private void Update(){if (Keyboard.current.lKey.wasPressedThisFrame){Load();}}private void OnEnable(){saveDataEvent.OnEventRaised += Save;loadDataEvent.OnEventRaised += Load;}private void OnDisable(){saveDataEvent.OnEventRaised -= Save;loadDataEvent.OnEventRaised -= Load;}public void RigisterSaveData(ISaveable saveable){if (!saveableList.Contains(saveable)){saveableList.Add(saveable);}}public void UnRegisterSaveData(ISaveable saveable){saveableList.Remove(saveable);}public void Save(){foreach (var saveable in saveableList){saveable.GetSaveData(saveData);}foreach (var item in saveData.characterPosDict){Debug.Log(item.Key + " : " + item.Value);}}public void Load(){foreach (var saveable in saveableList){saveable.LoadData(saveData);}}
}

? ? ? ? 3)?數據唯一識別ID

public class DataDefination : MonoBehaviour
{public PersistentType persistentType;public string ID;private void OnValidate(){if (persistentType == PersistentType.ReadWrite){if(ID == string.Empty)ID = System.Guid.NewGuid().ToString();}else{ID = string.Empty;}}
}

? ? ? ? 4)數據

public class Data
{public string sceneToSave;public Dictionary<string,Vector3> characterPosDict = new ();public Dictionary<string,float> floatSaveData = new ();public GameSceneSO GetSaveScene(){var newScene = ScriptableObject.CreateInstance<GameSceneSO>();return newScene;}
}

?具體邏輯:一個腳本需要數據保存與讀取,需要調用接口,實現里面的方法并且注冊(卸載)注

? ? ? ? ? ? ? ? ? ?冊表,然后管理者在數據保存和加載時一次調用注冊表里的對象執行每個里面對應的

? ? ? ? ? ? ? ? ? ?保存與加載方法。

? ? ? ? ? ? ? ? ? ?數據會存入Data的每個字典中,每個字典分別由ID與存儲數據構成,那么每個腳本掛

? ? ? ? ? ? ? ? ? ?載的物體都需要生成唯一可識別ID。

21.Addressable的異步加載

????????1.場景切換管理

    public Transform playerTrans;public Vector3 firstPosition;public Vector3 menuPosition;[Header("場景")]public GameSceneSO firstLoadScene;public GameSceneSO menuScene;[Header("事件廣播")]public VoidEventSO afterSceneLoadedEvent;public FadeEventSO fadeEvent;public SceneLoadEventSO unLoadedEvent;public GameSceneSO currentloadScene;private GameSceneSO sceneToLoad;private Vector3 posToGo;private bool isLoading;private void OnBackToMenuEvent(){sceneToLoad = menuScene;loadEventSO.RaiseLoadRequestEvent(sceneToLoad,menuPosition,true);}private void NewGame(){sceneToLoad = firstLoadScene;loadEventSO.RaiseLoadRequestEvent(sceneToLoad,firstPosition,true);}//加載場景前置工作private void OnLoadRequestEvent(GameSceneSO locationToGo, Vector3 posToGo, bool fadeScreen){if(isLoading)return;isLoading = true;sceneToLoad = locationToGo;this.posToGo = posToGo;this.fadeScreen = fadeScreen;if(currentloadScene != null)StartCoroutine(UnLoadPreviousScene());elseLoadNewScene();}//卸載之前場景private IEnumerator UnLoadPreviousScene(){unLoadedEvent.LoadRequestEvent(sceneToLoad, posToGo, fadeScreen);//等待當前場景完全卸載yield return currentloadScene.sceneReference.UnLoadScene();LoadNewScene();}//加載新的場景private void LoadNewScene(){//加載場景并且場景為激活狀態var loadingOption = sceneToLoad.sceneReference.LoadSceneAsync(LoadSceneMode.Additive);loadingOption.Completed += OnLoadComplete;}//加載完成之后執行任務private void OnLoadComplete(AsyncOperationHandle<SceneInstance> obj){currentloadScene = sceneToLoad;playerTrans.position = posToGo;isLoading = false;if(currentloadScene.sceneType != SceneType.Menu)afterSceneLoadedEvent.RaiseEvent();}

? ? ? ? 2.場景SO

[CreateAssetMenu(menuName = "Game Scene/GameSceneSO", fileName = "GameSceneSO")]
public class GameSceneSO : ScriptableObject
{public SceneType sceneType;public AssetReference sceneReference;
}

? ? ? ? 3.每個場景都需要勾選Addressable,添加進入Addressable Groups里面。

22.可交互邏輯

? ? ? ? 1.交互接口

public interface IInteractable
{void TriggerAction();
}

? ? ? ? 2.可交互邏輯

public class Chest : MonoBehaviour,IInteractable
{public void TriggerAction(){Debug.Log("Open Chest!");}
}

? ? ? ? 3.玩家交互邏輯?

public class Sign : MonoBehaviour
{private IInteractable targetItem;private bool canPress;private void OnTriggerStay2D(Collider2D other){if (other.CompareTag("Interactable")){targetItem = other.GetComponent<IInteractable>();canPress = true;}}private void OnTriggerExit2D(Collider2D other){canPress = false;}private void OnConfirm(InputAction.CallbackContext obj){if (canPress && targetItem != null){targetItem.TriggerAction();}}
}

注:獲取可交互物體對應的接口,然后執行接口函數,就會執行不同物體的不同方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904895.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL

ICLR 2025 spotlight paper 構建能夠在少量樣本下學習出優良策略的深度強化學習&#xff08;RL&#xff09;智能體一直是一個極具挑戰性的任務。為了提高樣本效率&#xff0c;近期的研究嘗試在每獲取一個新樣本后執行大量的梯度更新。盡管這種高更新-數據比&#xff08;UTD&am…

Dia瀏覽器:AI驅動瀏覽網頁,究竟怎么樣?(含注冊申請體驗流程)

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、Dia瀏覽器簡介1. 什么是Dia瀏覽器2. 開發背景與公司簡介3. 與傳統瀏覽器的區別 …

SSL/TLS 證書與數字簽名:構建互聯網信任的詳解

在浩瀚的數字世界中&#xff0c;信任是安全通信的基石。當我們通過瀏覽器訪問一個 HTTPS 網站、進行在線支付&#xff0c;或者下載一個重要的軟件更新時&#xff0c;我們如何能確信自己正在與合法的、未被仿冒的對方進行交互&#xff1f;我們又如何能保證傳輸的數據沒有被中途竊…

近日部署跑通的若干多模態模型總結與論文概述

CLIP模型概述與落地測試 CLIP模型全稱是Contrastive Language-Image Pretraining??&#xff08;對比語言圖像預訓練&#xff09;。是OpenAI于2021年提出的多模態預訓練模型&#xff0c;通過對比學習對齊圖像和文本的表示&#xff0c;實現零樣本&#xff08;zero-shot&#x…

Web3 初學者的第一個實戰項目:留言上鏈 DApp

目錄 &#x1f4cc; 項目簡介&#xff1a;留言上鏈 DApp&#xff08;MessageBoard DApp&#xff09; &#x1f9e0; 技術棧 &#x1f536; 1. Solidity 智能合約代碼&#xff08;MessageBoard.sol&#xff09; &#x1f537; 2. 前端代碼&#xff08;index.html script.js…

LeetCode 270:在二叉搜索樹中尋找最接近的值(Swift 實戰解析)

文章目錄 摘要描述題解答案題解代碼分析示例測試及結果時間復雜度空間復雜度總結 摘要 在日常開發中&#xff0c;我們經常需要在一組有序的數據中快速找到最接近某個目標值的元素。LeetCode 第 270 題“Closest Binary Search Tree Value”正是這樣一個問題。本文將深入解析該…

Kotlin高階函數多態場景條件判斷與子邏輯

Kotlin高階函數多態場景條件判斷與子邏輯 fun main() {var somefun: (Int, Float) -> Longval a 4val b 5fsomefun multi()//if 某條件println(somefun.invoke(a, b))//if 某條件somefun add()println(somefun.invoke(a, b)) }fun multi(): (Int, Float) -> Long {re…

嵌入式學習--江協51單片機day4

昨天周五沒有學習&#xff0c;因為中午沒有睡覺&#xff0c;下午和晚上擠不出整塊的時間。周日有考試今天也沒有學很多啊&#xff0c;但以后周末會是學一天&#xff0c;另一天休息和寫周總結。 今天學了串口通信和LED點陣屏&#xff0c;硬件原理是真的很迷&#xff0c;一但想搞…

Spring Cloud 以Gateway實現限流(自定義返回內容)

前言 Spring Cloud Gateway自帶RequestRateLimiterGatewayFilterFactory限流方案&#xff0c;可基于Redis和RedisRateLimiter實現默認算法為令牌桶的請求限流。作為自帶的該限流方案&#xff0c;其可與Spring生態的其它各項組件無縫集成&#xff0c;并且自身實現也相對完善/好用…

容器填充函數fill和memset對比總結

文章目錄 1、fill() 按元素填充2、memset() 按字節填充3、對比 1、fill() 按元素填充 用于將容器或數組的指定范圍內的元素賦值為指定值&#xff08;按元素類型填充&#xff09;。屬于 C STL 算法&#xff08;<algorithm> 頭文件&#xff09;。 // 從起始地址到結束地址…

【Linux實踐系列】:進程間通信:萬字詳解共享內存實現通信

&#x1f525; 本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生就像一場馬拉松&#xff0c;重要的不是起點&#xff0c;而是堅持到終點的勇氣 ★★★ 本文前置知識&#xff1a; …

CogView4 文本生成圖像

CogView4 文本生成圖像 flyfish 基于 CogView4Pipeline 的圖像生成程序&#xff0c;其主要目的是依據 JSON 文件里的文本提示信息來生成圖像&#xff0c;并且把生成的圖像保存到指定文件夾。 JSON 文件格式 [{"prompt": "your first prompt"},{"pr…

路由重發布

路由重發布 實驗目標&#xff1a; 掌握路由重發布的配置方法和技巧&#xff1b; 掌握通過路由重發布方式實現網絡的連通性&#xff1b; 熟悉route-pt路由器的使用方法&#xff1b; 實驗背景&#xff1a;假設學校的某個分區需要配置簡單的rip協議路由信息&#xff0c;而主校…

機器人領域和心理學領域 恐怖谷 是什么

機器人領域和心理學領域 恐怖谷 是什么 恐怖谷是一個在機器人領域和心理學領域備受關注的概念,由日本機器人專家森政弘于1970年提出。 含義 當機器人與人類的相似度達到一定程度時,人類對它們的情感反應會突然從積極變為消極,產生一種毛骨悚然、厭惡恐懼的感覺。這種情感…

Go-GJSON 組件,解鎖 JSON 讀取新姿勢

現在的通義靈碼不但全面支持 Qwen3&#xff0c;還支持配置自己的 MCP 工具&#xff0c;還沒體驗過的小伙伴&#xff0c;馬上配置起來啦~ https://click.aliyun.com/m/1000403618/ 在 Go 語言開發領域&#xff0c;json 數據處理是極為常見的任務。Go 標準庫提供了 encoding/jso…

數據分析_數據預處理

1 數據預處理流程 ①數據清洗:處理數據缺失、數據重復、數據異常等問題,提升數據質量. ②數據轉換:涵蓋基本數據轉換、語義數據轉換、衍生數據轉換和隱私數據轉換,適配分析需求. ③數據集成:整合多源數據. 2 數據清洗 2.1 數據缺失 2.1.1 數值型數據缺失 數值型列的部分數值不…

vue +xlsx+exceljs 導出excel文檔

實現功能&#xff1a;分標題行導出數據過多&#xff0c;一個sheet表里表格條數有限制&#xff0c;需要分sheet顯示。 步驟1:安裝插件包 npm install exceljs npm install xlsx 步驟2&#xff1a;引用包 import XLSX from xlsx; import ExcelJS from exceljs; 步驟3&am…

ThinkPad T440P如何從U盤安裝Ubuntu24.04系統

首先制作一個安裝 U 盤。我使用的工具是 Rufus &#xff0c;它的官網是 rufus.ie &#xff0c;去下載最新版就可以了。直接打開這個工具&#xff0c;選擇自己從ubuntu官網下載Get Ubuntu | Download | Ubuntu的iso鏡像制作U盤安裝包即可。 其次安裝之前&#xff0c;還要對 Thi…

第十七次博客打卡

今天學習的內容是動態規劃算法。 動態規劃算法&#xff08;Dynamic Programming&#xff0c;簡稱 DP&#xff09;是一種通過將復雜問題分解為更小的子問題來求解的算法思想。它主要用于解決具有重疊子問題和最優子結構特性的問題。 一、動態規劃的基本概念 1. 最優子結構 一個復…

視覺革命來襲!ComfyUI-LTXVideo 讓視頻創作更高效

探索LTX-Video 支持的ComfyUI 在數字化視頻創作領域&#xff0c;視頻制作效果的提升對創作者來說無疑是一項重要的突破。LTX-Video支持的ComfyUI便是這樣一款提供自定義節點的工具集&#xff0c;它專為改善視頻質量、提升生成速度而開發。接下來&#xff0c;我們將詳細介紹其功…