Skip to content

Commit

Permalink
Remove redirect
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankNine committed Nov 19, 2024
1 parent 5090baa commit 016efdf
Show file tree
Hide file tree
Showing 10 changed files with 10 additions and 10 deletions.
2 changes: 1 addition & 1 deletion index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
<pubDate>Sun, 23 Apr 2023 16:00:00 +0800</pubDate>

<guid>https://www.chunfuchao.com/posts/unity-git-en/</guid>
<description>&lt;p&gt;&lt;em&gt;This is the translated version of my 2020 &lt;a href=&#34;https://www.chunfuchao.com/posts/unity-git/&#34;&gt;Unity 和 git&lt;/a&gt; post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.&lt;/em&gt;&lt;/p&gt;
<description>&lt;p&gt;&lt;em&gt;This is the translated version of my 2020 &lt;a href=&#34;../unity-git/&#34;&gt;Unity 和 git&lt;/a&gt; post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using Git to version control Unity projects for a while now. Recently, my company open-sourced our Unity builder &lt;a href=&#34;https://gitlab.com/rayark/mimiron-lite&#34;&gt;mimiron-lite&lt;/a&gt;, along with a new set of Git configuration files that are now being used as Git configuration standard of my company . I would like to share some insights regarding the thought process behind these configuration files and the experiences of using Git.&lt;/p&gt;</description>
</item>

Expand Down
2 changes: 1 addition & 1 deletion posts/assets-resources-and-assetbundles/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
<p>這一系列的文章會深入探討 Unity 引擎的 Asset 與資源管理。目標是提供專業開發者關於 Unity Asset 與序列化(Serialization)系統底層實作的知識。我們也會檢視 Unity 的 AssetBundle 系統的根基,然後告訴你目前的最佳實作方式。</p>
<p>這份指南分成四個部分:</p>
<ul>
<li><a href="../assets-objects-and-serialization">Asset、Object 與序列化</a> 會探討 Unity 底層是如何序列化 Asset 還有處理 Asset 之間的參考(References)。強烈建議讀者先讀過這章,因為它同時也包含了之後章節用詞的定義。</li>
<li><a href="../assets-objects-and-serialization/">Asset、Object 與序列化</a> 會探討 Unity 底層是如何序列化 Asset 還有處理 Asset 之間的參考(References)。強烈建議讀者先讀過這章,因為它同時也包含了之後章節用詞的定義。</li>
<li>Resources 資料夾 討論內建的 Resources API。</li>
<li>AssetBundle 基礎 根據第一章的資訊,在其之上繼續討論 AssetBundle 的載入還有 AssetBundle 內的 Asset 的載入。</li>
<li>AssetBundle 使用模式 是一篇篇幅很長的 AssetBundle 用法說明。它包含了如何將 Assets 分類成 AssetBundle 為佳、如何管理已經載入的 Assets、和常見的陷阱。</li>
Expand Down
2 changes: 1 addition & 1 deletion posts/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<link>https://www.chunfuchao.com/posts/unity-git-en/</link>
<pubDate>Sun, 23 Apr 2023 16:00:00 +0800</pubDate>
<guid>https://www.chunfuchao.com/posts/unity-git-en/</guid>
<description>&lt;p&gt;&lt;em&gt;This is the translated version of my 2020 &lt;a href=&#34;https://www.chunfuchao.com/posts/unity-git/&#34;&gt;Unity 和 git&lt;/a&gt; post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using Git to version control Unity projects for a while now. Recently, my company open-sourced our Unity builder &lt;a href=&#34;https://gitlab.com/rayark/mimiron-lite&#34;&gt;mimiron-lite&lt;/a&gt;, along with a new set of Git configuration files that are now being used as Git configuration standard of my company . I would like to share some insights regarding the thought process behind these configuration files and the experiences of using Git.&lt;/p&gt;</description>
<description>&lt;p&gt;&lt;em&gt;This is the translated version of my 2020 &lt;a href=&#34;../unity-git/&#34;&gt;Unity 和 git&lt;/a&gt; post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using Git to version control Unity projects for a while now. Recently, my company open-sourced our Unity builder &lt;a href=&#34;https://gitlab.com/rayark/mimiron-lite&#34;&gt;mimiron-lite&lt;/a&gt;, along with a new set of Git configuration files that are now being used as Git configuration standard of my company . I would like to share some insights regarding the thought process behind these configuration files and the experiences of using Git.&lt;/p&gt;</description>
</item>
<item>
<title>選擇無聊的技術</title>
Expand Down
2 changes: 1 addition & 1 deletion posts/there-is-no-compensation/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ <h4>還是 git hero!!!</h4>
</figcaption>
</figure>

