【1日1本アプリ開発】柿をかわせ2!【18本目】

どうもozaniです。

開発18本目のアプリです。

【1日1本アプリ開発】柿をかわせ!【18本目】

今回も、かわして、かわして、かわしまくれ!
ということで、仲間内で受けが良かった、飛んでくる柿をひたすらかわしまくるゲーム第2弾です!
当然今回も、キノコ機能の進化機能を備えております。

今度の柿は、追ってくる

是非、遊んでみてください!

・今日のちょっとソース。
こちらから

【Unity】SE音の設定【正解音・ハズレ音】

今回のソースは、SE音の設定についてです。

使用するのはAudio Sourceコンポーネントです。

SE音だけでなく、BGMなんかもこいつの設定で簡単に出来ますね。

まずは、Hierarchy内にあるオブジェクトに対して、Audio Souceをアタッチします。

そして、流したい音楽を、AudioClipに設定するだけ。

なんとこれだけで、音楽が流れ出します。

BGMなんかは本当にこれだけの設定で完了ですね。

今回の様な正解音やハズレ音といったSE音は、
ゲーム開始にすぐなってもらって、
終わりでは困ります。

ユーザの選択によって、

あっている→正解音
外れている→ハズレ音

と流れて欲しいわけです。

ですので、第一段階として、
まずはゲーム開始時にならない様にします。

画像の中にある、
Play On Awake
これのチェックを外しましょう。

次の動作としては、
ユーザのタップで正解音・ハズレ音のいずれかを鳴らす必要があります。


 // クリック処理(正解時) 
Collect = GameObject.Find("Collect");
Collect.GetComponent<AudioSource>().Play();

 // クリック処理(ハズレ時) 
Fail = GameObject.Find("Fail");
Fail.GetComponent<AudioSource>().Play(); 

コードはこれだけです。

やっていることは、AudioSourceのPlay()という関数を呼ぶだけなんですね!

とてもわかりやすく用意されていますね!
(私はすぐ忘れるのでメモです )

【1日1本アプリ開発】大きくしろ!【17本目】

どうもsh0です。

開発17本目のアプリです。
(けっして下ネタではありません)

【1日1本アプリ開発】大きくしろ!【17本目】

今回は表示される数字の中から大きな数字を選択していき、
100を目指すパズルゲームです。

  
 
表示される9つの数字は前回選択した数字から
ランダムで-10から+4位までの値が表示されます。

 ですから間違って、前回より小さい数字を選んでしまうと、
かなりの時間ロスになってしまうので、
クリアがとても難しくなります。

 
 (というか、多分一回でも間違うとクリアできないのでは、ないかと思います)

・今日のちょっとソース。


【Unity】SE音の設定【正解音・ハズレ音】


【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

