2017年1月28日土曜日

UnityのButtonのOnClickに列挙型の引数を与える

調べた際のメモです。

概要

Unityでは、特定の契機で実行する関数をインスペクタで指定することができます。
ButtonコンポーネントにおけるOnClickや、EventTriggerでの各種イベント等がそうです。

で、インスペクタから関数を指定する時に「引数にEnumを指定できたら良いのになぁ」と思い、調べてみました。

結論

ググったらUnityのフォーラムが見つかりました。
「Ability to add enum argument to button functions」に投稿された方法 で実現できました。
原理の理解は皆無ですので悪しからず。

方法

  1. 上記リンクの投稿にあるスクリプトをDL
  2. 「UnityEventDrawer.cs」をAssets/Editorフォルダに、「EnumActionAttribute.cs」をAssets配下の任意の場所に保存
  3. EnumActionAttribute.csに「using System;」と「using UnityEngine;」を追記
  4. Enumを用意
    今回はGameManagerにWeaponTypeというEnumを作成しました。
  5. Enumを引数とするメソッドを下記のような感じで用意

    [EnumAction(typeof(GameManager.WeaponType))]
    public void hoge(int type)
    {
        GameManager.WeaponType enumType = (GameManager.WeaponType)type;
        //なんかの処理
    }

引数はintで定義します。メソッド内でEnumに変換して利用します。Enumは内部ではint型なので、単純なキャストで変換できるそうです。

すると下記のようにButtonのOnClickで列挙型を指定できました。



こういうのをエディタ拡張って言うんですよね。凄いです。Unityの素の機能ですら理解が追い付かないのに。

2017年1月16日月曜日

Unityで画面全体でタッチ入力を受け取る

Unityでハマったとこのメモです。

概要


  • 画面のどこをタッチしても入力を受け取るようにしたい
  • uGUIの要素で隠れていると入力を受け取れないようにしたい


結論

下記のようにすればよい
  1. Canvasに、画面サイズのTextを作成して、文字列を空にする。
  2. 作成したTextに、EventTriggerコンポーネントを追加する。
こうすると、画面全体がタッチ可能にしつつ、かつ、他のuGUIの要素を重ねてタッチできなくすることも可能になります。

経緯

画面全体でタッチを検出したい時、下記のようにしてました。

  1. シーン上のGameObjectにスクリプトを追加
  2. Update内でInput.touchesからタッチを取得
これで、「画面をタッチすると攻撃する」ということを実現していました。

けど、これだと、例えば「メニューを表示しているときはタッチしても攻撃しない」ということを実現するのが若干面倒です。
Inputを直接使うと、画面に何が映っていようと関係なくタッチを検出してしまうためです。

そこで、「uGUIの要素は重なって隠れているとタッチできない」という仕組みを利用したいと考えたわけです。

で、調べたところ下記のページに行き当たり、「結論」の方法を知りました。

補足

上記ページにもありますが、画面全体にタッチ検出できるImageを引き延ばして、アルファ値を0にして透明にする。という方法はダメです。「透明な色で画面全体を描画する」という処理が動きますので、パフォーマンスに悪いです。

上記ページでは他の方法も紹介されていますが、Unityのバージョン依存だったり、訳すの大変だったりしたので、ここで紹介はしません。興味があれば読んでみてください。

2017年1月9日月曜日

新アプリ「3D脱出ゲーム 古ぼけた小屋からの脱出」リリース

お久しぶりです。
約2年ぶりの投稿です。

Android用ゲームアプリをリリースしました。

3D脱出ゲーム 古ぼけた小屋からの脱出


リンクはこちら

脱出ゲームは定番ジャンルですが、3Dでキャラを動かす探索ゲームになっています。
10分もあればクリアできるかもしれません。



カメラ固定の探索ゲームはPS時代によくありましたね。


裏話的なもの

前の投稿から、色々ゲームを作っては諦め、作っては投げと、
だらだらやっていました。

長く時間がかかる趣味も大変だなー、と思っていたそんな時に、去年の後半から私のTwitterのタイムラインで「和尚本」や、「Unity一週間チャレンジ」といったワードがよく見られるようになりました。

「和尚本」とは「UnityではじめるC# 基礎編」のことです。監修の「いたのくまんぼう」という方の通称からそう呼ばれています。これを読んだら簡単にゲームが作れた!という声が続々上がっています。

