kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

Unityアセットストアに"Easy Camera Switcher"をリリースしました。

かずまです。
今回UnityのアセットEasy Camera Switcherをリリースしました。

定価は$20なのですが、リリース記念ということで、現在$15です。

どんなもの?

Unity WebGL Player | EasyCameraChanger

サンプルシーンはこちらです。

カメラを超簡単に切り替えられるものになっています。
やり方は簡単、空のオブジェクトをシーンに追加して、そこにスクリプトを貼り付けるだけ!

自動的にカメラを読み込んでくれるので、あとはデフォルト(スタート時のカメラ)
あとはどのボタンで切り替えるか、フェードイン、アウトさせるか、何秒でフェードさせるかを設定するだけ。

簡単ですね!

アップデート

今後つける予定の機能としては

  • 切り替え順を並び替えられる
  • フェードのバリエーションを増やす
  • VRなど他のカメラにも対応

させる予定です。

どんなシーンに使える?

  • GameJamなどの時間がないケース
  • ささっと映像を作りたいとき
  • 車の視点変更などのゲームでよくあるカメラ切り替え

他にも様々なシーンで使えます。
結構毎回実装するのが大変なので、これ一つ買うだけで、素晴らしく時間の短縮にもなります!

アセットストアの中では一番簡単に切り替えられるはずです!

Explanation in English

The list price is $ 20, but as a release memorial it is currently $ 15.

What thing?

Camera can be switched to super easy.
The way is simple, simply add an empty object to the scene and paste the script there!

Since it will automatically load the camera, the default (camera at start)
Then just set which button to switch, fade in and out, and how many seconds to fade.

It's easy!

Update

As a function to be added in the future

  • Switch order can be rearranged
  • Increase variation of fade
  • Supports other cameras such as VR

We are planning to do.

Which scene can you use?

  • There is no time such as GameJam
  • When you want to make a picture quickly
  • Frequent camera switching in games such as car view change

It can be used in various other scenes.
Because it is difficult to implement quite often every time, buying this one is wonderful and will also save you time!

It should be the easiest to switch among asset stores!

Sample


Link

神戸にいってきましたが...。

かずまです。

先週は神戸にいってきました。
素晴らしくたのしかったです。一部を除いては...。

その一部はごはんです。
せっかく神戸に来たし、神戸牛とか、甘いもの食べたいなぁって思ってたのですが、、、
全然良さそうなお店見つからず。

基本私は結構店選びが苦手なので、

ぐるなび
「Retty」
食べログ

などのグルメサイトで一から検索しても全くいいお店にたどり着いたことがない民なのです。
残念ながら。

しかし、誰かに教えて貰ったお店はかなり行きやすくて、
かつあたりが多いので、いつも教えてもらったらGoogleMapにお気に入りに入れて近くに来たときに行くようにしてます。

そこで!皆さんに協力してもらいたい&使ってください!ということで
スプレットシートに行ったお店でうまかったのがあれば共有してもらいたいのです!

docs.google.com

今のところ一件も入っていませんので、
よろしくお願いします...!!

僕にお力をください!都道府県は問いません!

collection_check_boxesを使ったときにconfirmationのページをどう実装するか

かずまです。

今回collection_check_boxesを使って、formを作っていたときにハマったのでメモします。 ただ、この実装は本当に正しいかは微妙です。参考までにです。

ページの流れ

new -> confirmation -> complete

となっていて、ModelController内にそれぞれのメソッドを生やしています。

blog.kazumalab.com 前回の続きで、has_manyの関係のチェックボックスは簡単に扱えるというメモをのこしました。

collection_check_boxes

複数のチェックボックスを簡単に実装してくれるHelperです。

= f.collection_check_boxes :child_model_ids, ChildModel.all, :id, :name

こんな感じで実装したとします。 もちろん確認ページではチェックボックスは出さないのでhiddenにするのですが、 ただhiddenにするだけはダメでした。

フォームのパラメータとしては

child_model_ids["", "1", "2"]

この形で欲しいわけです。 それに合わせて、

= f.hidden_field :child_model_ids, multiple: true, value: nil
- @model.child_models.each do |child_model|
  = f.hidden_field :child_model_ids, multiple: true, value: child_model.id

こう書いてあげればできました。 multiple: trueを書かないと配列にしてくれないのでつけます。 これでcollection_check_boxesのhiddenを実装ができたと思います。

追記

value: nilを追加する必要がありました。

こんな感じ! なにか間違いがあればご指摘ください!

has_manyの関係でCheckboxを扱うのが超便利だった。(知らなかった)

かずまです。

今日色々1対多な関係で、Checkboxで複数選択させたい場合、 結構面倒だと思ってたのですが、意外となにもしなくてRailsすごい!ってなったのでメモしておきます。

使うのはcollection_check_boxesを使います。

なお、今回は

  • メインのモデルをModelとする
  • ModelはAssociationModelを複数持つ

を前提とします。

Viewでゴニョゴニョ定義します。(引数2つ目のインスタンスは適宜Controllerで作るなりしてください。) すると、checkboxが現れます。

# model/new.html.haml
= f.collection_check_boxes :association_models_ids, AssociationModel.all, :id, :name

あとはControllerのStrong Parameterで

params.require(:model).permit(
    ....
    association_model_ids: []
)

このようなにidの配列をとればOK! あとはいつも通りインスタンスを生成するときにparamsを渡すと中間テーブルを発行してくれる。 便利!

無駄なコードを書かなくても済むのはいい!

結構やりそうなこと

  • 複数のIDをeachなどでぶん回してbuildするとか?(まず今回これやってました)
  • accepts_nested_attributes_forを使う?

参考サイト

ちょっと使い方までは…というところ。 railsguides.jp

とりあえずドキュメントを見ればよかったと…。 だけど公式ではUpdateの例が上がってて、ほんとにこれでいいの?ってなったので実際にやってみました。 ActionView::Helpers::FormOptionsHelper

Lint/AmbiguousBlockAssociationで怒られたお話

かずまです。

Railsで開発していて、Haml-lintで怒られたので、その対処法のメモを残しておきます。

今回怒られたケース

  • formの中のSelect box
  • i18nを使いたいからmapを使う
= f.select :season, Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] }

こんな感じで書くと、怒られる。

Lint/AmbiguousBlockAssociation: Parenthesize the param
Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] }
the block will be associated with the Model.seasons.map method call.

ググっても出てこないので、解決してみる。

解決方法

selectとmapのメソッドが曖昧になってるからselectの後ろに()入れろよみたいな感じみたいなので、

= f.select(:season, Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] })

こうやってすればOK!
これでhaml-lintに怒られないで済みます。

ちゃんとエラーを読んでもなかなかわからない、ググっても出てこないのは結構つらいです。