読者です 読者をやめる 読者になる 読者になる

ただの適当な開発記

会社勤めしつつUnityでアプリ作ってる人の雑記

Inspector上の反復作業はなるべく減らし隊 ~Reset編~#Unity

Unity

UnityでInspector上で同じような操作を何回もするケースって結構あると思います。

個人的に最近一番多かったのが、
Trigger検知をしたいオブジェクトに対してColliderとRigidbodyをアタッチし、Collision判定と重力をオフる操作
です。

f:id:cocokyoro:20170320015749p:plain

こういうやつ。

これ毎回手作業でやってると、いつか絶対付け忘れたオブジェクトが出てきます。
で、それに気づかず実装して予期せぬオブジェクトが物理的な当たり判定を持っちゃってどっか飛んでく、といったバグが起こりうるわけです。

こういうのを起きないようにするためにPrefabがあるのでは?という意見もあると思いますが、作成したPrefabの抽象度によりけりだと思うので、今回はInspectorで操作せざるを得ない状況ということで。

Inspector上での反復作業を避けるには幾つか対応方法はあります。

そのうち自分がよく使うのはReset関数+RequireComponentでInspector上の設定をスクリプトからやってあげるというもの。


Resetの使い方例

RequireComponentで指定した型のComponentが自動でアタッチされます。

[RequireComponent(typeof(Collider))]

とやると下記のようなエラーがでます。

f:id:cocokyoro:20170321011018p:plain

Colliderじゃなくて継承先のColliderクラスを指定してあげましょう。

そして、ResetはGameObjectにスクリプトがアタッチされた瞬間に呼ばれます。
Resetの中で値を設定してあげればInspectorを直接いじる必要はありません。
Unity - スクリプトリファレンス: MonoBehaviour.Reset()

> Reset はインスペクターでデフォルト値を設定するときにもっともよく使用されます。

リファレンス的にもこの使い方を推奨しているようです。

複数ボタンがスクロールする画面を作るときに便利な「MultiButtonScroller」をリリースしました#Unity #AssetStore

リリースしました

UnityAssetStoreに自作アセットの第2段をリリースしました

値段は15$になっております

経緯

カジュアルゲームを作るときに毎回ステージ選択画面を作るのが面倒なので、レイアウトを簡単に設定できてメニューを作れるアセットがあったらいいなということで作りました。

f:id:cocokyoro:20161214234116p:plain
こんな画面とか

f:id:cocokyoro:20161214234127p:plain
こんな画面とか

f:id:cocokyoro:20161214234152p:plain
こんな画面が簡単に作れちゃいます


チュートリアル

チュートリアル動画はこんな感じです

レイアウトを楽に作りたいという方は是非お買い求めを!


小話

実装

今回のアセットはDataDrivenでどんなdataクラスを定義してもうまいこと動くような作りになってますが、ここはEnhancedScrollerというアセットを参考にしています

このアセットも様々な要素をスクロールさせるためのものなんですが、汎用的な作りになっているため自分で自由なビューとデータを用意して使用することができます。
こちらもおすすめです。

申請

今回は2回のリジェクトの後、3回目の申請で通過しました。

ちなみに審査はUnityTechnologiesなので英語です。

・1回目
ドキュメントがわかりづらい

→ ドキュメントを消して動画のチュートリアルを作成

・2回目
動画のチュートリアルがあるのはいいことだと思うんだけども、パッケージ内に含める文章のチュートリアルをしっかりつくってくれ。pdfかtxtかrtfでよろすく。

パワポチュートリアル作ってpdf出力したものをパッケージに含める

って感じでした。

前回↓は7回くらいリジェクトされたのでそれよりはスムーズにいきました。

今後カジュアルゲーム作るときは自分もこのアセットをどんどん使っていこうと思います!

次のバージョンではスワイプに対応する予定(むしろ今は対応していないのかというのはさておき)

てなわけで以上!

2016年11月の収益

Unity AssetStore

12月の3分の1が過ぎてしまったタイミングで先月のアセットストアの収益報告です

収益

はいドン

f:id:cocokyoro:20161210110424p:plain


先月の2倍ということですた丼が2杯分買えますね。


今月はこちらのアセットについて変更したのはチュートリアル動画を追加したくらい。

www.youtube.com

もともとこの動画は一番最初のv1.0.0を申請したときから入っているはずだったのですが、Draft情報を間違って削除してしまったので追加されたのは1ヶ月半後でした。もっと早く気づけばよかった。。


12月