「Unity一週間チャレンジ」はその名の通りUnityで一週間でゲームを作って、その経過を報告することです。元ネタは「game a week」というゲーム開発の訓練法のようですが、短期間でどんどん面白いアプリが公開される様子を見てると非常にモチベーションが上がってきます。

で、去年の終盤から「和尚本」を買ってUnityの勉強を始めてみたところ「Unityすげえ!」となり、一つゲームを作ってみようと思い立ったわけです。

作成の過程は記録していませんが、期間は2週間程度だと思います。まさかこんな短期間でできるとは思ってませんでした。一週間はいつかチャレンジしてみたいですね。

今回のゲームの作り方は主に「和尚本」をベースにしてます。3D部分はUnity標準アセットと、チュートリアルを参考に頑張りました。

久しぶりにゲームを完成まで持って行けたのは内心かなりうれしかったです。
今後ゲームを作っていくモチベーションにもなったと思います。

そんな裏話のあったこのゲーム、ぜひぜひ楽しんでください。

2015年3月12日木曜日

制作中のAndroid用アクションRPGゲーム



久しぶりの投稿です。

最近はAndEngine講座動画は放置気味でアクションゲームを作っています。
完成には程遠いですが、ひと段落ついたのでプレイ動画をアップしてみました。

今のところ動画に含まれているのはステージ選択と戦闘場面ですね。


ステージ選択画面です。動画にありますがスワイプで左右に場面を切り替えることができます。左右のアニメーションを滑らかにするのに苦労しました。
画像素材は仮のものです。

で、四角いボタンをタッチして戦闘場面に移行します。



戦闘場面では剣を持ったキャラクターを左右ボタンで操作して敵に突進させます。
主人公キャラクターは前方へ自動で加速するので、向きを変えると慣性でドリフトします。
この操作感がゲームの売りになればなぁ。と思っています。

時間経過で敵キャラが沸き、一定数の敵を撃破すればステージクリアになります。

ちなみに敵キャラは、移動、待機、攻撃などの行動を選択して動くようにしています。緑色のスライムは攻撃行動をとっていることを表しています。

敵キャラクターは動画ではスライムだけですが、他にも追加する予定です。

犬か猫かよくわからない生物(仮)等の素材も作っています。

ステージ追加やキャラの成長要素などのゲームの骨格はもちろん、グラフィックやサウンドなど、完成までに必要な要素はまだまだあります。完成度は5~10%程度です。

・・・完成するのか?



2015年1月18日日曜日

AndEngine講座「ゲーム画面の作成」「タッチ入力の実装」

講座動画を2本上げました。もちろん講座ページも作ってます。



第5回:ゲーム作成開始! - ほっぽこ開発 Andengine講座:
第6回:AndEngineでタッチ入力 - ほっぽこ開発 Andengine講座:

前々回まではAndEngineの個々の要素の紹介でしたが、この2回では実際にゲーム作成を始めています。
作業内容を録画して、それを編集するという動画になっているので、動画制作がだいぶ短い時間でできるようになりました。
(その分、内容の割に1つの動画が長めになってますが)


2015年1月13日火曜日

AndEngineのEntityModifier一覧


AndEngineで画像や文字の座標や拡大率などを、一定時間かけて変化させるのにEntityModifierというものを使います。
結構種類があって、覚え切れないものもあるので、一覧にまとめました。

AndEngineのEntityModifier一覧 (ほっぽこ開発 Andengine講座):

まだ、調べ切れていないものもありますが、一応全てのEntityModifierを挙げたつもりです。

詳細などは、また今後充実させていこうと思います。

個人的に一番の収穫は現在の値からの相対的な変化量だけ指定することが出来る○○ByModifierの存在です。

2015年1月11日日曜日

AndEngineのSpriteの使い方

AndEngineの講座記事をアップしました。


第4回:Spriteで画像の表示 - ほっぽこ開発Andengine講座:

動画版はこちら。


今までは、文字だけしか表示していませんでしたが、今回画像を表示します。
2Dのゲーム画面は、大体画像と文字で構成されているので、
これでようやくゲーム開発のスタート地点に立った感じです。

次回からは簡単なゲーム作成に入っていきます。