【1日1本アプリ開発】柿をかわせ!【16本目】(※鬼畜ゲーム

どうもozaniです。

開発16本目のアプリです。

【1日1本アプリ開発】柿をかわせ!【16本目】
今回は、かわして、かわして、かわしまくれ!
てことで、飛んでくる柿をひたすらかわしてもらいます。

15本目のアプリがマ〇オを意識していたので、今回も少しだけマ〇オを意識しました。
キノコをとると巨大化してパワーアップします!!!

あまり難易度を考えないで作ったので、かなりの鬼畜ゲームとなっております。
むしろ、ゲームクリアできたら、連絡してほしいレベルです!

是非、遊んでみてください!

・今日のちょっとソース。
こちらから

【Unity】タイマー機能の作成

どうもozaniです。

制限時間を表示する、タイマー機能をテーマに以下のアプリを作成しました。
アプリの紹介記事はこちら!
【1日1本アプリ開発】柿をかわせ!【16本目】

時間を表示するテキストの作成

手始めに、制限時間を表示するテキストを追加します。
Create > UI > textを選択して、テキストを追加します。

今回のアプリでは60秒をカウントするので、初期のテキストに書かれている内容を60秒とします。
これは、InspectorタブのTextに60秒を表すように入力してあげればよいです。

これで、画面上に表示するタイマーのテキストが完成しました。

タイマースクリプトの作成

次に、1秒毎にタイマーテキストの表示を変更する、タイマースクリプトを作成しました。

	
    public class GameMaster : MonoBehaviour
    {
        
        public Text timer_text; // タイマーテキストを設定します。
        int timer_count = 60;  // 初期は残り60秒

        // Use this for initialization
        void Start()
        {
            StartCoroutine(CountTime()); //CountTime()を数秒(今回は1秒)おきに実行
        }

        public IEnumerator CountTime()
        {
            yield return new WaitForSeconds(1f); //1秒待機
            timer_count--; //制限時間を1秒減らす
            timer_text.text = string.Format("Time:{0}", timer_count.ToString()); //タイマーテキストを変更

            StartCoroutine(CountTime()); //CountTime()を実行
        }
    }

タイマー用のテキストに上記スクリプトをつけることで、制限時間を表示するタイマーとなります。

今回のスクリプトは、Unity(C#)のコルーチンという機能を用いて実装しました。
参考:Unity Document(MonoBehaviour.StartCoroutine)
メインの処理とは非同期に、動作・停止を繰り返し行う仕組みみたいです。

使いこなせたら便利なので、コルーチンについての説明は改めてどこかでしたいと思います。

【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

【1日1本アプリ開発】障害物を越えて行け!【15本目】

どうもオザワです。

開発15本目のアプリです。

【1日1本アプリ開発】世界の愛してる辞典!【15本目】

本プロジェクト初参加です。
ゲームアプリ開発も含めて初開発なのでバグ等多いかもしれませんがご容赦願います。

今回はマ〇オの様な横スクロールができる2Dゲームを開発しました。
初めてにしては頑張ったと思ういます。。。とはいっても、初心者が1日で作成できる
レベルなので中身も簡単ですので是非参考にしてください。

・今日のちょっとソース。

【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

【1日1本アプリ開発】漢字を作れ!【14本目】

どうもsh0です。

開発14本目のアプリです。

【1日1本アプリ開発】】漢字を作れ!【14本目】

今回は漢字選択パズルゲームです。

問題はいろいろ用意しましたが、一旦1問だけ…
(すみません。時間に間に合わず…)

1問だけですが、正直結構難しいと思います。

一発でクリアできる人は、結構頭いいと思います。

私には無理です。

・今日のちょっとソース。

オイスターソース


すいません。改めて更新します。


【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

【1日1本アプリ開発】世界の愛してる!【13本目】

どうもozaniです。

開発13本目のアプリです。

【1日1本アプリ開発】世界の愛してる辞典!【13本目】

世界中の女性とお近づきになりたいと思ったこと、ありませんか。
そんな思いを込めて作成したアプリとなります。

 

・今日のちょっとソース。

シーン間の値の受け渡し

	
   // ラベル文言管理クラス
   class LabelWords
   {
       public static string ILoveYou { get; set; }
       public static string ILoveYouKana { get; set; }
   }
   // ドロップダウン変更イベント
   public class LanguageDropDown : MonoBehaviour
    {
        public void OnValueChanged(Dropdown dropdown)
        {
            switch (dropdown.value)
            {
                case 0:
                    LabelWords.ILoveYou = "愛してるよ";
                    LabelWords.ILoveYouKana = "アイシテルヨ";
                    break;
                case 1:
                    LabelWords.ILoveYou = "I love you";
                    LabelWords.ILoveYouKana = "アイラブユー";
                    break;
                    ……(略)
            }

        }
    }

上記のソースコードは、ドロップダウンを変更したときに動くプログラムです。

Unityでシーン間で値を共有する場合、最も簡単な方法は静的(static)な変数に値を入れてしまうことです。
上記のソースコードの様に、変数にstatic キーワードをつけることでその変数は静的な変数となります。

静的な変数の特徴は、プログラムの開始から終了まで値が保持され続けることです。
普通のstaticではない変数というのは、使い終わった後その値と領域は破棄されます。
今回リリースしたアプリを例にすると、最初のトップのシーンで言語を「英語」と選んでも、普通の変数だとシーンが切り替わるタイミングで破棄され、次の愛してるよのシーンでは何が選択されているのか、わからくなってしまいます。

staticな変数は乱立すると、「え、今これ何入ってるんだっけ?」と複雑怪奇なプログラムになり、思わぬバグの元となりますので、ご利用は控えめに!

【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

【知り合いに実際にプレイしてもらった感想】

グラフィック :

ボリューム  :

操作性    :

ゲームバランス:

独創性    :

クリアタイム :00分

【1日1本アプリ開発】謎を解け!【12本目】

どうもsh0です。

開発12本目のアプリです。

【1日1本アプリ開発】謎を解け!【12本目】

今回は謎解きゲームです。

と言っても解く謎は2つのみです。

2つの仕掛けを解けば、クリアの超シンプル謎解きです。

作っていて思いますが、謎解きは1つの謎を作るのに1時間くらいかかるのに、
解くのは本当に一瞬ですよね。

脱出ゲームとか作られている方はすごいなと思わされます。

もっと色々複雑に考えて実装しないと、面白いと思ってもらえるものは難しんだろうなあ。
と痛感させられました。。。

次くらいも謎解きでもっとストーリーとかを絡めたアプリを作ってみたいなと思います。

・今日のちょっとソース。

Animatorのトリガーパラメータ処理


AnimatorとAnimationって、慣れると分かり易いなーって思うんですが、正直すぐに忘れてしまうんですよね。

コールバック関数もきっちり用意されているし、他のAnimationに遷移させるトリガーやフラグも簡単に設定出来ますし。
(すぐ忘れます。全部笑)

今回のアニメーションでは基本的にトリガーパラメータで遷移させています。

wakeとlargeというトリガーパラメータを用意し、
クリックでトリガーをセット、アニメーション実行という非常にシンプルなものです。


 // クリック処理(wake Animation実行)     
 Image.GetComponent().SetTrigger("wake");

(ImageはAnimatorがセットされているオブジェクトです)

やっぱりこれくらいシンプルなことでないと覚えてられないですね…


【使用ゲームエンジン】
Unity2018.3.5.f1

【プロジェクト管理】
git(Bitbucket使用)

 

【知り合いに実際にプレイしてもらった感想】

今回は本サイト初めての謎解きゲーです。私個人的には好きです。

色々ケチをつけたらいくつも出てきそうですが、1日で作ったににしてはしっかりと

謎解きがあって楽しめました。ただ、最初はゲームスタートしてすぐにゲームオーバ

になったのでバグか?と思ってしまったのでアプリの最初にルール説明が有るといい

かも知れないですね。続編に期待です。

 

グラフィック :★★☆☆☆

ボリューム  :★★★☆☆

操作性    :★★★☆☆

ゲームバランス:★★★☆☆

独創性    :★★★★☆

クリアタイム :10分

【1日1本アプリ開発】サルを揃えろ!【11本目】

お初です、ozaniです。

開発11日目です。

【1日1本アプリ開発】サルを揃えろ!【11本目】

今日は簡単なパズルゲームを作成しました!

・今日のちょっとソース。


	
var currentPosIndex = picePosDict.
    Where(x => x.Value.name.Equals(flickPiece.name)).
    FirstOrDefault().Key;

パズルのピースの位置とそのオブジェクトを格納したHashtableをゲーム開始時に作成し、各ピースの位置を管理しました。

上記は、フリックしたピースの位置情報をLINQを使用して取得しているソースコードです。
C#はLINQがあるから大好きだったりします!

LINQを使用しない場合、ソースコードは下記のようなソースコードになるかと思います。

	
var currentPosIndex = 0f;
foreach (var index in picePosDict.Keys)
{
    if(picePosDict[index].name.Equals(flickPiece.name))
    {
        currentPosIndex = index;
        break;
    }
}

上記のコードを上から読んでいくと
「Hashtableの中身を順番にループで見ていき、フリックしたピースと名前が一致するオブジェクトがあれば、そのINDEXを保持してループから抜ける」
となります。

「Hashtableからフリックしたピースの位置をとってくる」ていう意味では、
1つ目のソースコードも、2つ目のソースコードも同義なのですが、
やりたいことをストレートに表現しているのは前者だと思いませんか?

積極的にC#やるなら、積極的にLINQ使っていきましょう!

【使用ゲームエンジン】
Unity 2018.3.5f1

【プロジェクト管理】
git(Bitbucket使用)

これからも、よろしくお願いします。