今週のお題「当てる」 | Unity 1週間ゲームジャム #unity1week https://t.co/2uhr9rdqDr
— naichi (@naichilab) 2018年2月18日
お題出ました。ひさびさの動詞です〜。今週もよろしくお願いします!
Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
今回も参加させていただきます。
前回は見た目だけのクソゲーを作ってしまいました。
追記
レビューしてくださってました!
お二方とも全て遊んでいるのすごいですね!遊んでくださるのは嬉しいです。
考える
2Dゲームを作ってみたい。
キャラが前面に出るような見た目がいい。(私のセイみたいな)
Live2Dを使いたい。
色々探しましたがUnityで自由に使えそうなイケメンモデルがなかったのでlive2Dはやめます。
SDKのインポート~モデルを配置 | Live2D Manuals & Tutorials
サンプルモデル集 | Live2D Manuals & Tutorials
アセットストアにもイケメンはいなかった。まあただでイケメンがいるわけないよな
結局おそ松さん第2期2クール17話の「戒め」を元にしたゲームを作ることにしました。
おそ松さん 第17話「UMA探検隊③」「戒め!」「旅館」「デリバリーコント」 アニメ/動画 - ニコニコ動画
発想のきっかけはバスから見えた自販機。自販機といえば当たる。当たり付き自販機といえばそんな話がおそ松さんにあったな〜って感じです。
お話としては、夜ご飯が焼肉になったのに、昼間からいいことが起きすぎて「幸せ借金」がかさんで怖い。
幸せ借金がたまると不幸返済をしないといけない。
戒めていかないと。自ら悪いことを起こして、バランス取っていかないと
ということで、自販機で当たりが出たら十四松のパンチを自ら受けて、不幸返済をし、幸せ借金と不幸返済ゲージのバランスを取るというわかりにくいゲームです。
アセット
Unity公式が出している2D Game Kitを使うことにしました。
日本語の記事が全然ないので動画見ました。
このアセットの基本的な使い方はこっちにまとめました。
あたりの音
あたり付き自販機を使ったことないので動画を見ました。
あたりの音は目覚ましっぽかったので目覚ましの効果音で代用しました。
ダウンロードした音が長すぎたのでUnity内で調整できないかと思い、下の記事を試しましたがうまくいかなかったので、
ウェブサイトでカットしました。
音が鳴り終わったら数字を表示するようにしたかったのでisPlayingで判定しました。
音の高さはpichで調整できました。
ダメージ
エレンに攻撃を加えるには攻撃を加えるオブジェクトにDamagerをつけて一番下のhittable LayersをPlayerにしたら攻撃が入りました。
グーパンチ!
エレン側のライフが減る様子は
エレンについているon health SetにhealthCanvasをセットする。
あとダメージを受けた時のピカピカする長さは青いとこ。
エレン側のダメージをカウントする部分は public void TakeDamage(Damager damager, bool ignoreInvincible = false)
でした。
この中に
GameObject deathhearts = GameObject.Instantiate(deathheart) as GameObject;/////////koko
deathhearts.transform.position = dea;
// var canvas = GameObject.FindObjectOfType<Canvas>();
deathhearts.transform.SetParent(canvas.transform, false);
dea.x += 0.2f;
b++;
不幸返済ゲージが溜まるスクリプトを書きました。
コルーチン
初めてコルーチンを使いましたがとても便利でした。
初めてコルーチンを使ったけどとても便利だった。
— bibinba (@bibinbaleo) 2018年2月20日
unity1weekはパンチを避けたり避けなかったりして、 戒めるゲーム。
自販機の写真撮ってきた。 pic.twitter.com/PGo5bosaE2
2秒たったらこの行を実行する。みたいなのが簡単にできます。
これを使って、「ピピピピという音が鳴り終わったらくじの結果を出し、1秒後にパンチを出す」みたいなのができました。
UIプレハブ
あたりが出たら幸せ借金ゲージが1増えるという演出をしました。
最初は普通にプレハブをインスタンスして、位置をずらすだけをやっていたのですが、Canvasの下に生成されず、変な位置に出てしまいました。
UIをプレハブ化するにはSetParentというのを使う必要があるそうです。これらを組み合わせたら無事にできました。
private Vector3 hea = new Vector3(-0.31f, 1.451f, 0);
~~~~~~
GameObject hearts = GameObject.Instantiate(heart) as GameObject;
hearts.transform.position = hea;
var canvas = GameObject.FindObjectOfType<Canvas>();
hearts.transform.SetParent(canvas.transform,false);
hea.x += 0.2f;
スタート画面&ゲームオーバー
スタート画面はboolを使ってupdateで一回だけ呼び出す感じにしました。
クリックしたらスタート画面が消えて、コルーチンで作ったゲームが始まる。
void Update () {
if (Input.GetMouseButton(0)&&isCalled==false)
{
isCalled = true;
start.SetActive(false);
StartCoroutine("Zihanki");
}}
この方法はクールじゃないらしいですが、うまい方法がわからなかった。
ゲームオーバー画面は3つに分岐しています。自販機で当たった回数と殴られた回数を別々のスクリプトから持ってきて、その数の大小によって別れます。
if (atari.a == Damageable.b)
{
happy.SetActive(true);
if (Input.GetMouseButton(0))
{
happy.SetActive(false);
SceneManager.LoadScene("test");
}
}
そして画面が表示され、クリックしたら消えて、sceneを初期化します。
あとゲームエンドによってBGMを変えようとしていたのですが、updateにAudioSouce.Play()を書いていたせいで何回も呼び出され音がならないということがありました。
その場合は
if (badend.isPlaying == false)
badend.Play();
とすれば良いそうです。
マジで原因わからなくてエディタ再起動してた。結果的に自力で気づけてよかった。
キャラを動かすキーを変える
公式リファレンスのこのページに書いてありました。
キャラについているPlayer Inputのselect prefabを押して各項目を設定できます。
今回はしゃがむ動作だけできれば良いので他はNoneにしてしゃがむ動作をクリックにしました。
沼のパーティクルを見たらこんな感じのことが書いてありました。
多分トリガーになったのはColor spaceを変えたこと?
デフォルトのLinearだとwebglで何たらかんたらと出たのでGanmaにしたら、その後からパーティクルが変になった気がします。
治しかたがわからなかったのでパーティクルを見えなくしました。
完成
暇人なので早めに完成しました。
https://unityroom.com/games/imashime
主催のnaichiさま毎回ありがとうございます。
すごく制作意欲に繋がるし勉強になります。
みなさんおそ松さんを見てください。