切傷甲 2021/06/30 23:26

unityで簡単なゲームを作って練習したので、その備忘録。ちなみに未完成。

ゲームを作れるようになるため、ゲームを作りました。


もみもみ、もみもみもみ、もーみもみ。

 ゲームを作るにはゲームを作るための知識が必要、と言う事で軽く簡単なゲームを作る事にしました。ちなみにunity使ってます。

 まだ完成してないのですが、とりあえずここまでなら素人でも調べながらで作れると言うワケです。この後はエンディングの分岐や、文字の表示等を実装する予定です。

 でもたったコレだけなのに、かなり疲れました。分からない事が多すぎる~! 日を置くと多分忘れるので、使った関数なんかを備忘録としてまとめておく事にします。も~最後の方なんかコードが入り組みすぎて大変だったんだから。

 ちなみに下記サンプルコードの自分で名前を定義する変数なんかは、全てひらがなで表記してます。サンプルコードとかで良く見られる

gameobject = GAMEOBJECT.GetComponent<object>().objector;  

みたいな奴はどこからどこまでが開発環境側で定義された単語で、どれが自分で定義した変数名や関数名なのかわかりにくいので、ハッキリわかりやすくするため自分定義の変数名は全て妙なひらがなになってます。本当は半角英文字使います。逆に読みにくいかも……。


こいつはサムネイル用の画像でござい。

インスペクタで変数とかいじる方法「[SerializeField]」

[SerializeField] int ちんこ;

いじりたい変数等の宣言時に、行頭に[SerializeField]これ書いとく。それだけ。

コンポーネント取得「.GetComponent<>()」

	//インスペクタでオブジェクト手動取得。
[SerializeField] GameObject うんち;
	//Transformコンポーネントを取得するための格納先。
Transform ちんこ;

	//こいつで取得じゃ~。
ちんこ = うんち.GetComponent<Transform>();

オブジェクトのコンポーネントをシコシコいじりてぇな~、と思ったらこれやる。()の後に「.」を打って続けて変数名や関数名を書けば、そのコンポーネント内で使ってる変数関数を呼び出せる。

オブジェクトの表示非表示「.SetActive()」

[SerializeField] GameObject ぼいん;	//手動で取得。
ぼいん.SetActive(false);	//引数にfalseで消す。
ぼいん.SetActive(true);	//引数にtrueで表示する。

これが一番楽で一番乱暴なやり方。色々細かい注意点があるらしいが、めんどくさくて調べてませ~ん。

アニメレイヤーを取得。「.GetLayerIndex()」

	//手動で取得。
[SerializeField] GameObject ぷるん;
	//アニメーターコンポーネント取得用の格納先変数。
Animator うごいちゃう;
	//アニメレイヤー格納先変数。
int ぱいぱい;

	//コンポーネント入れてる。
うごいちゃう = ぷるん.GetComponent<Animator>();	
ぱいぱい = うごいちゃう.GetLayerIndex("ぷるるんあにめ");


アニメレイヤーってのはコイツの事。引数にレイヤーの名前を一字一句間違いなく記入すると、そのレイヤーの番号を調べてくれる。最初から番号を知っているなら、やる必要無いんでしょうが。

アニメーターのレイヤーウェイト操作「.SetLayerWeight()」

うごいちゃう.SetLayerWeight(ぱいぱい, 1.0f);

レイヤーのウェイトは0~1の間で表され、1だとそのレイヤーを完全に上書きもしくは乗算しちゃう。第一引数にレイヤー番号、第二引数にウェイト量を指定する。

指定アニメレイヤーの再生。「.Play()」

うごいちゃう.Play("ぷるるんあにめ", ぱいぱい, 0f);


第一引数にステート名、第二引数にレイヤー番号、第三引数に再生位置を指定。再生位置はたしかえーと、0~1の間の数値だった気がする。0だと初めからで、0.5だと真ん中から、と言う感じ。再生中にこの関数を再び呼び出すと、指定位置から再生され直しになります。

ステート再生状態を知る。「.GetCurrentAnimatorStateInfo()」

	//手動で取得。
[SerializeField] GameObject びくびく;
	//アニメーターコンポーネント取得用。
Animator もこもこ;
	//取得した再生時間を格納するための変数。
int ずるずる;

	//アニメーターコンポーネント取得。
もこもこ = びくびく.GetComponent<Animator>();
ずるずる = もこもこ.GetCurrentAnimatorStateInfo( レイヤ番号 ).normalizedTime;

Get~の引数に再生状況を知りたいアニメーションレイヤーのレイヤ番号を入れる。変数「ずるずる」には指定レイヤの再生位置が0~1の間の数値で格納されます。0が格納されれば再生されておらず、0.5が格納されれば半分まで再生されており、1が格納されれば再生しきってる状態。アニメをループするよう設定してるとこの辺どーなっちまうんだ!?

