のののーと

何か作った時のメモ書き

unity1week(お題 : space) 反省会

1週間ゲームジャムに参加しました。こんなの。

パズルものです。げーむはこちら → Fill in the Space

反省会ということで、思ったことをメモしていこうと思います。(注: 解答例 有)

※version Unity 2017.2

目次

  1. ゲーム紹介
  2. 本題
  3. 仕様について
  4. 感想
  5. 好きなげーむ
  6. 使用アセット
続きを読む

LINE BOTをつくってみた

HerokuとLine Messaging APIをつかってカウントダウンBOTをつくってみた。「カウントダウン,イベント名,年,月,日」を入力すると、イベントを登録して毎日朝6時にカウントダウンしてくれます。言語はPHP

f:id:nonoui:20170821014124p:plain

経緯

LINE BOTが個人でも作れることは前々から知っていたけど、特に触れてこなかった。今回、訳あってちょっと触れてみました。

開発

実はHerokuもLine Messaging APIPHPもすべて初めて。ネットの記事を見ながら紆余曲折を経て作りました。特に書けるほどのノウハウやソースコードなどはないです…なので参考にした記事を羅列する形で(ノートっぽい使い方)。感謝感謝です。

Heroku導入メモ · GitHub

PHPを使ってサクッとLINEのMessaging APIを動かす方法|株式会社クインテット

LINE Messaging APIでグループメンバーの誕生日を祝うBotを作ってみる(前編) | 株式会社INDETAIL - インディテール

途中でイベントの名前や日付、グループidを保持する必要に気づく。DropboxやNCMBを使ってデータを保持する方法を試したけど、最終的にはHeroku Postgresというデータベースを使用した。

Heroku + PHP から Heroku Postgres に接続する - Qiita

Heroku Postgres を使ってみる - Qiita

PostgresSQLのコマンドは以下の記事を参考にした。

Heroku の PostgreSQL データベースへアクセスしてレコードを更新する : Serendip - Webデザイン・プログラミング

感想

いろんなものを初めて使ったけど、なんとか形にできて安心。実はまだイベントを削除する機能がないので、実用的ではない。 BOT作成なかなか楽しかったので、またやる気あったら触れてみたいな。webアプリもやる気あったらやってみたい…

Unity : コンボの演出表現

コンボした時の演出をつくってみた。こんなの。

f:id:nonoui:20170905221626g:plain

メイキング

上のgif画像みたいになるまでの過程をメモしていこうと思います。

コンボとは

今回,コンボを「何かしらのアクションが連続的に行われた時のカウンター」とします。とすると、最低限実装すべきものは「カウンター」 ですよね…?

んじゃとりあえず変数用意してインクリメント。

f:id:nonoui:20170904235206g:plain

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

public class ComboSystem : MonoBehaviour {
    [SerializeField] string comboWord;
    [SerializeField] GameObject comboObj;
    Text comboText;
    RectTransform comboRectTrans;
    int counter = 0;

    void Awake() {
        comboText = comboObj.GetComponent<Text>();
        comboRectTrans = comboObj.GetComponent<RectTransform>();
    }

    public void IncreaseCombo() {
        counter++;
        UpdateCombo(counter);
    }

    /// <summary>
    /// コンボの更新.
    /// </summary>
    /// <param name="comboCount">コンボ数</param>
    void UpdateCombo(int comboCount) {
        Show();
        comboText.text = comboCount + comboWord;
    }

    void Show() {
        comboText.enabled = true;
    }

}

文字のスケールを拡大縮小

コンボとしての役割は果たしているのであとは演出を凝る。文字の大きさを大→小に変化させることでインパクトある感じに。実装方法はコルーチンとAnimationCurveを使いました。参考記事Unityで対象のポイントへ等速で動かす - テラシュールブログ

f:id:nonoui:20170905221652g:plain

一定時間コンボが増えない場合の処理

コンボが発生した時、ある程度時間経っても増えない場合はコンボ数をクリアするようにします。

f:id:nonoui:20170905221705g:plain

文を傾ける

数字と大きさの変化だけじゃなんか物足りない… そこで毎回ランダムに文を傾けるようにします。個人的こだわりポイント。この時点でほぼ実装完了って感じ。

f:id:nonoui:20170905221718g:plain

段階的に表示する

あとはプラスアルファ。 ぷよぷよとかパズドラ見たいに段階的にコンボが増える仕様なら大丈夫ですが、一気に1→5になることもゲームによってはありえると思いますよね…現状では2,3,4を飛ばして5を表示する仕様になってますが、個人的には2,3,4も表示させたい…!!

なので、一度に(厳密には目で追えない早さで)増えても段階的に表示させるように改良。実装方法はQueueを使ってコンボ数を貯めておき、ある程度時間がたったらDequeueするという感じに。

f:id:nonoui:20170905221731g:plain

その他細かい部分

コンボ数が積み重なるほど盛り上がる感じが欲しかったので、いい感じになるようにいじります。 いろいろこねくり回しているとトップgifのようになりました。

ソースコードと使い方

Githubとか使えば良かったんですが、なんとなく直貼り。もっとこうした方がいいみたいなのあったら教えて頂けると嬉しいです…

