原创 DA項目技術小結

最近一直在忙的項目終於要在海外進行付費測試了,抽空小結一下用到的技術要點。 項目是基於Unity Tilemap-Isometric的2D休閒養成遊戲,場景裝飾物是Sprite和Spine,角色則是3D的。 1. 地圖地表採用了類似《魔獸

原创 在Unity中復刻《海島奇兵》海水渲染

週末花了一天時間在Unity中復刻了一下《海島奇兵》海島場景海水的渲染效果,先上目前復刻的效果圖: 總體上還原了海水深度、海面波光、海水流動、海岸泡沫的效果。 復刻的思路其實就是拿Adreno Profiler、SnapDragon和I

原创 《部落衝突》英雄角色的渲染方式

部落衝突的建築、地面和小兵都是2D的序列幀,英雄採用3D渲染到RenderTexture的方式,以便和2D的環境進行正常的遮擋關係。 最終效果圖: 抓幀證明:  

原创 Unity序列化文件到底是如何關聯MonoBehaviour的

我們知道Unity序列化文件的格式是YAML,在Inspector面板上可以拖拽的腳本、資源會被視爲引用。以下YAML語句描述了一條對資源的引用: {fileID: -1155515603, guid: 7f2f46c0507666e4

原创 IL2Cpp簡易加密方法

Mono作爲backend的時代,破解總的來說還是容易的: 修改libmono.so :從內存動態搜素dll特徵值動態dump 混淆Dll:dnspy作者的de4net可以反混淆大部分混淆器 修改Dll的PE結構(騰訊MTP):可以用XP

原创 IL2Cpp深坑之ThreadPool

繼上篇IL2Cpp深坑之WeakReference之後,新坑出爐!😀 試用RVO2-CS時,發現Android Mono打出來的包,在500元的安卓手機上可以跑50幀,但是Androdi/iOS IL2Cpp打包在iPhoneX上也只能跑

原创 Unity中使用ProtoBuf-net的正確姿勢

三個核心問題 選用哪個版本?爲什麼不選擇Google.ProtoBuf? 能否支持IL2CPP的AOT? 使用Dll還是使用源碼? 問題一:選用哪個版本?爲什麼不選擇Google.ProtoBuf? 選擇最新版本,但是要手動

原创 Unity 新型Android SDK打包三則

一. Android Studio3.3以上版本        如果SDK使用了Android 3.3版本,gradle版本可能要求升級爲4.x版本,而Android Plugin版本會要求了3.x版本,示例:com.android.to

原创 使用Vulkan封裝一個2D小引擎

花了半個月填了下畢設開的坑『基於Vulkan的2D遊戲引擎的設計與實現』,最終實現了一個簡單的2D小引擎,算是體驗了Vulkan的開發流程。 主循環非常常規,三段式: void GameEngine::Run() { while (!

原创 暗黑戰神換裝系統的實現

翻了一下暗黑戰神的換裝系統,效果如下圖所示,可以看到人物的武器,盔甲外觀的模型具有不同程度的變化。 其實人物模型以及Hierarchy層級最初如下圖所示,101_XX每個節點具有一個SkinnedMeshRenderer組件,對應每個可

原创 Soul Knight破解小記

最近TapTap上有一款Roguelike的射擊遊戲Soul Knight火了,下載玩了一會兒,果然很好玩。但是隻有騎士一個角色,其他角色都需要付費解鎖,角色的養成也需要大量的寶石,對我這樣的手殘黨來說真是很尷尬。但是Soul Knigh

原创 淺談Unity的資源管理系統

一. 外部資源的導入外部導入的資源主要有圖片、模型(可能包含動畫)、音頻等。每種類型的文件都有很多種類型,如圖片有png、psd、jpeg、tga等,當導入這些文件的時候Unity會將其處理問自己的數據格式YAML,保存在Library下

原创 嘗試清理Prefab中冗餘的內容

整理項目特效Prefab時發現Prefab特別大,一個包含幾十個ParticleSystem的Prefab大小竟然達到了1MB(項目採用了ForceText模式),懷疑是ParticleSystem的序列化字段太多,於是創建一個空Part

原创 Unity Android平臺下插件/SDK開發通用流程

本文主要面向對Android開發不甚瞭解的Unity開發者,介紹了基於最新的Android Studio的標準Android開發環境與項目結構的配置流程,在此基礎上,開發者可以快速的進行SDK的接入與插件的開發。 目前國內各大博客上搜到的

原创 【惡搞】如何在Unity正確的使用try-catch

public void Foo() { try { FuckingUnity(); } catch (System.Exception e) { Process.St