画像を削ってゲージみたいにする「.fillAmount()」

	//重要。これないとImageいじれない。
uzing UnityEngine.UI;
~ 中略 ~
	//宣言だけ。インスペクタから手動で取得。
[SerializeField] GameObject ぶらりんちょ;
	//Imageコンポーネントをここに取得。
Image ぶらぶら;

	//Imageを取得。
ぶらぶら = ぶらりんちょ.GetComponent<Image>();
	//こいつで動かしてる。0~1.0の間。
ぶらぶら.fillAmount += 0.1f;

他にもゲージの実装は方法があるらしいのですが、コイツは縦横のゲージに加えて円グラフゲージも簡単に実装できるんで、非常に便利。ピクミンのま~るいHPゲージみたいな奴をこれで楽に作れる。でも曲がったりうねったりしてるゲージは難しいかも。

固定fpsでUpdateする「FixedUpdate()」

private void FixedUpdate(){ 更新処理 }

 こいつに更新処理描きゃ~良い。fpsはunityのプロジェクト設定で変更可能。

乱数取得「Random.Range()」

int びんびん;

	//1~10の数値をランダムで変数に格納。
びんびん = Random.Range(1, 11);

 第一引数に取得する乱数の最小値を、第二引数に最大値に1足した数値を指定。
 なんで1足すんじゃい、わかりにくいんじゃい。

デバッグログに文字表示「Debug.Log()」

Debag.Log("うひょお~~!");

何かと便利。関数がちゃんと呼び出されてるかとか、ifがちゃんと実行されてるかどうか、などを調べるのに使える。



 こんなトコです。unityでバリバリとゲームを作っている人には今更判り切った事ばかりでしょうが、プログラミング初心者な自分にはこれらを調べるだけでも丸一日二日掛かってました。ちかれた……。リファレンスが読みにくいし全部日本語化されてねーしで、もうヘトヘトですわ。
 でも多分忘れるので、その時にこの記事見返す事にします。

漫画の進捗

 漫画の方はようやくほぼ全てのペン入れを終了して、チョコチョコ下地塗りをやり始めている所です。

 六月は気圧の影響で毎年頭が痛くなってヘバり気味だったので、今年は体調が悪くても出来る下地塗りの作業をこのタイミングに残していました。

 ですが思ったより頭が痛くならないまま六月を終えてしまうので、とりあえず元気なまま下地塗りを続ける事にします。嬉しい気持ち反面、肩透かしを食らって妙な気分。

 今回制作してます修道女シリーズの第七章最後の最後で、以前モブキャラとして描いた上司っぽい修道女の女の人のサービスシーンがあります。

 せっかく登場させたので、彼女には最終章あたりですんごい目に遭ってもらう事にします。楽しみだねぇ。

 ちなみに三十路を過ぎた大人の女性と言う設定なので、下のお毛毛を生やしちゃいました。すまん、でもつい……。


 この人です。第七章でも回想シーン中に美少女のお尻をペンペンしてる、怖い人です。

 こんな感じ~。シャワァァ~~……。

雑談

 unityにアニメーションデータぶち込むために使ってるSpriteStudioですが、unity内での取り回しが自分には難しい、と言うか面倒臭い。アレ駄目なの? コレも駄目? えーんうそー! みたいな具合で一日を無駄に消費し続けてしまう。面倒くさいよ~。

 オブジェクトの表示非表示も本当はSpriteStudio側で透明度を変化させる事で実装しようとしたのですが、なんだか上手く行きません。なので仕方が無く差分パーツのオブジェクトを強○的に機能停止させて非表示にしてました。

 出来る事ならばアニメーションデータ作りもunity内で完結させたいのですが、unityは画像の自由変形が簡単には出来ないみたいです。スクリプトで色々いじくれば出来るみたいなんですが、自分には難しいよ~。

 幸いな事に、自由変形機能を搭載したアニメーションデータ作成ツールがunityの有料アセットで存在するみたいなので、いざとなったらそれ買う事にします。か、金が……、とほほ……。

 今は少し疲れたのでしばらく漫画の作業に戻りますが、ちょくちょくこの胸おさわりゲームを作り続けて完成したら、このブログで無料公開する事にします。その頃にはノウハウが溜まっているでしょうから、そこで本格的に機械○おさわりゲームに着手する事にします。

 やばいなー、ゲームは想像以上に作るの大変だぞ。
 こりゃ気長にやってく必要ありそうだ。

月別アーカイブ

限定特典から探す

記事を検索