先月次のアセットを申請したのですが、これがなかなか通らない(;´Д`)
現在2回リジェクトされております。

チュートリアルのurlとして下記の記事を記載しました。
cocokyoro.hateblo.jp

しかしAssetStoreの中の人からは次のような返答が

We ask that you include offline documentation in your package in the format of .pdf, txt or rtf. It is okay to have more extensive online documentation but the offline documentation should include enough instruction for the user to understand the basics of the package.

pdf,txt,rtf 形式のチュートリアルを作ってパッケージに含めてちょうだいとのことで、文字のチュートリアルをこれから作るところです。めんどくさい

年内に残り2つのアセット申請したいでふ

開発合宿@山喜旅館

この週末に山喜旅館に開発合宿に行ってきました。

参加者は大学時代のサークルのメンバー4人。

伊豆伊東温泉の格安旅館、会席料理と24時間入浴の自家源泉、山喜旅館 TOP

この旅館は元祖開発合宿旅館らしく、いろんなとこで既に紹介されてますね。

www.find-job.net

1日目

この旅館はJR伊東駅が最寄りです。
f:id:cocokyoro:20161126150250j:plain

1日目はこちらで開発開始。
f:id:cocokyoro:20161126151455j:plain


驚くべきことに普段自分が使ってるツールの会社の皆様(ぼかし)もこの日に宿泊だったようで、食事の時に声をかけさせていただきました。

施設自体はとてもいい旅館だったのですが、会議室を予約し忘れるという痛恨のミスを犯してしまいました。
会議室でみんなでもくもくというのを想定していたんですが、結果旅館の一部屋でみんなでもくもく開発することになりました。館内どこでもwifiが繋がったのが救い。
延長コードやマルチタップは完備されていたのは流石でした。

宿泊した部屋はオーシャンビュー。
f:id:cocokyoro:20161126165642j:plain

というか、めっちゃ海が近い。
歩いて3分くらいで海にいけます。

夜ご飯はこんな感じ。
f:id:cocokyoro:20161130165926j:plain
(゚д゚)ウマー

夜は息抜きにみんなで散歩に行きました。

f:id:cocokyoro:20161126202547j:plain

そんなこんなで、深夜1時くらいまで作業。


2日目

10時にチェックアウト
会議室を予約していたらチェックアウト後も昼過ぎまで使用できるみたいです。

次なる作業場所を求めてとりあえず熱海へ。

「熱海 wifi

で検索して出てきたカフェに狙いを定める。


着いたのはこんな感じの小洒落たカフェ。

f:id:cocokyoro:20161127131028j:plain
caferoca.jp
とてもいい感じのカフェでした。

こんなオシャレ空間でも、どかどかとキーボードタイピングをする4人組。

小一時間ほど作業をした後、昼食を摂り次の作業場所へ。
ちなみに昼食は海鮮丼を食べようとしていたが値段や混み具合の関係でなかなか決まらず結局地元の人が行ってそうな焼肉屋で済ませることに。肉が美味しかったのでよし。

次の作業場所に決まったのはこちら

atami.ooedoonsen.jp

お台場では有名な大江戸温泉物語の熱海版です。

入館時に「お台場の大江戸温泉と当館はコンセプトが違いますので、お台場のようなくつろげるスペースはございません」という説明を何回か受ける。過去に何かクレームがあったのだろか。

実際入館してみると、ちょうどいい作業スペースはあるわ卓球台はあるわ露天風呂はオーシャンビューだわで最高でした。ここで日帰り入浴規定の3時間を過ごす。

その後熱海駅のカフェや土産屋で時間を潰し、踊り子号みたいな電車で東京へ帰ったのでした。


成果物

で、肝心の成果物ですが。
なんかぷよぷよテトリスが合体してるやつを作ってます。
ブロックの積み重なり方はテトリスで、消え方がぷよぷよ。そして、指定したタイミングでだけぷよぷよの落ちる動作が発動するというもの。

webGLでビルドしますので少々お待ちを(;´Д`)



次回は1月に開催予定
次はちゃんと会議室を抑えよう

Sinatra+Herokuでgithubのwebhookレシーバをつくる

久しぶりにunity以外の内容です
githubでプルリクエストをマージした際にそのイベントを取得してどうこうやりたかったので、書いてみた
一番最初はgoogle app scriptのdoPostをつかってレシーバにしようと思ったけど、これがどうにもうまくいかない..
しょうがないのでherokuサーバーを立ててそこで取得することに

今回は簡易的なものでいいやということでRuby on RailsではなくSinatraで書くことにしました