<p>有的時候技術的傳播也真的不是取決於好壞,很多時候也是很看門面的。第一次接觸到 Technical Writing 是還在大學的時候讀的 Joel on Software,他寫的文章非常的吸引人,也從裡面學到了幾個至今很<a href="https://www.csie.ntu.edu.tw/~p92005/Joel/fog0000000069.html">受用的概念</a>。可惜他後來在 FogBugz 嘗試軟體工程界的<del>人體練成</del><a href="https://blog.codinghorror.com/has-joel-spolsky-jumped-the-shark/">自創語言</a>,結果不是很好的樣子&hellip; (曾<a href="../visual-concepts-1">在遊戲公司維護過自創語言</a>的人告訴你看過太多人 Compile 出東西就覺得完成了,其實 Compile 出東西才是剛開始,接下來還有編輯環境、Auto-complete、Debugger、Optimization 等等等&hellip;)</p>
<p>有的時候技術的傳播也真的不是取決於好壞,很多時候也是很看門面的。第一次接觸到 Technical Writing 是還在大學的時候讀的 Joel on Software,他寫的文章非常的吸引人,也從裡面學到了幾個至今很<a href="https://www.csie.ntu.edu.tw/~p92005/Joel/fog0000000069.html">受用的概念</a>。可惜他後來在 FogBugz 嘗試軟體工程界的<del>人體練成</del><a href="https://blog.codinghorror.com/has-joel-spolsky-jumped-the-shark/">自創語言</a>,結果不是很好的樣子&hellip; (曾<a href="../visual-concepts-1/">在遊戲公司維護過自創語言</a>的人告訴你看過太多人 Compile 出東西就覺得完成了,其實 Compile 出東西才是剛開始,接下來還有編輯環境、Auto-complete、Debugger、Optimization 等等等&hellip;)</p>
<p>有的時候概念就是這樣普及起來了,等到浪費了以年為單位的時間後大家才才慢慢發現不對勁,最早開始提出要檢討的人可能還會被人放火燒。<a href="https://youtu.be/gKZGWJDkhRA?t=3680">OOP</a> 也是、Design Pattern 也是、<a href="https://martinfowler.com/articles/is-tdd-dead/">TDD</a> 也是、UML 也是、Scrum 也是
。記得大學學軟體工程教的是 UML 跟 Rational Rose,照課本說的所謂的軟體工程工程就是設計師在 <a href="https://www.ibm.com/support/knowledgecenter/zh-tw/SSCLKU_7.5.5/com.ibm.xtools.rsm.legal.doc/helpindex_rsm.html">Rational Rose</a> 裡面拉完圖之後其他人在 Code Gen 出來的 Class 玩填字遊戲。上課第一張投影片就寫到說希望軟體的產出可以<strong>無視由誰來實作</strong>,以現在的角度聽起來感覺像是在描述中古世紀的醫療,發燒就要放血之類的東西。但也才過十年多一點而已,難講現在很夯的東西,再過個三五年回頭看不會像是中世紀。</p>
<p>像我跟 Scrum 相處到現在就完全不相信時程是可以預估的,也不相信什麼越估會越準的的說法。以前還會半信半疑,現在你送我兩套撲克牌我都不信。當你寫的程式只佔整套系統(Firmware、OS、遊戲引擎、加上你的 Gameplay code)不到萬分之一的 <a href="https://en.wikipedia.org/wiki/Source_lines_of_code">LoC</a>,怎麼可能會準。摸索到現在覺得只能靠 Feature Toggle 跟臨場應變來降低估錯的傷害。</p>
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-2d-graphics-optimization/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ <h3 id="rendering-pipeline">Rendering Pipeline</h3>
<h3 id="locating-bottleneck">Locating Bottleneck</h3>
<p>當要最佳化的時候最先要確認 Bottleneck 所在,參考 Nvidia 的 <a href="http://http.developer.nvidia.com/GPUGems/gpugems_ch28.html">GPU Gems</a> 所提供的做法,就是改變部分繪圖的環境看看 FPS 有沒有顯著提升,如果有就是找到 Bottleneck 了。以下是參考 GPU Gems 的作業流程簡述:</p>
<p>從 Pipeline 的後端開始,最先是試試降低 Merger 跟 Frame buffer 的資料傳輸量,最簡單的作法是降低 Frame buffer 的資料精確度(有 GPU Profiler 輔助的話可以關閉 Alpha blending),如果效能有明顯上升那就是卡在 Merger 。接下來是測試是否卡在貼圖,作法是把貼圖換成低解析度的。再來是改變解析度來測試 Fragment shading ,雖然說改變解析度也會影響到 Merger 跟 Frame buffer 的資料傳輸量,但是如果已經用了改變 Frame buffer depth 排除卡在 Merger 的可能性,那 FPS 因為解析度改變而變化就可以確定是 Fragment shading 的問題。Vertex shading 會有問題在 2D 遊戲裡比較少見,通常都是 3D 遊戲裡面做複雜的 Skinned mesh 形變計算才會出現(Unity 要在 Project settings 裡面開啟 GPU Skinning 才會在 Vertex shading 計算,如果沒有開啟就是 CPU 算),不過如果懷疑的話一樣是把 Vertex shader 改簡單去觀察 FPS 變化。最後如果都不是的話那就推斷是 CPU 下的 Draw call 或是 Set pass call 的問題。</p>
<p>當然如果有工具協助的話會方便很多。以跟之前介紹的 <a href="../android-gpu-profilers">Frame Analyzer</a> 同一組的 <a href="https://software.intel.com/en-us/articles/system-analyzer-getting-started-guides">Intel GPA System Analyzer</a> 為範例,這是在監控執行中的遊戲的畫面。可以看到左下角有直接覆寫 GPU 運作參數的選項,像是動態將貼圖改成只有 2X2 大小或是直接關閉 Alpha blending 之類的。有這類工具可以大幅提升追蹤 Bottleneck 的效率。</p>
<p>當然如果有工具協助的話會方便很多。以跟之前介紹的 <a href="../android-gpu-profilers/">Frame Analyzer</a> 同一組的 <a href="https://software.intel.com/en-us/articles/system-analyzer-getting-started-guides">Intel GPA System Analyzer</a> 為範例,這是在監控執行中的遊戲的畫面。可以看到左下角有直接覆寫 GPU 運作參數的選項,像是動態將貼圖改成只有 2X2 大小或是直接關閉 Alpha blending 之類的。有這類工具可以大幅提升追蹤 Bottleneck 的效率。</p>
<p><img alt="GPA System Analyzer" src="/images/unity-2d-graphics-optimization/gpa-system-analyzer.png"></p>
<h3 id="optimization">Optimization</h3>
<p>確定 Bottleneck 之後就要想辦法最佳化,在 Unity 開發 2D 遊戲繪圖最佳化會需要減少的通常有:</p>
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-git-en/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
<div id="content" class="content">
<article class="post">
<div class="post-content">
<p><em>This is the translated version of my 2020 <a href="/posts/unity-git/">Unity 和 git</a> post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.</em></p>
<p><em>This is the translated version of my 2020 <a href="../unity-git/">Unity 和 git</a> post with some minor updates and all the Chinese reference links removed. Sorry I am not a fluent English speaker. Please leave a comment if something seems wrong/out-dated. Thank you.</em></p>
<p>I&rsquo;ve been using Git to version control Unity projects for a while now. Recently, my company open-sourced our Unity builder <a href="https://gitlab.com/rayark/mimiron-lite">mimiron-lite</a>, along with a new set of Git configuration files that are now being used as Git configuration standard of my company . I would like to share some insights regarding the thought process behind these configuration files and the experiences of using Git.</p>
<p>If you prefer a TL;DR, you can directly download the Git configuration files. The latest configuration now includes an updated <code>.gitignore</code> for Wwise, available at: <a href="https://github.com/FrankNine/RepoConfig">https://github.com/FrankNine/RepoConfig</a>.<br>
This repo was forked from: <a href="https://github.com/rayark/repo-config">https://github.com/rayark/repo-config</a>.<br>
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-mobile-optimization-prologue/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ <h4 id="一分證據說一分話-給我用-profiler">一分證據說一分話 (
<h4 id="cp-值高的先做-go-after-the-low-hanging-fruit">C/P 值高的先做 (Go after the low-hanging fruit)</h4>
<p>絕大多數時候浪費的效能都是在很好解決的東西上面,當你想要繼續往上推就可能會越來越難做,效益也越來越差。當然要判斷哪邊 C/P 值高還是要靠 Profiler ,所以還是再說一次 Profiler 很重要。</p>
<h4 id="不一定要最佳化所有東西">不一定要最佳化「所有」東西</h4>
<p>程式的執行效率只是程式品質眾多面向的其中一個,有的時候別的東西的價值可能會比效率重要。Unity 社群裡面常常在爭執的 <a href="../unity-foreach">foreach 問題</a>就是一個很好的例子,有些人會覺得那 24 bytes 的 GC Allocation 實在是不能忍,要除惡務盡把所有 foreach 都改成 for 。但是我覺得我會比較看重可讀性而不去把它改成 for ,這當然沒有一定標準,只是想提醒一下執行效率不是程式的一切、可讀性、可維護性等等也是很重要的。最佳化可能會犧牲它們,犧牲它們之前想想這個交易划不划算。</p>
<p>程式的執行效率只是程式品質眾多面向的其中一個,有的時候別的東西的價值可能會比效率重要。Unity 社群裡面常常在爭執的 <a href="../unity-foreach/">foreach 問題</a>就是一個很好的例子,有些人會覺得那 24 bytes 的 GC Allocation 實在是不能忍,要除惡務盡把所有 foreach 都改成 for 。但是我覺得我會比較看重可讀性而不去把它改成 for ,這當然沒有一定標準,只是想提醒一下執行效率不是程式的一切、可讀性、可維護性等等也是很重要的。最佳化可能會犧牲它們,犧牲它們之前想想這個交易划不划算。</p>
<p>除了哪種最佳化要不要做之外,也可以考慮哪邊要做哪邊不做。通常 Gameplay 是最需要效率的標準比較高,在時間不夠的情況下當然是先優化 Gameplay 。反過來選單之類的就不那麼需要效能,犧牲一點效率讓讓選單部分的程式保有更多的可讀、可維護性也許是比較好的策略。</p>
<h4 id="確定最佳化的目標">確定最佳化的目標</h4>
<p>在最佳化開始之前最好先確定你的目標,像是在哪種規格上要跑到多少 FPS 。達到目標之後的最佳化其實就沒有甚麼意義了,如果不會 Frame drop ,跑再快使用者的感受到的都差不多。可以定像是記憶體不能接近 256MB (實體記憶體 512 MB 的機器單一 App 能用的記憶體大概一半),或是 OpenGL ES2 (放棄 ETC2 壓縮格式)。如果對規格沒有想法,可以想說自己的遊戲大概幾年前的主力手機應該要能玩,像如果抓四年前,那就是看 Galaxy S3 跟 iPhone 5 的規格。如果你曾經上架過遊戲,Google 跟 Apple 的後台都有使用者用的機器分布,參考這項資料照顧一下既有玩家也是很重要的。</p>
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-on-ios9/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ <h3 id="app-transport-security">App Transport Security</h3>
<p><a href="https://developers.facebook.com/docs/ios/ios9">https://developers.facebook.com/docs/ios/ios9</a></p>
<p>我本來以為 Prime31 的作者會在新版本裡面加入修改 info.plist 的選項,不過他老兄很霸氣的說應該是 Facebook 的責任要自己把連線修成 HTTPS ,所以現在還是得自己加:</p>
<p><a href="http://support.prime31.com/22777/social-networking-plugin-on-ios-9?show=22777#q22777">http://support.prime31.com/22777/social-networking-plugin-on-ios-9?show=22777#q22777</a></p>
<p>以我之前的 <a href="../configure-xcode-project-with-postprocessbuild">Xcode Postprocessing 教學</a> 的當作基底,可以用完全一樣的 PlistDocument 操作把這些設定加到 info.plist 。Code 大概像是:</p>
<p>以我之前的 <a href="../configure-xcode-project-with-postprocessbuild/">Xcode Postprocessing 教學</a> 的當作基底,可以用完全一樣的 PlistDocument 操作把這些設定加到 info.plist 。Code 大概像是:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-profiling-tools/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ <h4 id="共用控制-ui">共用控制 UI</h4>
</span></span><span class="line"><span class="cl">adb forward tcp:34999 localabstract:Unity-&lt;你的遊戲 bundle ID&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>另一個方法是上一篇有提到的改用 <a href="../adb-tcp-mode">TCPIP 模式</a></p>
</div><p>另一個方法是上一篇有提到的改用 <a href="../adb-tcp-mode/">TCPIP 模式</a></p>
<p>剩下的是控制 Frame 的 UI</p>
<p>Clear 會把目前保存的資料都清除,左箭頭會移動到上一個 Frame ,右箭頭會移動到下一個 Frame ,Current 會移動到最新的 Frame 。不過最常用的是直接在圖表上點滑鼠,就可以直接定在想看的 Frame 上,如果是編輯器環境的話點下去會同時暫停遊戲。<br>
<img alt="Timeline" src="/images/unity-profiling-tools/timeline.png"></p>
Expand Down
2 changes: 1 addition & 1 deletion posts/unity-unit-testing-in-resharper-and-rider/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
<blockquote>
<p>To me, legacy code is simply code without tests</p>
</blockquote>
<p>雖然我認同書中闡述的概念,但是因為前東家不只自製引擎,還<a href="../visual-concepts-1">自製語言</a>,改造過的 make 沒有文件根本不知道要怎麼拿去編譯遊戲本體以外的程式。所以到離職前都還沒有成功寫過一個測試。</p>
<p>雖然我認同書中闡述的概念,但是因為前東家不只自製引擎,還<a href="../visual-concepts-1/">自製語言</a>,改造過的 make 沒有文件根本不知道要怎麼拿去編譯遊戲本體以外的程式。所以到離職前都還沒有成功寫過一個測試。</p>
<p>回台灣之後就一直是在使用 Unity,一開始 Unity 是沒有測試這個概念的。到 Unity 4 末期才開始有 <a href="https://assetstore.unity.com/packages/tools/utilities/unity-test-tools-13802">Unity Test Tool</a> 以 Asset Store 獨立套件存在(現已下架),之後慢慢成為 Unity 5 的一部分。Unity 官方也有釋出一些文件倡導該怎麼使用:</p>
<ul>
<li>
Expand Down

0 comments on commit 016efdf

Please sign in to comment.