Unity使用NuGet

在Visual Studio下有方便的NuGet package manager 管理套件,所以可以很方便的安裝和管理NuGet套件,但是對Unity C# 專案來說,就不能直接使用NuGet package manager來管理套件。

幸好有第三方管理套件,NuGetForUnity 可以使用。

以下說明它的使用方式

  1. 進入Releas找到的它的unitypackage檔案下載(目前是NuGetForUnity.4.0.2.unitypackage
    這個版本)。
  2. 將下載好的unitypackage檔案拖入你的專案,按下import,便會開始匯入(import) NuGetForUnity到你的專案中。
    • 說明如何匯入NuGetForUnity
  3. 之後你就可以在上方選單找到NuGet了
    • 從選單打開NuGet

委派 Delegate

委派:delegate

  • 它的本質上是一個Class,主要用來定義method的類型
  • 可以把它想像為一個定義method容器,用來儲存要傳遞的method。
  • 使用委派讓你可以在呼叫method先處理一些邏輯,當這些邏輯處理完之後,在傳入這些method。

以下是他的語法

1
存取修飾詞 delegate 返回值 委派名(參數列表);
  • 如果沒寫存取修飾詞的話,預設為public的,
  • 若取修飾詞寫為private的話,則其他namespace不可以使用
  • 委派的method參數必須要對應

宣告範例

1
2
3
4
5
// 定義了一個無參無返回值容器 MyFun
delegate void MyFun();

// 定義了一個返回值為int,有一個int參數的委派容器
delegate int MyFun2(int a);

使用範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
delegate void MyFun();
delegate int MyFun2(int a);
class Program
{
static void Main()
{
Console.WriteLine("委派");

// 裝載method的容器
MyFun f = new MyFun(Fun);
// 呼叫容器裡面的method
f.Invoke();

// 簡化寫法,與f的方式一樣
MyFun f2 = Fun;
f2();

// 容器與委派的method參數必須要對應
MyFunc2 f3 = Fun2;
f3(1);
}

static void Fun()
{
Console.WriteLine("123456");
}

static int Fun2(int value)
{
Console.WriteLine(value);
return value;
}
}

C#預設先定義的委派

  • Action:是一個無參無返回值的委派
  • Func:一個無參數,但有一個返回泛型TResult的委派
  • Action(T obj)可以傳多個參數(最多有16個,是使用overload的方式),無返回的委派
  • Func<in T, out TResult>(T arg); 可以傳多個參數,且有一個返回泛型TResult的委派
  • 記憶方式:Func是有返回值的委託,而Action則是不會返回值的委託

Action例子

1
2
3
4
5
6
7
Action<int, string> action = FunTest;

static void FunTest(int a, string b)
{
// do something...
}

Func例子

1
2
3
4
5
6
7
Func<int, int> func = FunTest2;

static int FunTest2(int value)
{
Console.WriteLine(value);
return value;
}

Hexo添加Sitemap,讓Google能搜尋到自己的Hexo Blog

以下是操作步驟:

  1. 安裝Hexo sitemap套件
    1
    $ npm install hexo-generator-sitemap --save
  2. 為Hexo加入sitemap設定
    ˋ找到Hexo專案底下的 _config.yml
    1
    2
    sitemap:
    path: sitemap.xml
  3. 測試是否有建立sitemap檔案,在終端機輸入
    1
    $ hexo s
  4. 如果成功的話,可以在 /sitemap.xml 找到產生的sitemap
  1. 編譯並發布
  • hexo g -d
  1. 提交到Google Search Console
  • 進入 Google Search Console
  • 在網址前置字元那邊輸入Blog的網址,如圖:
  • 在左側找到Sitemap,點擊進入,輸入sitemap.xml,並提交,就完成了。如圖:
  1. 如果網站沒有驗證擁有權的話,會需要驗證,可以在Hexo啟用Google analytics,或是使用HTML檔案的方式驗證。
  2. 使用HTML檔案的方式驗證的話,要先下載HTML檔案,放到Hexo Blog目錄下,可以參考:Hexo 加入自訂的 HTML頁面

Mac 顯示所有隱藏檔案

在 Terminal 中輸入以下指令以顯示所有隱藏文件:

1
defaults write com.apple.finder AppleShowAllFiles -bool true

然後,在 Terminal 中輸入以下指令以重新啟動 Finder:

1
killall Finder

這樣就可以顯示所有隱藏文件了。

Eclipse 在開啟時卡在Maven build的解決方法

如果開啟Eclipse時,發現會卡住,打不開,而關閉Eclipse時,顯示Maven build的訊息,卡住Eclipse,如圖:

以下是處理步驟:

  1. 先將Eclipse關閉,如果關不掉,使用強制關閉的方式關閉。
  2. 然後移動到程式碼放置的位置,找到.metadata資料夾,把它移走,放到別的地方,(或者是直接刪除)
  3. 之後再開啟Eclipse,然後在重新import專案。
  4. 這時Eclipse會自動重新建立專案。

Mac 截取螢幕圖片

  • 同時按下這三個按鍵:Shift+Command+4,就可以讓你使用滑鼠選擇擷取螢幕某個部分的圖片,

    • Windows中則是按下windows+Shift+s
  • 同時按下這三個按鍵:Shift+Command+3則是擷取整張桌面的圖。

DELETE與TRUNCATE的區別

DELETE與TRUNCATE的區別

  • DELETE
    • 是DML語句,可以ROLLBACK,
    • 可以有條件的刪除
    • 如果刪除較大量的資料,DELETE效率較差
  • TRUNCATE
    • 是DDL語句,立即生效,無法ROLLBACK
    • TRUNCATE將TABLE中的資料全部刪除

如果刪除較大量的資料TRUNCATE效率較好

在Chrome中抓取整個網頁截圖

打開 DevTools,在右邊找到 Run command

點擊之後,輸入Capture full size screenshot
就可以抓取該網頁的截圖了

Hexo 加入自訂的 HTML頁面

有時候想要記錄一些javascript特效或是小工具時,在Hexo會需要自訂自己的HTML頁面,以下是操作步驟

  1. 在Hexo專案下面找到 source 資料夾,新建一個要放自訂HTML的資料夾。
    我這邊是放html/tools/html_encode

  2. 在配置檔案_config.yml中,設定跳過渲染

    1. 單個檔案
      1
      2
      skip_render:
      - 'html/***.html'
    2. 跳過該資料夾下的所有檔案
      1
      2
      skip_render:
      - 'html/*'
    3. 跳過該資料夾下所有檔案以及子資料夾
      1
      2
      skip_render:
      - 'html/**'
  3. 之後使用指令清除暫存並開始Server

    1
    2
    3
    hexo clean
    hexo g
    hexo s
  4. 訪問網址驗證成果,它會以你資料夾的結構去建立URL,例如我的資料夾結構是html/tools/html_encode,因此在訪問時,就是訪問:
    http://localhost:4000/html/tools/html_encode/index.html

  5. 如果想要在原先的blog中加入這個自訂的HTML頁面,並使用Tag的話,推薦使用 iframe 的方式

    1
    2
    <iframe  src='/html/tools/html_encode/index.html' scrolling="no" frameborder="0" width='100%' height='800px' style='margin-top:12px'>
    </iframe>

    結果如下: