CLRを使用して統一するためにc#でc ++コードを使用したいと思います。
プログラムはユニティの外では正しく動作しますが、エンジンの内部ではエラーが発生します。
"cs0227:安全でないコードでは、「安全でない」コマンドラインオプションを指定する必要があります"
プロジェクトはVisualStudioで正常にビルドされるため(エラーや警告なしで)、私は本当に混乱しています。 "allownsafe"ボタンがアクティブになっています。
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class newspawn_real : MonoBehaviour {
void Start () {
unsafe
{
fixed (int * p = &bam[0, 0, 0])
{
CppWrapper.CppWrapperClass controlCpp = new CppWrapper.CppWrapperClass();
controlCpp.allocate_both();
controlCpp.fill_both();
controlCpp.fill_wrapper();
}
Unityでunsafe
コードを明示的に有効にする必要があります。以下の手順に従ってください。
1。最初のステップ、Api互換性レベルを。NET 2.0サブセットに変更します。
2。 <Project Path>/Assets
ディレクトリにファイルを作成し、smcs.rspという名前を付けてから、そのファイル内に-unsafe
を配置します。そのファイルを保存して閉じます。
Visual StudioとUnityを閉じて再度開きます。両方を再起動する必要があります。
これを実行してUnityとVisualStudioの両方を再起動した後でも、問題は解決しないことに注意してください 名前の変更smcs.rspファイルからcsc.rsp、またはgmcs.rsp動作するものが得られるまで、毎回再起動します。ただし、smcs.rspは初めて実行する必要があります。
この後にコンパイルされる単純なC#の安全でないコード。
public class newspawn_real : MonoBehaviour
{
unsafe static void SquarePtrParam(int* p)
{
*p *= *p;
}
void Start()
{
unsafe
{
int i = 5;
// Unsafe method: uses address-of operator (&):
SquarePtrParam(&i);
Debug.Log(i);
}
}
}
編集:
Unityの最新バージョンの場合、ファイル名はmcs.rspである必要があります。他のすべては同じままです。