Heroku上でRubyを動かす手順は公式ページ通りにやればOK

devcenter.heroku.com

Deploy your application to Heroku

ここの手順までやればOK

上記ページ通りにやると次のようなコードを書いてあると思いますが、これを書き換えます

require 'sinatra'

get '/' do
  "Hello, world"
end

今回はただgetで叩くだけではなく、post通信で送られてきた情報をつかってどうこうしたいので、

require 'sinatra'

get '/' do
  "Hello, world"
end

post '/notify_merged' do
  #何かする
  "post result"
end

こんな感じでpostの受け口を書く。

受け口が出来たらgithubのwebhookに登録する。

githubでsettings -> Webhooks -> Add webhookを選ぶ

f:id:cocokyoro:20161123180633p:plain

PayloadURLには「herokuのurl+postのパス」を記載
上の例でいうと https://それぞれで違う.herokuapp.com/notify_merged
という感じ

次はwebhookのトリガーの設定。
今回はプルリクエストに関するイベントだけを受け取りたいので次のように設定

f:id:cocokyoro:20161123181344p:plain

これでプルリクエストに関連する動作があるたびにイベントが送られます。

では先程のコードの方に戻ってプルリクのイベントを受け取ったあとの処理を書きます。

プルリクエストのタイミングでgithubからは以下のような情報が送られてきます。
Event Types & Payloads | GitHub Developer Guide

今回はマージリクエストのタイトルとコメントをとってきたいので、こんな感じ

require 'sinatra'

get '/' do
  "Hello, world"
end

post '/notify_merged' do
    body = request.body.read
 
   if body == ''
      status 400
    else
      parsed = JSON.parse(body)
      merge_info = parsed['pull_request']
      action = parsed['action']
      merged = merge_info['merged']
      #今回はクローズしてかつmergeされたプルリクの情報を拾う
      if(action == 'closed' && merged)
        title = merge_info['title']
        comment = merge_info['body']
        var response = "タイトル:"+title +"/コメント:" + comment
        #responseを使って何かするときはここで
        response
      end
    end
  end

これをherokuにpushしたあとに実際にプルリク投げて取り込んでみると..

f:id:cocokyoro:20161123221407p:plain

こんな感じでレスポンス返ってきます

以上!

Tutorial:MultiButtonScroller

Description


ScrollButtonGenerator is Asset which supports to make scrollable UI button elements.
You can use this asset on several genre games like social game and casual game.
It's easy to embed your project because Scroll Button Generator's main logic and view and model are completely separated.

Requires DOTween or DOTween Pro to be imported and setup in the project before importing the ScrollButtonGenerator package.


Tutorial


[tutorial]MultiButtonScroller

2016年10月の収益

早いもので10月も終わりですね。
2016年も残り2ヶ月。
会社では今のプロジェクトが始まってからちょうど1年が経ちました。
新規開発は大変なんですな。
最初にいたプロジェクトは開発期間半年でリリースしたのを思い出し、かと思いきや数ヶ月でクローズしたのも思い出し。ネイティブゲーム開発はやはり暗中模索ですね。

やっぱり個人で収益を稼がなきゃ今の時代やってけないってことで今月の収益。

収益

f:id:cocokyoro:20161102020844p:plain

!?

今月は$10(2つ)しか売れませんでした\(^o^)/

やはり先月の売上は新着おすすめ的なところに取り上げてもらっていたおかげのようです(´・ω・`)
30%はUnityが引くので、手元に入るのは$7。
$7は現在730円。
私が愛してやまないすた丼。それの飯増しがちょうど買える値段ですね。
sutadonya.com

肉増しは780円なのでギリギリ買えません。

ちなみに普段私はミニ丼にして肉増しにするのですが、米はそんなにいらないから肉がたくさん食べたいというときにはこちらをおすすめします。
ミニ丼(530円)+肉増し(150円) = 680円

10月の収益はこちらに使おうと思います。


11月

11月中に次のアセットをリリースします。
というか実装自体はもう終わっているのですが、ドキュメントやらチュートリアルやらの作成に時間がかかっています。

n×m個のボタンUIを生成できるアセットなんですが、「uGUIのGridLayoutGroupよりも使いやすく」を目指して作ってます。

ReferenceFinderが一見して名前からどんな機能があるのか分かりづらかったので、今回は使用用途を狭めて名前をつけようと思ってます。

今年中に残り2つのアセットをリリースするのが目標ですが、12月はおそらく会社のプロジェクトのタスクがやばいため今月中にかたをつけなければと言ったところです。