使い方は、下の画像のように上記のソースコードを空のオブジェクト(画像内ではComboSystem)にアタッチ。 その後、ComboSystemコンポーネントのパラメータを埋めて、ボタンをクリックするとIncreaseComboメソッドが実行されるように設定します。 f:id:nonoui:20170916022349p:plain

感想

今回、色と音については特に触れませんでした。 もっと爽快感ある感じにできたらいいな…

Unity 1週間ゲームジャムに参加しました(お題 : 夏)

遅れて報告となりますが,1週間ゲームジャムに参加しました。こんなの。

木が育つのを観察するゆるいゲームです。木の自由研究

目次

  1. メイキング
  2. 感想
  3. 個人的に好きなげーむ

メイキング

ざっと考えたことを振り返ろうと思います。

テーマ決め

お題が「夏」と知った時,まず頭に思い浮かんだのが夏休みでした。 夏休みがあるのは生徒、学生あたりかなーって思い、そこら辺がやりそうなものにまず絞りました。

また、ちょうどL-systemという単語を知る機会があり、調べてみたら木が作れるアルゴリズムのようで興味が湧いてきました。 ちょっと作ってみたい…

なので、今回は木を成長させることをテーマにしようと決めました。ただ、このままでは夏と全然関係ないので、小学生の夏休みの自由研究という設定を付け加えることにしました。

多分セーフ…

木の成長

まずは情報収取。いろいろ調べてみると、@sylvan5さんの記事を見つけました。 aidiary.hatenablog.com

この記事を参考に早速取りかかって実行した結果…

f:id:nonoui:20170802165756p:plain

木じゃなくて草のように見える…でも狙い通りの結果が出て来てくれてうれしい。あとは置換規則をいじって3次元に対応すればよさそう!

ここで今後のプランを考える。上の画像は置換規則は F → F[+F]F[-F]F (+と-は角度変更)だから…n回繰り返すと枝の数が5のn乗になるのか。 枝の本数が指数関数的に増加するとなると、仮に10回成長させた場合は枝の数が膨大だなぁ…うーん…

ということで、ここでL-systemを使うのは断念しました。とりあえずやりたい事を以下の3つに整理して、どうすればいいか考えました。

  • 木が3次元で成長
  • 枝が伸びるアニメーション
  • 枝の半径や長さ、角度をいじれる

最終的に、下の画像のようにトップ階層にNodeという空のオブジェクトを用意して、その下の階層にBranchという枝のモデルを用意しました。最後にBranchの下の階層にTipという枝の先端を示す空のオブジェクトを用意しました。シーン上の緑のアイコンがTipの位置です。アニメーションを考慮して枝のモデルの重心は中心ではなく,付け根、Tipと真逆の位置にしました。 この構成にして,枝の位置はNodeが管理,枝の見た目(大きさや角度)はBranchのScaleをいじるようにしました。

f:id:nonoui:20170802172849p:plain

上記のオブジェクトをプレハブ化しておき、木を成長させる際は新しい枝のNodeの位置を先端の枝のTipの位置に配置することでそれっぽく繋がってるように見せました。最終的にはこんな感じになります。

f:id:nonoui:20170803104444p:plain

ゲーム要素

メインのシステムは出来たのであとはゲームに組み込む作業。水・土・日光の3要素よって木の成長具合が変わるようにし、プレイヤーはそれらの要素に関与できる感じに。

また、天候よって各要素の増減量が変化するようにしました。

その他

スコアの指標的なものが欲しかったので,以下のサイトを参考にNCMBのライブラリを拝借。パパッと実装出来て感謝感謝です。ゲーム内部では、スコアと高さ、葉っぱの数を保存するようにしました。 blog.mb.cloud.nifty.com

github.com

背景は何も思い浮かばなかったので適当にグラデーションかけました。もっと夏要素欲しいので改善の余地ありですね…

カメラワークは常に木が収まることを意識しました。Unityの公式チュートリアルを参考にしました。

unity3d.com

感想

とりあえず、参加できてよかったーって感じです。また、このように行ったことをメモ出来たのでなおグット。ローカルではやる気出なかったので…

技術的な事でいえば、L-systemについてちょっと触れられたのが割と良さげでした。結局ゲームには採用しなかったけど…まぁ引き出しが一つ増えたのでよきかな。 あと、要素を実装する際に継承を使って設計できたのがうれしい。テンプレートメソッドって言えるのか分からないけどそんな感じかな…? ただ親クラスを用意したことの利点を上手く使えなかったのでそれは今後の課題。まだまだ反省する点は多々あるけど、経験積むしかないな~って感じ。そういう意味でこのようなゲームを作る機会を用意して下さるnaichiさんには感謝感謝です。

f:id:nonoui:20170803124407p:plain

個人的に好きなげーむ

勉強になったり面白いゲームが沢山ありますが、個人的に好きなのをピックアップ。

雰囲気が好き。弾が花火なのでプレイ画面もきれい!自機のスキル強化も楽しい。文字が光って見える演出どうやってるんだろう…

雰囲気が好き。線香花火見るのが手軽に体験出来て好き。落ちた後、クリックするとスコアが追加される…

キャラのドット絵表現が好き。シンプルにバレーできて楽しい!ロジックがとっても勉強になった。