コイン落としゲーム その2

f:id:kazhase:20210826010845p:plain

夏の繁忙期が山場を越えたので、休みの日に一日寝て終わりという日々から、少しは充実した休日を送れるくらいに体調が戻ってきた。
とはいえ今日もせっかくの休みなのに3時間ほど昼寝してしまった(汗)

ということで、ここ数日少しはゲーム制作を進めることができた。
まずはコインが一番下まで落ちたらエフェクトが出るようにしようと思って、いろいろといじっていたらこうなった・・・

エフェクトはアセットストアから拝借
assetstore.unity.com


その後、いろいろやっていたらとりあえず狙った感じにはできた。


コインにつけたスクリプトはこんな感じ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoinDeletScript : MonoBehaviour
{
    public GameObject particleObject;
    public float deleteCoinTime;

    // Start is called before the first frame update
    void Start()
    {

    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Saucer") //Saucerタグの付いたゲームオブジェクトと衝突したか判別
        {
            Instantiate(particleObject, this.transform.position, Quaternion.identity); //パーティクル用ゲームオブジェクト生成
            Destroy(this.gameObject, deleteCoinTime); //コインを削除

        }
    }
}

public GameObject particleObject;にプレファブ化したパーティクルを、インスペクター上に入れ込むと、そのパーティクルがコインが一番下まで落ちると発動する仕組み。

さらにそのパーティクルがいつまでも残ると、画面が果てしなく明るくなってしまうので、指定した時間になるとパーティクルが消滅するスクリプトをパーティクルに付けた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SelfDestroy : MonoBehaviour
{
    ParticleSystem particle;
    void Start()
    {
        particle = this.GetComponent<ParticleSystem>();
    }

    void Update()
    {
        if (particle.isStopped) //パーティクルが終了したか判別
        {
            Destroy(this.gameObject);//パーティクル用ゲームオブジェクトを削除
        }
    }
}

このままだと単なるコイン落としで、ゲーム性が激弱いので、
新しい要素を足していこうかと思う。

コイン落としゲーム その1

前回の記事から随分と時間があいてしまった。

夏は仕事が繁忙期なので、ゲーム制作どころではなかった。

 

毎日残業続きで、休みの日は体力回復に努め、寝るだけ。

たまに起きては前進だるい。

そんな中、ワクチンを打ってさらに体調がバッドになった。

 

 

 

 

お盆を過ぎて、すこし仕事がおちついてきたので、ゲーム制作を再開しようかと。

 

ところで前回の記事の後、Unityroomに無事初のUnityで制作したゲームを公開することができた。

 unityroom.com

  

ゲームを公開した2021/07/17 21:35からこの記事を書いている時点で、ページの訪問者数は36。おそらく実際にゲームをしてくれた人はこの半分にも満たないのでは?と思われる。

 

数カ月かけて作ったゲームがこれかと、やる気がなかなにダウンしたが、気を改めて、次何を制作するか考えてみた。

 

特になにも思い浮かばない。

 

ということで、ひとまずは勉強に注力することにしようと思い立った。

Amazonで良さそうな電子書籍をさがしていたところ、ちょうどKindleUnlimitedがセールで二カ月100円ほどで会員登録できるとのこと。

KindleUnlimitedに登録すると、登録されている本であれば、いくらでも読み放題になる。さらに「Unity」で検索してみたところ、読み放題の本がいくつか見つかった。

  

そのうちの一つ、この本を参考に勉強をしてみたいと思う。

 

で、現状はここまで進んだ。

 

 ほかにもKindlUnlimitedで読み放題のUnity本が沢山あるので、順に消化していこうと思う。

 

Unityでゲームを作る その4

今回はBGMを導入するところから。

適当に作った曲を、各ステージ上に配置していく。
Unityは音を発生するオブジェクトを置くだけではだめで、音を聞くものを設置しないといけないというところが面白い。

音を聞く機能はカメラに追加して解決。



シーンまたぎのフェードイン、フェードアウトはなかなかうまくいかず。
いまだにこの部分は解決しておらず、画面全体が暗くなるのではなく、真っ黒なイメージが、シーンの開始時に下に下がり、次のシーンに進むためのボタンを押すと、上にあがるというシステムにした。

タイトル、ゲームのクリアのシーン、ゲームオーバーのシーンといった、カメラが固定になるシーンは上手く行った。

ゲームシーンは、クリアやゲームオーバー時点でカメラがどの位置にあるかわからないので、真っ黒なイメージをどこに設置すれば良いかのかがわからないので諦めた。



難しさの調整としては、何回かやってみて、5回ほどやっても先に進めない部分は、床を大きくしたりなどして、少しづつ調整した。


