【Unity/uGUI】ボタンを長押しした際の挙動を実装する
- uGUIのボタンを一定時間押した際に何かしらの挙動を起こしたかった
- UI.Button コンポーネントは onClick (単一クリック) のみ有効
- 取り急ぎ以下のパターンの実装にて実装が可能そう
- (1) 本家 UI.Buttonのコードを拝借しつつ拡張する
- (2) 本家 UI.Buttonを継承しつつ、必要な拡張要素を記述する
- (3) 本家 UI.Buttonとは別のUnityEventの定義を記述する
- 長押しのために複数スクリプトを都度アタッチするのはまどろっこしかったので(3)はパス
RequireComponent(typeof(Button))
すればいいじゃんと言われそう
- (1)は本家のコードを持って来てoverrideする感じになる(?)
- Unityのバージョンが変更されてUI周りに変更が生じた時に追従できなくなるのでパス
- 今回は(2)のケースでの記述を試みる
コード
gist.github.com gist.github.com
挙動
メモ
OnPointer(Down|Up)
はUI .Selectable
に生えている関数Selectable
はEventSystem
からの入力を受け取りイベントを発火する- Buttonで定義されたイベントを
base.XXX
で呼び出しつつ、独自の内容を定義
- UnityEvent を使うことで独自のコールバック機構が実装可能
UnityEvent.AddListener
でコールバックメソッドを追加UnityEvent.Invoke
が実行されるタイミングでコールバックメソッドが実行される
余談
- Inspector上でイベント登録出来る様にするにはEditor拡張が必要
- 本家を参考にすると良さそう
- TouchScriptやInput.Touches等のアセット使うと車輪の再発明しなくて良さそう
- UniRxのCreating custom triggersのサンプルが長押しなので使える場合は使うと良さそう
参考
【Unity/AssetStore】AlphaMaskを使ってみた
- 7/15のアセットストアのセールで売っていたので購入
- ちょうど下記のようなことが出来ないか考えていた
Spriteに対してはこのアプローチで良いとして、特定のUIグループに対して半透明マスク掛ける方法を探している
— 青木とと(ˊ꒳ˋ*) (@lycoris102) 2016年6月22日
こんな感じのアセット
https://www.assetstore.unity3d.com/jp/#!/content/29764
- 任意のSprite/uGUI要素、およびその集合に対してMaskを掛ける事が出来る
- ShaderおよびMasterialを要素を適応させるためのScript、サンプルシーンが内包されている
使い方
- (1) 親となるGameObjectを生成する
- (2) 子としてMaskを適応したいSpriteを配置する
- uGUIの場合も使用可能で、Imageを使用する
- (3) 子としてAlphaMask内にあるMaskをアタッチしたGameObjectを配置する
- Attach時にMaskRendererがAddComponentされる
- (4) MaskMaterialに任意のTextureを指定する
- (5) MaskComponentやscale等をよしなにごにょる
- (6) MaskComponent内の [Apply Mask to Siblings in Hierarchy] を押す
- (7) 自動的にSprite (image) のMaterialに対してMaskMaterialが適応される
- Maskと同居しているGameObjectが子要素を持つ場合、子にも適応される
MaskComponent
- MaskMappingWorldAxis
- マスクの軸 / 通常はカメラの向きと同方向に設定する
- InvertAxis
- 反転させた軸に対してマスクを適応させる時に設定する
- ClampAlpha(Horizontally|Vertically)
- ClampingBorder
- 上記のClampの設定が有効の場合、境界を調整する事が出来る
- UseMaskAlphaChannel
- アルファチャンネルを有効にする
- DisplayMask
- MaskのTextureを描画する (確認用)
- Apply Mask to Siblings in Hierarchy
- 上記の設定を反映させる
雑感
- 複数コンポーネントに対しMask掛ける事が出来るのが良い
- Shader書けない民は一旦これで、という感じ
- Sample内に含まれている「ロゴにスペキュラ掛ける」みたいな用法も出来て面白い
- セールなので勢いで購入したけど類似アセット結構ありそうなのが懸念...!!
ゲームを本格的に開発する前に考えてみたいこと
- 個人的にこんな開発してみたいなぁ、ということを最近考えたのでメモ
- コンテキストとしては「中期的な運用を見据えたスマホゲームを開発するプロジェクト」
- コンシューマ/カジュアルゲー等には適応出来ない箇所や不向きな内容もありそう
前提条件
- プロダクトを立ち上げるにおいて絶対に変更出来ない条件を考慮/明示する
- 例えば、納期/予算/人/技術要因 ... etc
コアバリュー
コアバリューとは
- コアバリューはそのプロダクトにおける中心価値
コアバリューの一例
www.slideshare.net
- 「消滅都市」が持つコアバリューは「人の感情を動かすために手段を選ばない」みたいなことを外部勉強会で聞いた記憶がある
- どういう手段で達成されているかは以下のスライドから垣間見れる
- それぞれのイベントに対する入れ込み具合、バグのような演出... etc
コアバリューを定義する事のメリット
- PMはコアバリューの達成に際しタスクの優先度を適切に設定出来る
- PMはメンバーに対してプロダクトの生み出す価値を共有出来る
- メンバーがプロダクトに対して思い描くものが異なると開発時に混乱を招く可能性がある
- アクティブなメンバーはコアバリューを満たすために主体的にアイデアを出す
- コアバリューはプロダクトの持つ武器となり、他のアプリとの差別化が図れる
目標とゲームサイクル/ビジネスモデル
目標
- ゲームにユーザが没入し継続するための動悸を提供する
- 目標がクリアになっていないとユーザは早期に飽きる (作業感)
- 直近目標/中間目標/長期目標を用意する
- [直近目標] ゲームのメインとなる動作
- [中間目標] 直近目標を飽きさせず長期目標まで継続させるための目標
- [長期目標]プレイヤーに最終的に達成させたいゴール
ゲームサイクル
- 目標に関しては達成するためのボトルネックとなりえる部分を明示する
- 各目標/ボトルネック/解決手段を可視化して紐付けたのが「ゲームサイクル」
- この時点でイベントの位置づけ等、長期的な運用プランも考慮出来ると良さそう
ビジネスモデル
- 目標達成におけるボトルネックを解消する手段としてビジネスモデル (課金ポイント) を設定
- ユーザは目標達成のために納得感を持ってお金を払う事が出来る
ペルソナ
ペルソナとは
blog.kairosmarketing.net tech.pepabo.com
- 製品やサービスの理想の顧客の人物像のこと
- ペルソナを定めるとユーザ視点での意思決定がしやすくなる
ペルソナについて思うこと
- チームメンバーもしくは身近に居る人(例えば社内にいる人)を設定したい
- 後述のテストプレイにおいて有力なデータが取れる存在
- 意思決定に迷ったらその人に聞けば良い
プロダクトレビュー
- 自分が考えたものについて、良い物が出来たと思い込みがち
- これまでの決定事項について論理破綻や抜けが無いか見てもらう機会
スクラップアンドビルド/テストプレイ
水を求めて〜蜃気楼に負けないゲーム開発〜 from dan5
www.slideshare.net
- ゲームにおける「楽しさ」を見つける難しさ
- 面白いと思ったゲームも実際に作ると面白くない
- アイデアの7割は蜃気楼
- 後戻りと再出発を許容する必要がある
- 開発終盤で「なんか違うな」となっても取り返しがつかない
- 「これだけ時間をかけて頑張ったんだから失敗しても仕方ない」を防ぐ
- 再出発のダメージを減らすために意識すること
- YAGNI原則 : https://ja.wikipedia.org/wiki/YAGNI
- KISS原則 : https://ja.wikipedia.org/wiki/KISS%E3%81%AE%E5%8E%9F%E5%89%87
- コアバリューに基づくゲームサイクルに最低限必要な機能実装のみを行う
- テストプレイ
- ペルソナを中心にFBを貰う
- そして高速でスクラップアンドビルド(作り直し)
スモールスタート
- 少人数(〜5人)でのスタートが理想
- 人数が多い場合にはコミュニケーション/意見が拡散しがちで収束に難
- スクラップアンドビルドを許容する場合、角度が低い内はコストをなるべく小さく収める
- これは行ける!と思ってから規模を拡大しても遅くない