Unity:2017.7.24~Unity1week今さらレポ

去年の夏(2017.7.24~)に参加してたUnity1week、お題「夏」で作りかけたゲームが実に9か月ぶりにひとまず遊べるまでに完成しました。

なので感想というかせっかく作ったんだしレポート書いておこうみたいな。

 

作ったやつ

f:id:nosnoo:20180506185150j:plain
朝顔育成デッキ構築カードゲーム

https://unityroom.com/games/4_oclock_bloom

unityroomさんにUPしてあるのでそのまま遊べます。

こういった場所を用意してくれてるunityroomさんは神!

 

参加動機

・Unity最後に触ってから2年も経ってて、今のバージョンがどんなもんか気になった

・コードで書く作品を作りきったことなかったので、ちゃんとやってみたかった

・unity1week自体もちょっと気になってたので参加してみたかった

 

制作期間

 2017.7.24にスタートして一週間で一旦Fix。この時はカードの管理とドラッグUIくらいまでの完成度 

 2017.9月の末くらいまでチマチマと進めてたもののリアル事情も絡んで一旦心が折れる

 2018.4月頭くらいに思い立って開発再開して5月頭にゲームできるように

 トータルで大体3か月ほど(9月中はぷちコン作品を作っていたのでもしかしたら2か月くらいかも)
 一週間ゲームジャムとは……

 

作るときに考えてたこと

・とりあえず他の作品となるべくネタ被りを避けたい

 海とかスイカとか花火とか虫取りとかは被りそう。

 →夏休みの宿題で朝顔を育てるのは夏の定番なうえに割と被らなさそう!

・一週間で出来るようになるべく既存のゲームロジックに乗ろう

 育成=デッキ構築カードゲームみたいな感じにできるんじゃ?

 →ドミニオンクローンの方向性で決定

ドミニオンならペーパークラフトしてどんな塩梅になるかテストできるんじゃ?

 実際に作ってみて1日でバランス調整と既存のドミニオンにないエッセンスがちゃんと機能するか確認した

f:id:nosnoo:20180507105806j:plain

 ※カードの台紙替わりになっているのはハートオブクラウン*1
 ドミニオンライクなゲームで今回かなりデザインの参考に。

 

出来なかったこと

・一週間で完成しなかった

 そもそもドミニオンをベースにした時点で最小限でもユニークな効果のカードを10種コード書かなきゃいけない上にカード管理とかいろいろ作る必要があった。

 そしてUnityのブランクは長すぎてちょっとしたコード書くだけで瀕死に。

 いくらペーパークラフト版が一日で出来たからって同じことがUnityで出来るわけがないのであった。

・カード効果の演出をわかりやすく出来なかった

 特にお邪魔虫(毎ターン発生する妨害システム)がサイレントに効果が発生して終わりなので非常に分かりにくい。他も散々

朝顔を育てる感を出せなかった

 本当は朝顔のモデルを用意してSDユニティちゃんが水やりをやって、みたいな演出をつけたかったけど水やりのモーション作る余裕も技能もなかった。朝顔も同様

・バグとり

 手札を消滅させ過ぎて枚数が5枚以下になると進行不能になる。

 ドロー処理のセイフティが利いてないのが原因なんだけど意図してやらない限り発生しないし放置。そのうち直すかも……。

実装あれこれ

・カードの基底クラス

 コスト等の基礎的なパラメータの定義をprefabで設定できるように

    [SerializeField]
    protected int GPCost;

 カード毎のユニーク効果はinterfaceで個別に定義できるように、playerクラスからデッキや手札にアクセスするので引数でアクセス可能に

public interface CardInterface
{
    //カード効果
    void CardEffect(Player player);
}

 その他カードをドラッグする処理とか、カード詳細ダイアログとかもこのクラスで定義

・各カード

public class Study : CardBase, CardInterface
{
    public void CardEffect(Player player)
    {
        player.Add_AP(1);
        player.CardDraw(2);
    }