さて、ある程度完成形が見えてきたところで、このゲームをどうやって発表すればよいのかを調べてみた。

まずは、素人が一番最初に思いつくだろうことを、自分も思いついた。

スマホゲームとして出せば、儲かるんじゃね?

さっそく、Googleで「スマホゲーム 収益」で検索。
結果的にわかったことは、最近のスマホゲームはレッドオーシャン(競争が激しい既存市場)なのだそうだ。

まず、検索にすら引っかからないとのこと。

試しにAndroidのプレイストアで、適当に「コアラ」と打ち込んでみた。出てくるゲームはコアラと関係があったりなかったり。どれも
10万ダウンロードや100万ダウンロードの超人気ゲームばかり。

そんなはずはない。
コアラのゲームなんて誰しもが思いつくはずだし、たまたまプレイストアにあるコアラのゲームが全て大ヒットしたなんてことはあるまい。

そんなこんなで、スマホゲームでウハウハなどという甘い考えはスパッと諦めた。

次に見つけた発表の方法がunityroom
https://unityroom.com/
にアップロードする方法だ。
unityroomは@naichilabさんが運営するunityで制作したゲームをアップロードできるサイトだ。

ゲーム制作者が集まる場所でもあるので、意見交換も活発に行われてそうな予感。40過ぎてゲーム制作を始めたおじさんでも輪にいれてくれるかも。

これは良さそうだ。

スマホ形式にゲームを作り変えるより、いまUnityの画面で触っている通りの操作感でプレイできるので、これは初心にとっては向いているのでは?と思い、unityroomで公開することに決めた。

unityroomではPCのブラウザーでプレイすることを前提としているため、Unityで制作したゲームをWebGLという形式にビルドする必要がある。

ここからが、思いの外大変だった。

次に続く。

Unityでゲームを作る その3

前回は、初の自作ビデオゲームを作るというところまで書いた。

当初の構想はというと
・ステージは3つ
・コインを5つ集めるとステージクリア
・残基がなくなるとゲームオバーでタイトルシーンに戻る
・残基(死ぬと減るやつ)が次のステージに移っても引き継がれる

ステージ作成

ステージを作ること自体はスムーズにできた。
見ての通り、シンプル極まりない作りだからだ。
f:id:kazhase:20210703080305p:plain

ただ、問題だったのは、床の縁にたつとプレイヤーが宙に浮き、操作できなくなる現象が起こることだ。
これは、全ての床のBox Colliderに摩擦係数が全く無いPhysic Materialを付けることで解消した。


動く床には多少手間取った。
動く床の上にプレイヤーが乗ると、なぜか動く床に追随せずに、落ちてしまうからだ。
これではせっかくゲームをしてくれた人に即クソゲー認定されてしまうので、解決が必要だ。

色々調べてみると、床に乗った時だけ、床の子オブジェクトにすることで解決した。
言っている自分でも、まだよくわかっていないのだが、簡単に言えば「詳しい人のサイトに書かれているスクリプトを引っ張ってきて、プレイヤーに張り付ける」ことで解消した。

でも、それだと回転する床に乗った時に、キャラクターが紙のように薄くなってしまう現象が起きた。
これは、回転の速度を落とし、回転する床に関しては、キャラクターが乗ってもプレイヤーを床の子オブジェクトにしないことで解決した。
何故かはわからないが、回転ではないタイプの移動をする床と違って、回転する床はそれほど滑る感じがしないので、それでOKとした。


あとはひたすら、自分でゲームをやりこんで、難しさを調整してみた。
5回やっても失敗するような箇所は、修正する感じにしたり、コインをすでに取った場所は、死んで初めに戻ったあとは通過しないで済むようにしたりした。

コインを集める仕組み作り

  • アイテム感を出すためにエフェクトを付ける
  • キャラクターが触れると消えて音がする
  • コインを取るとUI(画面の上にあるデータなどを表示するやつ)のコインの枚数が増える
  • 5枚集めるとステージクリアのシーンに移動する


コインはかなり厄介だ。上にかいてある全てをクリアしないと実装できない。

いや、嘘だ。

回転スクリプトとエフェクトと音はなくても大丈夫。でも無いと寂しい。
ついでに言うと、コインをゲットした後で、さらにエフェクト発動でゲットした感を出したかったけど、何度やってもうまくいかなかったので諦めた。

やることが多すぎるうえに、全て調べながらやっていかなければならない。
でも、やり切った。参考にしたサイトの全てはもう忘れたので書けないが、ありがとう。あなたたち先人のおかげで実装できた。
codegenius.org


ポイントとしては、回転+エフェクトについてはコイン側にスクリプトをつけて、コインを取ると消えるスクリプトはプレイヤー側につけた点。
後述する全シーンをまたいでデータを保持するオブジェクトに枚数が5枚以上になったら次のシーンに進むスクリプトを付けた。

