Alpaca Tech Blog

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

【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等、

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

 

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

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

2017年Unity活動まとめ

 

自分を奮い立たせるために1年のUnity活動まとめ書きます!


1月

RPGみたいなの

冬休みに作成してた、
あることしてダメージを与えるRPG風なやつ。
パラメータをどう調整しようか迷ってるうちに開発保留状態に。
完成させたい作品

 

2月

Hololensハッカソンに参加

twitter.com

後で作ってもらったスクショ。地面適当にしてたから浮いてる。

f:id:alpacatech:20171229230458p:plain

アルパカ動いた楽しい。

やっててよかったUnity

 

Hololensはすごい体験でした。

視野角や価格の問題がクリアできれば、生活の一部に入るかもしれない。

 

3月

twitterには活動報告無かった。

会社でVR周りのやつ試してたかもしれない。

鉄骨渡ったり、スペースハリアーみたいなのとか作ってた。

 

4月

unity1week初参加

unity1weekなるものを知ったので後半から参加

twitter.com

適当にアセット放り込んで作った。

ゲーム性無い感じだったのでとっても悔しかった思い。


5月

Unite2017 Tokyoでボランティアスタッフ参加

ボランティアスタッフは、二人一組シフトで、

案内する仕事とセッション見に行くを交互にやる感じ。

twitter.com

お土産いっぱいもらえた。
懇親会に行ったのですが、

会社の名刺ではUnity話が伸びないから、
個人活動で頑張っていきたいと思いました。

 

 

unity1week ころがり勇者

4月のゲー無を反省してゲームとして楽しめるもの作った。

twitter.com

ランク入り出来なかったけど、

プレイしてくださった方にはとても評判良い。

ありがとうございます。

 

6月

unity1week パズル

twitter.com

パズルゲームに挑戦。

パズル+パズルで難しめのゲームになってしまった。反省。

デザイン手伝ってもらったのでいろいろ学べた。

 

7月

unity1week カジュアルゲーム

twitter.com

カジュアルゲームに挑戦。

雑に作った運ゲーでないゲームデザイン調整できたので個人的に好き。

WebGLがパーティクルに弱いので泣く泣くゲームテンポ下げたのは失敗。

 

 

8月

unity1week レースゲーム

twitter.com

レースゲーム作成に挑戦。

風呂敷広げすぎて細かいところ間に合わなかった。

これもプレイしてくれた方からいい反応。ありがとうございます。

 

9月

シェーダー書いたり

シェーダー書いたり、

ShaderForgeで初ノードベースやってみたり

twitter.com

 

アルパカゲーム作りたかったけど、長く遊ばせる調整難しいエターなる。

twitter.com

 

10月

活動報告無し

 

11月

unity1week シューティング

イワシネタから勢いでシューティング。

twitter.com

弾幕や配置エディタとか作ってがんばりました。

 

www.twitch.tv

実況でプレイしてもらってました超うれしい。

説明不足でレーザーボタンとか押されてなかったので、

ゲーム内で説明書くの大事なのを学んだ。

 

12月

ハンバーガーつむやつ

スクショ映えしそう

SNS共有方法覚えたい。

 

 

 

ファンネルゲーム

ゲームを派手にするのはパーティクルとか活用すればいいのですが、

ゲームバランス調整や視認性考えると難しくなるので地味目に作ってました。

これを打破したい為に、

板野サーカスやホーミングレーザーやファンネルみたいな見た目映えて、

ゲームとしても何とかなるやつ作りたかったのに挑戦。

まだ問題あるけど、

今年いろいろ作ったけど、これが一番ふぁぼられました。

これに関しては、あまりボリュームを考えてないので、

来年アプリデビューとして考えてます。

 

 

総括

今年は、ハッカソン、Unite参加等でいろいろUnityできました。

特にunity1weekのおかげで、

作品を「完成させる」「世に出す」ことの大切さを教えてもらいました。

現状で満足せず、

アプリ化で世界に向け来年も頑張っていきたい所存です。

 

 

来年もよろしくお願い致します。