    // Use this for initialization
    void Start()
    {
        CardText = "GP Cost:" + base.GPCost.ToString() + " \r\n " + base.CardType.ToString() + "Card \r\n" +
            " [研究] \r\n +1AP \r\n +2ドロー";
    }
}

 一例として研究(+1AP、+2ドロー)カードの実装。Start処理はカード詳細ダイアログ用のテキストを用意

・大雑把なゲーム全体の構造図

 f:id:nosnoo:20180507133144j:plain
 かなり雑だけど大体こんな感じ

・playerクラス

 基本的にリアルで行うアクションをベースに関数を用意
 カードをデッキから引く・マーケットからカードを購入する・手札のカードを使用するetc

・マーケット・デッキとか

 各クラス内のListでカードのprefabを管理、playerクラス用の操作関数とかも用意した

反省

・いきなりカードゲームを作るのは無謀だった

 この一点に尽きる。作らなきゃいけない要素が多いので一週間ゲームジャムで作るには実力不足でした。

感想

 期間内に作りきれなかったり、いろいろ粗があったりだけど、なんだかんだカード管理のロジックを書くのは楽しかったし結構勉強になったかも。
 カードゲーム好きなのでいつかちゃんと考えてオリジナル要素の強いものが作れたらいいなぁ。

UE4:第8回ぷちコン参加レポ

第8回ぷちコンに参加したのでレポートというか感想を。

ということですっかり放置してたブログに久々かつ3回目の投稿。

 

作ったやつ

www.youtube.com

動画説明文にダウンロード用のURLあります 

 

参加動機

・個人製作が煮詰まってたので息抜きがしたかった

・出張ヒストリアの懇親会で同席した方とプチこん出しましょうよ!って盛り上がった

・第7回ぷちコンで二日で作ったブロック崩しが不完全燃焼でリベンジしたかった

 

制作期間

 8/28に思いついてから提出日まで作ってたので大体3週間ほど?

 

作るときに考えてたこと

・シームレスなレベル遷移

 第7回の時から構想だけしてたものを今回ちゃんと実装。

・暇な時間を少なくする

 破壊不可ブロックの間でハマったりすることが多かったのでスロー+台揺らしで強引に抜けられるようにした。

 弾道制御によるゲーム性が上がっていい感じに仕上がってくれたと思う。

・見た目のインパクトと気持ちよさを上げる

 ブロックを被破壊メッシュにしてみたり、出現時にエフェクトを付けてみたり。

 

出来なかったこと

・最初のステージクリア後の背景変更にエフェクトをつけたかった

 出張ヒストリアのArt of Airtone講演で紹介されていたジオデシックドームの演出を真似してみたかったけど、時間が間に合わず断念。

・パドルの移動をわかりやすくしたかった

 操作した時にパドルのどこで受けるのかをUIに表示させたかった。

・バグ取り

 ボールがフレームにめり込むことがたまにあるのでちゃんと対策したかった。時間優先度的に見送り。

・レベル遷移システムの改善

 実装優先で雑にBPを組んだら非常に融通の利かない感じに仕上がってしまったので直したかった。

・リザルトで各ステージのクリアタイムを出したかった

 作るとどうしてもリザルト画面のレイアウトがごちゃついてしまうので断念。

 

実装あれこれ

・ボールの軌道エフェクト

 審査結果発表の時にコメント欄で触れてもらったところ(ありがとうございます)

 実はContentExamplesのリボンパーティクルをちょっと改造してボールにくっ付けてあるだけの単純な作りだったり。ボールの動きが速すぎるため、これが無いと何がなんだか分からなってしまうのです。

・ボールを落とさないパドルの動き

 ボール側が反射の際にトレーシングを行って、下部のパドルエリアに当たったらヒット判定用パドルをそこにワープさせるように。(それでもたまに抜けるので見えないコリジョンでガード)

 そしてヒット判定用パドルにボールが当たると見た目だけパドルが同じ位置に移動。

f:id:nosnoo:20170921140217j:plain

f:id:nosnoo:20170921140413j:plain