残基がなくなるとゲームオバーでタイトルシーンに戻る

codegenius.org

上記のサイトなどを参考に作成。
なお、落ちると死ぬの判定は、ステージの下に大きなCube(四角い3Dオブジェクト)を配置し、透明にして、そこに触れるとステージの最初の位置に戻り、かつ、残基が減る。
残基の設定については、全てのシーンで共有して使えるオブジェクトを作って対応した。
dkrevel.com


サイトによってはゲームマネージャーやゲームスタートと名前を付けて扱うこのオブジェクト。
Staticにすることで静的にして、動かない値を扱えるようになる・・・。今振り返っても意味がわからないが、
これを導入することで、ゲームがゲームっぽくなった。

どこら辺がゲームっぽいかというと、
前のステージの残り残基が次のステージでも引き継がれるからだ。

ゲームを作り始める前の自分的には、そんなの当たり前だろ?と思っていたが、これが実は、結構導入するのが大変だったが、どうにかやり遂げた。

残る作業としては

  • BGMを作成して導入する
  • シーンまたぎのフェードイン、フェードアウトを作成
  • 難しさの調整
  • どこで、どうやって発表するか

Unityでゲームを作る その2

経緯は忘れたんだけど、落ちたら死ぬ3Dゲームをつることになった。

前回に書いたレゴのゲームが面白かったので、それっぽいのを作りたいからそうなったのかもしれない。

 

いや、今書いてて思い出した。

 

Unity2020入門に書いてあった、ステージランなるゲームを改良したら面白いのでは?と思ったからだ。

こういう動機付けは書いておかないと忘れるね。

 

f:id:kazhase:20210703071440p:plain

Unity2020入門に書いてあって、それにならって作ったステージランというゲーム

まぁ上の画像のようなゲームなんだけど、海っぽいところにしたり、いろいろ改良を重ねた結果、動かなくなってしまった。

このゲームを作るにあたって、Unityのアセットストアから素材がダウンロードできないことで一日使ったり(Unityとアセットストアで別々のIDでログインしていた)、四苦八苦したんだけど、とりあえず完成させたことで、自信がついた。

 

上の画像にも映ってるけど、VRoidStudioでキャラクターを自作した。

hub.vroid.com

 

いや、最近のソフトは凄いね。選択肢を選んで、髪型をちょちょいと作るだけで、こんなカワイイ、しかもゲーム内で動かせるキャラクターも作れるんだから。

 

プレビューの動きが激かわなのでリンクを辿って確認してほしい。

 

キャラクターもできた、ステージも作れた。あとは自分オリジナルのステージをつくればゲームもできるだろう。

できれば、残基(死ぬと減るやつ)とか、制限時間とか、ステージが複数あっても良いなぁと夢をいだきつつ、初の自作ビデオゲーム制作にとりかかるのであった。

 

この時の俺は、このあと待ち構えている数々の苦難を知らない。

 

 

Unityでゲームを作る その1

ここ数カ月、コロナもあって自宅で過ごす時間が増えた。

職場で使っているエクセルVBAとは違うプログラムの勉強を始めようと思い、さっそく本屋で購入したのがこれ。

なにか質問すると、特定の答えを返すpybotの作成は面白かった。

 

その次に選んだのがこれ。自分のSNSが作れると書いてあり、勢いいさんで中級以上のターゲットの本を買ってはみたものの、ほぼ理解できず。どうやらDjangoというPythonで使われるWebサービスを作れるなにかを使ってブログを作ったり、SNSを作ったりできるよ、という本なのだが、理解が及ばず、ほぼ写経状態で途中で挫折。

自分のSNSが作れるって素晴らしい・・・と思ったけど、いろいろな人から集めた個人情報を自分の技術力のなさが原因で流出して・・・とか思い始めたら持病の不障害が頭をもたげたので、とりあえずこの本は閉じることとした。

 

さて、次になにをやろうかと考えていたところ、数年間に勝ったものほとんど開いてなかったこの本をぱらぱと見て、おっやってみようかということに。

とはいえこの本は2017年版なので、4年もたてば状況も変わっているだろうと考え、これを購入

Unityのインストール方法から、基本的な操作方法、2Dゲーム、3Dゲーム、UIの作成、スマートフォン向けに改良を勉強した。

 

Unityを初めて、さっそく面白いと感じたのは、チュートリアル用に入っているレゴのゲームだ。レゴならではな感じで、ブロックを積み上げて、いろいろな動きやアクションをおこすギミックを作ることができる。

 

 

 

現在はマリオ的な、下に落ちずにゴールを目指すゲームを作成中なので、その過程を今後書いていこうかと思う。