テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityでunsafeを使って直接メモリ制御を行う

unsafeとは、メモリを直接扱う事を可能にする機能だ。メモリ管理とは具体的にはポインタを指す。Unityの使用しているmonoはマネージドコード(メモリ管理を自動で行う)のなので、ポインタを操作する事は本来出来ないが(せいぜいref等の直接参照がある程度)、unsafeを使用することで直接ポインタを操作することが出来る。

C#入門 第21回 ポインタを使用できるunsafe

Unityでは基本的にunsafeが許可されていない。ただしその制約はUnity外のプロジェクトには適応されないため、Unity外でDLLを作成することで回避が可能だ。

追記
そんな事をしなくてももっと簡単な方法があった。

アドレスの表示

以下引用

Unityでは、プロジェクトのassetsフォルダ内に「smcs.rsp」というファイルを作成。
この中に「-unsafe」と記述。
これは、ビルド時のオプションやプリプロセッサ指定を記述できるようです。


  1. 新しくソリューションを作成
    Monodevelopの[File] > [New] > [Solution] を開き、C# Libraryを選択。
  2. ソリューションのunsafeコードの使用を許可する
    Project>[Solution Option]を開き、[Build] > [General] で
    [allow unsafe code] にチェックを入れる。
  3. DLL出力先をUnityのAssets以下に設定
    Project>[Solution Option]を開き、[Build] > [output] で
    [output path]をassets以下に設定。
unsafeコードは基本的に使用しない方が良いが、状況によりかなりパフォーマンスに差が出る(例えばマーシャル回避やバイト処理等)。本当に必要な場合は使うのが良さそうだ。