Alpaca Soft Blog

ゲーム作る系 草食動物の備忘録

【Unity】メニューを追加する方法+セーブフォルダを開く

 

スクリプト生成

Editorフォルダを作成。
その中にスクリプト生成。

 

OpenSaveData(persistentDataPath)Folder

 

Editor関連はEditorフォルダに入れないと

Editor以外でのビルドエラー等が発生します。

 

コンポーネントのメニューに追加する

 [ContextMenu("TestFunction")]

public void TestFunction()

{

    // 処理

}

 

と記述することでコンポーネントの歯車からメソッドを呼び出すことができます。

f:id:alpacatech:20190709180303p:plain

 

UnityEditorのメニューに追加する

[MenuItem("SaveData/OpenPersistentDataPath")]

public void Foo()

{

処理

}
と記述することでメニューが追加され、選ぶと内部の処理が実行されます。

f:id:alpacatech:20180427191359p:plain

  

セーブデータフォルダを開く

Application.persistentDataPath

フォルダを開く場合は、以下の通りです。

 

System.Diagnostics.Process.Start(Application.persistentDataPath);

エクスプローラでフォルダがオープンされます

 

Windows10で確認。

Macは未確認

 

 

【Unity】コルーチンの中でコルーチンを呼ぼうとしてミスった

コルーチン処理を分ける(コルーチンの中でコルーチンを呼ぶ)

まずは正解パターンから。 

void Start()
{
	StartCoroutine(coMain());
}

IEnumerator coMain()
{
	for(int i=0;i<3;++i)
	{
		yield return coSub();
	}
	yield break;
}

IEnumerator coSub()
{
	Debug.Log("Sub.Start");
	yield return new WaitForSeconds(1.0f);
	Debug.Log("Sub.End");
}

こう書くことで、コルーチンの処理を分割できます。

結果は、「"Sub.Start"→1秒待機→"Sub.End"」を3回繰り返します。

 

利用できるのはUnity5.3から?

参考

Unity5.3から、コルーチン内でコルーチンを呼び出しやすくなった | Unity用ビジュアルノベルツール「宴」

 

間違えた

サブコルーチン?を呼ぶときに

    yield return coSub();

と書かずに、

    coSub();

と書くと中のWaitForSeconds(1.0f) は機能せずに戻ってきました。

    while(true)
    {
        coSub();
    }

と書くとフリーズします(waitが一切ない永久ループ)

気づくまでフリーズ再起動祭りでした。

 


おまけ

フレーム単位で待機したい
IEnumerator WaitFixedFrame(int frame)
{
    for(int i = 0; i < frame; ++i)
    {
        yield return new WaitForFixedUpdate();
    }
}

...
yield return WaitFixedFrame(15);	//	15F待機

これやりたかった。

【Unity】Inputに関する備忘録

随時更新予定

 

マウス

座標取得

Vector3 mousePosition = Input.mousePosition;
範囲は、

x ... 0~Screen.width

y ... 0~Screen.height

 

スマホ等でマルチタッチ環境の場合、タッチしている点群の中央が座標となります。

例)2点タッチした場合

1点目(100,200)

2点目(200,400)

座標 = (150,300)

 

クリック

if(Input.GetMouseButtonDown(0)){

    //  左クリックされた

}

Input.GetMouseButton(0);  // 左ボタン押されている間

Input.GetMouseButtonDown(0); // 左ボタン押した瞬間

Input.GetMouseButtonUp(0); // 左ボタン離した瞬間

 

 

UIボタンを押した場合は処理しない

// uGUIでボタンが押されているか

if(EventSystem.current.IsPointerOverGameObject()){
    return;
}

 // マウスボタン処理

...

 

参考

nn-hokuson.hatenablog.com

 

 

 

ジョイスティック、キーボード

十字キー取得 

var ix = Input.GetAxis("Horizontal");  // 横軸取得
var iy = Input.GetAxis("Vertical");   // 縦軸取得

-1.0 ~ +1.0の範囲で戻ってきます。

  

カーソルキーやWASD入力が場合もっさり動く

メニューのEdit->ProjectSettings->Input で

Gravity = 15

Sensitivity = 15

あたりにするとキビキビ動きます。

f:id:alpacatech:20171208163307p:plain

参考

tsubakit1.hateblo.jp

 

 

ボタン

if( Input.GetButtonDown("Fire1") )

{

// Fire1ボタンが押された

}

 

Fire1

Fire2

Fire3

Jump    

 

押した瞬間(1フレーム)

Input.GetButtonDown

Input.GetKeyDown

Input.GetMouseButtonDown

押している

Input.GetButton

Input.GetKey

Input.GetMouseButton

離した瞬間(1フレーム)

Input.GetButtonUp

Input.GetKeyUp

Input.GetMouseButtonUp

 

 

追加予定

タッチ

オブジェクトをクリック

 

 

 

 

 

 

 

 

 

【C#】 CSVファイルを読み込む(ダブルクォーテーション、文字コード指定対応)

CSVファイルについて

CSVファイルは、基本的にカンマ区切りのファイルですが、
細かいルールがあり

・区切り文字がカンマでなくタブの場合もある(TSV)

・区切り文字を含む場合は、文字列をダブルクォーテーション""で囲む

・様々な文字コードutf-8,sjis等々)

等と自前で対応するには大変です。

Comma-Separated Values - Wikipedia


今回は、Microsoft.VisualBasic.FileIO を利用して読み込みました。

手順

1.参照を追加

プロジェクトの参照を右クリック

f:id:alpacatech:20180312182115p:plain

visualbasic...で検索

f:id:alpacatech:20180312182118p:plain

チェックを入れてOK


2.クラス書く

CsvFile

 

3.使い方

 

CsvFileSample

 

参考サイト 

webbibouroku.com

 

 

CreateWindowで失敗する

CreateWindowで失敗

Windows7では問題なく起動していたのに、

Windows10でCreateWindowで失敗する。

 HWNDはNULLが戻り、

 GetLastError()は0で、エラー内容が分からない。

 という状況。

ハマったのでメモ。

 

原因

CreateWindowに渡すコールバック関数の引数が、

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

でなく、

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, UINT wParam, UINT lParam);

になっていました。

 

HWND,UINT,WPARAM,LPARAM でなく 

HWND,UINT,UINT,UINT の場合、

Windows10からCreateWindowで失敗するみたいです。

 

後者は、ネットや書籍のサンプルで稀に見かけます。

 

新規プロジェクト作成時にアセット一括追加

Unityで新規プロジェクト作成する際、

[Add Asset Package] のボタンを押すと、 f:id:alpacatech:20180120172815p:plain

 

インポートしたいアセット一覧が出ます、

(※PCでダウンロード済のアセットのみ表示されるようです)

f:id:alpacatech:20180120172822p:plain

 

チェックを入れてCreateProjectで、

最初からインポートされます。

 

AssetStoreウィンドを開かなくても

TextMeshProやDoTween等、

定番なものを一括でインポートできるので便利でした。

 

気軽にテストプロジェクト作成できるし、

ゲームジャム時にスタートダッシュできます。