・台揺らし機能

 カメラとボールのベロシティと背景を回転させて、フレームとブロック揺れてるように演出。ブロック全部参照して動かすのは計算面倒くさそうだしコストが高いかなー、と思ってこんな処理にしてみた。回転角度はEase処理で滑らかに変化させたり。

f:id:nosnoo:20170921142011j:plain

・スローモーション

 グローバルディレーションをかけてから更にボールにカスタムディレーションをかけて実装。

 スコアの為にスロー推しっぱなしでクリア出来ないようにっていう目的の他に、グローバルディレーションだけだとボールの速度が全然落ちないっていう実装面での問題解決の目的もあったり。ちなみに逆にボールに合わせて全体にディレーションかけてしまうと破片の速度が遅くなりすぎて爽快感と視認性ががた落ちします。

f:id:nosnoo:20170921144530j:plain

・反射予測表示

 スフィアトレースして開始地点と衝突地点をビームパーティクルのソースとターゲットに設定。スフィアトレースのお陰で高精度な予測になった。

 BPはちゃんと整理してないのでかなり煩雑に!

f:id:nosnoo:20170921150721j:plain

 

反省

・操作がとっつきにくい

 パドル操作がASDFで反射位置がずれるのがかなり直感と乖離してるのが良くないなーと。

 スロー+台揺らしも、台揺らしした結果どこに跳ねるのか分かりにくいので何らかの形で予測表示を作れれば良かった。

・パドル移動による反射が死に機能気味

 反射予測がちゃんと反映されない上に当てにくいところはパドルが絡みにくく、その上台揺らしが機能を食い気味。どうすれば良くなるのか難しい……。

・テーマ「60秒」との合致率は低め

 60秒クリアを目指す!って一応銘打ってはいるけれど、素材として60秒を使えてるかと言われると他の作品より使いこなせていない感。

運ゲー要素が若干強い

 見てるだけでも運がいいと難所をクリアできちゃったり。ただ複雑にしすぎるとクリア時間が掛かり過ぎたり、なかなかバランス取りずらい。

 

 

結果

審査にてノミネートされてしまいました!

historia.co.jp

 

全108作品もあって、自分よりクオリティ高い作品もたくさん出てたのでノミネートされるなんてビックリです。

UNREAL FEST EAST 2017で展示されるみたいなので見に行かねば!

 

感想

まさかのノミネートまでされて、評価されたのがとても嬉しいです。

ビームパーティクルやリボンパーティクルあたりの使い方を個人製作用に身につけたかったので実装できたのもいい感じ。

デストラクションメッシュも初めて使って、作り方壊し方がわかったので他の制作の演出でまた使いたいところ。

後、ブロックくずしでプレイ時間が伸びる要因はステージデザインにあるのかなって作ってて物凄く感じた。ステージ3はアルカノイドの3面をパク参考にして同じような作りにしたので顕著。他にも後半ステージが覇王と呼ばれた高名なブロック崩しのステージパク参考にしたり。

あと最終ステージは初期案だと30秒くらいかかる頭の悪いステージだったのでかなり作り直して今の形に。それでも詰まりやすいのでステージデザインは難しい!

全体としては作りこみ部分はそこそこ納得できるところまで作れたし、結果までついてきて満足できました!

 

さぁ次は作りかけの他の個人製作を進めないとっ

 

 

個人的にすごいなって思った作品

www.youtube.com

時間をammoにする発想がすごいツボ。

弾の演出もかっこいい!

アクションパズルとしての完成度高そうで、やってみたい!

unity忘備録:特定の子オブジェクトのみを削除する

ググってもなかなかいい感じのが出てこなかったのでログを残しておく。

子オブジェクトをforeach総当たりで見て、その中に条件を満たしてるオブジェクトがあったらDestroyに放り込むだけ。
ifの条件を変えれば割といろんな状況に対応できると思う。

foreach (Transform child in transform){
 if(child.name == "object_hoge"){
  GameObject.Destroy (child.gameObject);
 }
}