ぱふの自由帳

週3更新(火・木・日)を目指すUnityブログ。良ければフォローお願いします(`・ω・´)

【Rails】bundle installとbundle updateの違い

はじめに

Railsの脱入門者を目指しています。

今回はbundle installbundle updateの違いを調べたので未来の自分のためにも記事にしてみました。

bundle install

Gemfile.lockを元にgemをインストールする。
この時、"Gemfile.lockに書かれていないがGemfileに書かれているgem"を見つけるとGemfile.lockを更新しつつgemをインストールしてくれる。

最低限の必要なものだけをGemfile.lockに追加してくれるイメージ。

bundle update

Gemfileに基づいてgemのインストールを行い、Gemfile.lockも更新する。

Gemfile.lockの中身を最新版のgemに一新するイメージ。

最後に

細かい使い分けは不明ですが、bundle updateは全てを一新するので安易に使うと「あれ。動かなくなった。」ということになるらしいです。

Gemfileにgemを追加した時は基本bundle installを使用しておけば良さそうです。

【unityroom投稿作品】Worker vs Week を振り返る

はじめに

今回はunityroomに投稿した作品「Worker vs Week 」を振り返る記事です。興味ある方はお付き合い下さい。

ゲームができるまで

- 0〜構想 -

  • 元々、社会に物申す系のアプリ案がいくつかあった

  • 「おすすめ アセット」で検索した際に弾幕生成アセットが紹介されていた

という流れから、ブラック企業をサラリーマンが倒すSTGを思いつきました。
その後、サラリーマンがツラい1週間を乗り切るまで何人犠牲になるのか競うSTGが面白いのでは?という考えに至り原型ができました。(この時点では月曜日が普通の弾を打つだけのゲームでした。)

- 実装初期 -

「まぁとりあえず動くものを作ってみるかー。」的な感覚で作り出しました。ですが、「月曜日の弾どうしよう...。ツラそうor苦しそうな弾ってなんだ...?」って悩んだのでとりあえず「疲れたって文字にしとくかー。」的な感じで”疲”という文字を弾をしてみました。

す・る・と...。これがなんとも言えぬシュールさ!画面見るだけで疲れそうなSTGが目の前に!

f:id:PafuOfDuck:20171130051611p:plain

- 〜実装終盤 -

文字を弾にすることが確定したのでゲームの見た目もシンプルにすることにしました。キャラもピクトグラムにしてみました。
後の細かいことはゲームをプレイしてもらえれば分かると思います(ステマ

実はTextMeshProとDOTweenでハマったんですが...どこでハマったのか忘れたので、思い出したら記事に直しておきます。

- 実装における感想 -

今回の実装する中で驚いたのはDOTweenですね。「日本語ドキュメントがiTweenより少ないから...」という理由でiTweenから乗り換えるのをビビってましたが...いざ使うと便利すぎて...もっと早く使っておけば...orz

例えば、オブジェクトを上、右、下、左の順に動かしたい!という要求があるとします。
iTweenだと時間を計算して上手く嚙み合うようにしたり、oncompleteで無理やり繋いでいったり...という方法が思いつきますが面倒ですよね。
一方、DOTweenは...Appendで動作を繋いでいくだけなんです!

iTweenを悪く言う訳ではありませんが...DOTweenの方が他の点を考慮しても圧倒的に使いやすかったですね(`・ω・´)値を変更できるTo関数とか!

- 改善したい箇所 -

  • 難易度調整

  • 弾幕の綺麗さを追求したい&弾の種類も増やしたい

  • 下部に文字が出ているが、忙しすぎて読めないと思うのでどうにかしたい

  • ”プレイヤーがブラック企業の社長で、労基にバレない人数の犠牲に抑える”といった案を思いついていたので、そっちの方にシフトしたい

  • 絵付きストーリを曜日間に挟みたい。センスがないので今回は諦め...笑

  • 言わずもがなのランキング(スマホ版で実装すればいいやって思っちゃったのは内緒

- 今後は... -

スマホ版として少し詰めていく予定です。スマホ版出したいので広告突っ込んだり...

すでに続編の案もあったりします。笑
シミュレーション系でブラック企業の社長として何日間逮捕されずに経営できるかというゲームも作りたいなと(^∇^)そっちの方が皮肉がきいて面白そうかなと思っていたり...笑

アセットについて

unity1weekに参加した際にバウチャーを戴いていたのでエディタ拡張系を強化しました。買ったのはいくつかのサイトで好評だったけど、お高めで手が出なかったアセットです(`・ω・´)!

お高めだけど好評なので買ったエディタ拡張

  • Editor Console Pro

  • Odin - Inspector and Serializer

気になる方は使い方解説サイトやパブリッシャーが出している動画を覗いてみて下さい。



最後に使用した全てのアセットを以下に一言添えて紹介しておきます。
私自身、今回$150ぐらい有料アセットを購入したので有料なものが多いですが...

ちなみに、中でもおすすめするアセットには ! マークをつけています。

なお、今回は音楽のアセットを使用していません。理由としては【購入する楽曲の一部しか視聴できない】からです。視聴して良いと思ったものでも、他の楽曲が良いがは分からないので見送りました。
違法DL対策なのかもしれませんが、封入されているBGMやSEを全部聞かせて欲しいですね!

アセット紹介

-エディタ拡張-

・2DxFX: 2D Sprite FX !

Spriteにエフェクト付けることが出来る。Imageにも適応できるのでUIも綺麗になる。持ってて損はしないので余裕があればセールで手に入れておくと良い。今回ノイズ画面に使用。

・Editor Console Pro !

こーんな感じのコンソール画面になります!スクリプトが見えるのがとても便利!エディタ拡張の中でTopを争う使いやすさです!今回紹介するエディタ拡張ではトップのおすすめ度です!
f:id:PafuOfDuck:20171129093316p:plain

・Rainbow Folders

フォルダが色づきます!個人的にやる気が出ます。笑
f:id:PafuOfDuck:20171129093736p:plain

・Panic Button

無限ループを強制的にストップできます。

・Odin - Inspector and Serializer !

Inspectorが便利になります!一番お気に入りの機能は配列定義すると下の画像のように配列の順番を変更できる機能ですね!
f:id:PafuOfDuck:20171129095204p:plain

・Hierarchy Tag Icons

Hierarchy上でタグのついたオブジェクトにアイコンを表示できます。視覚的にタグのつけ忘れに気付けるので使用しています。

・Asset Hunter 2

Assetをお掃除してくれます。Asset内のデータ容量が軽くなるなー程度の認識しかありませんが一応使用している感じです (┐「ε:)

・Object Labels / Notes

オブジェクトに付箋が貼れますよ!少しエラーが出るのが気になりますが...

・DOTween Pro !

視覚的にTweenを設定できます。超便利。オブジェクトを曲線的に動かしたい時は必須レベル。

-スクリプト-

・UniRx - Reactive Extensions for Unity

今回初使用。そもそもイベント処理も初だったけど、イベントってすごい便利ですね!(`・ω・´)!

・Uni Bullet Hell

今回の弾幕を生成してくれました。オブジェクトプールも実装されているけど、GameObjectのActive自体を切り替えているのでSpriteとRigidbodyの切り替えより少し処理が重いのが惜しい。
改造しようとしたけど出来ませんでした...笑

-テクスチャ&マテリアル-

・Simple Vector Icons

twitterやランキングアイコンとして用いました。

・Modern & Clean GUI

GUIのスキンとして用いました。無駄が削り落とされているのでシンプルなGUIスキンを探している方にはおススメします!

-公式提供アセット-

・TextMesh Pro !

言わずと知れた有名アセット。今回初使用しました!
UIとしてではなくても文字を生成できるのが一番のお気に入り。

bundle installでpgのインストールエラーが出た時の対処法

タイトルにもあるようにbundle installでエラーが起きました。
途中部分を端折ってますが以下のようなコンソール画面が出ているはずです。

$ bandle install

Fetching gem metadata from https://rubygems.org/......
Fetching https://github.com/rails/webpacker.git
Fetching rake 12.1.0
Installing rake 12.1.0
.....
.....
.....
Fetching pg 0.21.0
Installing pg 0.21.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
.....
.....
extconf failed, exit code 1
.....
.....
An error occurred while installing pg (0.21.0), and Bundler cannot
continue.
Make sure that `gem install pg -v '0.21.0'` succeeds before bundling.

In Gemfile:
  pg

原因

pgをインストールするための関連ファイルが足りないことが原因です

環境

解決方法

$ brew install postgresql

上のコマンドで不足しているファイルをインストールしましょう。
これで$ bundle installを実行してもpgのエラーを吐かなくなると思います。

注意

extconf failed, exit code 1

がエラーに含まれていなければ直らないかもしれません。その時はMake sure that `gem install pg -v '0.21.0'` succeeds before bundling.の指示に従ってみてください。

【Unity2017.1】OnTriggerStay2Dが機能しない?!という現象を解決出来る(かもしれない)方法

はじめに

「あれっ...OnTriggerStay2D呼ばれない...。Rigidbody2Dは付いてる。そもそもOnTriggerEnter2Dは呼ばれてるじゃん!もう無理ぽ(´;ω;`)」
という現象を解決出来るきっかけになる記事かもしれません。

解決スタート

現象が発生する条件

以下の二つが同時に生じるとOnTriggerStay2Dが機能しなくなります。

・isTriggerがTrue
・Collider2Dを持つ双方のオブジェクトがどちらも動いてない

なぜ?

isTriggerがTrueになっているオブジェクトは動かないと(処理を軽くするために)sleep状態に入って物理演算対象から外れるようです。OnTriggerStay2Dは物理演算によって判定されているらしいので、双方のオブジェクトがsleep状態に入ってしまうとどちらも物理演算対象から外れてしまい、OnTriggerStay2Dの判定が行われなくなってしまうようです。

解決方法

「isTriggerを解除する!」という方法はあまりにも乱暴なので...他の方法を。

というわけで、Rigidbody2Dコンポーネント内のSleeping ModeをNever Sleepに変更してください。
f:id:PafuOfDuck:20171129072048p:plain

これでsleep状態に入らなくなるので機能してくれるようになるはずです。その代わり、デメリットとして計算量が増えてしまうので重くなる可能性があります。

おわり

この現象に出会う→解決までに6,7時間程度格闘してしまいました(´・ω・`。)
ちゃんとUnityは内部で計算量をカットするために色々してくれているんですねー。ありがたやー。

そういえば、2Dの内容になっていますが3Dでも一緒だと思いますよ...多分 (┐「ε:)

【Unity2017.1】RectTransformコンポーネントの Width や Height の値をスクリプトから変更する

はじめに

下の画像の赤枠の場所をスクリプトから変更する方法についてです。

f:id:PafuOfDuck:20171129063436p:plain

変更方法

下画像のようなオブジェクトを考えます。

f:id:PafuOfDuck:20171129062741p:plain

この時、以下のようなコードで実装できます。

// Inspectorなどから適当に取得してください
public GameObject panel;

void Sample(){
    float w = 任意の値;
    float h = 任意の値;
    panel.GetComponent<RectTransform> ().sizeDelta = new Vector2(w, h);
}

おわり

Unity使用して初めて必要になって調べたのでメモしてみました(`・ω・´)

DOTweenPathで設定した動きを一時停止する方法

はじめに

今回、視覚的に移動を設定可能ということで”DOTweenPro”を購入しましたー。現在作成中のシューティングゲームでの敵の移動パターンをGUIで設定できて便利です(`・ω・´)

で...本題です。以下の画像のコンポーネントをアタッチして設定したアニメーションってどうやって止めるの?となったので一時停止する方法をメモしておきます。

f:id:PafuOfDuck:20171127162002p:plain

一時停止方法

以下のコードで一時停止してくれます。

GetComponent<DOTweenPath>().DOPause();

動きを再開したい場合は以下のコードです。

GetComponent<DOTweenPath>().DOPlay ();

おわり

実はTwitterで解決方法を募集したんですが...ビックリするぐらいすぐに解決しました(`・ω・´)

答えてくださった方や拡散していただいた方々には頭が上がりませぬ。(┐「ε:)

Rayを飛ばすのはもう古い?!簡単にオブジェクトのクリックを検知だ!

はじめに

オブジェクトのクリックを検知する際にどうやっていますか?
ググったサイト見て、Ray飛ばすコード書いて...ってやってるあなたに朗報です!もっと簡単に実装できますよ!

さっそく実装

  1. まず動かしたいオブジェクト(今回はCube)を用意します。
  2. CubeにEvent Triggerを取り付けてAdd New Event Typeからイベントを選びます。今回はPointerDown(マウスボタンが押仕込まれた時に呼ばれるやつ)を選びました。
    f:id:PafuOfDuck:20171120132045p:plain
  3. UIのButtonと同じようにスクリプト内の関数を呼び出し設定をします。今回はCubeオブジェクトにCubeスクリプトをつけています。
    f:id:PafuOfDuck:20171120132052p:plain
  4. CameraにPhysics Raycasterコンポーネントを取り付けます。
    f:id:PafuOfDuck:20171120132101p:plain
  5. Event Systemがシーン状に存在しなければヒエラルキーウィンドウのCreateから作成します。 設定はデフォルトのままで構いません。
    f:id:PafuOfDuck:20171120132106p:plain

これだけです!簡単だと思いませんか?
以下が実行した時の動画です。 f:id:PafuOfDuck:20171120141306g:plain

注意!

二つほど注意点があります。

  • Colliderは必須
  • 2Dの場合はColliderとPhysics Raycasterを2Dのものにする。

おわり

どうでしたか?私自身、この前開催されたunity1weekの作品を開発中に知りました...。かれこれ半年ほどunityでRay飛ばし続けてきたんです...笑

PointerDown以外のイベントを駆使するとUIのボタンよりも便利なものになりそうですねー(`・ω・´)

ではでは。(┐「ε:)

unity1week投稿作品を振り返る

おはこんばんにちは。ぱふです。
ずっと参加するぞするぞ詐欺を行っていた"unity1week"に作品を投稿したので少しまとめたいと思います(`・ω・´)

メモ:作成期間3日(内、ガルパンを10時間ぐらい見ながら作業してました)

投稿作品

ホシつなぎというゲームを作成しましたー。ホシをロケットの軌跡でつないでいくミニゲームです。

f:id:PafuOfDuck:20171119172114p:plain

どんな感じのゲームか詳しく知りたい方は以下のリンク先で遊んでみて下さい。
注意:2017/11/19 20:00以降でないとゲームで遊べません。

”ホシつなぎ|無料ゲーム投稿サイト unityroom”

今回得た知識

Event Triggerの存在

2DのオブジェクトがクリックされたかどうかをUnity駆け出しの頃からずっと、クリックした場所取得して...ポジション直して...Rayを飛ばして...ってやってました。 しかーし、今回初めてEvent Triggerの存在に気づいたのです。
もぅ便利便利。ボタンより融通の利くものが簡単に作れちゃいます。気になった方はググってみて下さい。記事がいくつか引っかかるはずです。

WebGLでの日本語出力

Unityにデフォルトで入ってる"Arial"だと日本語表示されないよ!エディタ上では上手くいくから変なバグと勘違いしないように注意だよ!
まぁ、unityroomにも書いてるし大丈夫でしょ。

...。はい。大丈夫ではありませんでした。綺麗さっぱり忘れてハマりました。皆さん注意して下さいね。

unityroomの仕様

「めっちゃ使いやすくて草www」と草に草を生やしてしまうほど簡単でした(`・ω・´)b 管理人のnaichiさんが作ったのかな。すごいな。という小学生並みの感想しか出て来ませんが、簡単にアップロードできます。

神イベントの恩恵

現在、”unityroom & 1week GAMEJAMの投稿作品にアセットを登録してバウチャーをゲットしよう!”というキャンペーンが行われています。

これが強力です。バウチャー目的で量産すると審査に落ちる可能性がありますが、普通にゲームを作れば貰えそうな雰囲気を醸し出しています。
有料だけでなく無料アセットでもおkなのでアセット買うお金出せない...。って方は無料アセットを駆使してゲームを作ってみてはいかがでしょうか...!
グイグイ押してますが、Unityの回し者ではありませんよ...!笑

ちなみに、最高で 20ドル/アセット 貰えるので私はエディタ拡張買っちゃいました (┐「ε:)

バウチャーを貰えたら記事でおしらせしますね(`・ω・´)

おわり

ざっくりですが、unity1weekでの振り返りは終了です!
こうやってアイディア出したよ!的な記事を期待していた方すいません。

これを機に毎回参加していこうと思いますー。(超絶フラグ
ではAssetを紹介して終わります。ノシ

使用したAsset

-3Dモデル-

Space Asteroids

隕石の3Dモデル集

-エディタ拡張-

Rainbow Folders

他の方が使っているのを見て綺麗だったので導入。見栄えが良くなりやる気が少しアップする。(個人差があります笑

Panic Button

有名アセットの一つ?無限ループのフリーズから逃げ出せる。

Object Labels / Notes

オブジェクトに付箋貼る感覚で使えるのでとても便利。
ただ、Prefabから生成されたものにアタッチしようとすると「Prefabが壊れるぞ?」というメッセージが何度か出る....。(キャンセル連打で特に何も起こりません

Asset Hunter 2

Assetフォルダ内の使用していないデータを見つけ出してくれる。
ゲームに使用しているデータを「これ使ってないわー。削除っと(ポチー」とやってしまったとても悲しい経験から導入。

Hierarchy Tag Icons

Hierarchyウィンドウでタグに応じた画像を表示できる。
タグのつけ忘れやつけ間違いを見た目で判断できることも。

-オーディオ-

Into the Fire

「アセットキャンペーンもあるし有料なBGM買おうかな」と思った時に出会った。ミニゲームとして作った作品にぴったりだと感じて採用。ループにも対応しています。$2~3なら有料でも買ったと思う。

Zero Gravity

"Into the Fire"と同じ理由で採用。有料でも買ったと思う。

SciFi UI Sound FX

-パーティクルシステム-

Explosive Realistic VFX Texture Free

-スクリプト-

iTween

Tween系で最も(日本語の)参考サイトが多い。
しかし、私はDOTweenに乗り換える予定です...。

-テクスチャ&マテリアル-

2D Cartoon Missiles

スペースシャトルとして使用。煙のパーティクルが地味に嬉しい。

105 Colorful 2D Planet Icons

シンプルな惑星が想像していた世界観と合っていたので採用。105というたくさんの惑星があるのも嬉しい。

GalaxyBox 1.0

このゲーム実は最初の段階では3Dにしようと思っていたのでSkyboxを採用していた際の名残(笑
GalaxyBox 2.0もあるのでそっちものぞくと良い。

-Unity提供アセット-

Unity Samples: UI

誰もが一度見たことはあるハズ。ついに宇宙ものを作成したので採用。

"Look rotation viewing vector is zero"というログを吐くバグ

下の写真のような感じでログが大量に出ました。(おそらくバグです。

f:id:PafuOfDuck:20171117151122p:plain

発生条件

以下を満たした時に発生するのを確認しています。

  • Unityが2Dモード
  • Canvasの子オブジェクト(Aと名付けます)でRect Transformの"Width / Height"の片方が0
  • Hierarchy内でAの子オブジェクトを選択する

解決方法

”Rect Transformの"Width / Height"の片方が0にならないように設定する”のが最も手軽だと思います。

string型をint型に変換する【Unity】

私「文字列を整数に直すぞー。キャスト変換とか慣れたもんよ。」

int num = (int) "123";

私「よゆーよゆー。」

Unity「Cannot convert type 'string' to 'int'」

私「...。」

というわけで文字列を整数に直す方法を紹介します。

変換方法

以下の方法で変換できます。他にもあるとは思いますが...。

// 方法その1
int num = int.Parse("123");

// 方法その2
int num = Convert.ToInt32("123");

おわり

数値から数値ぐらいの簡単な変換なら()で変換できるんですかねー。 ちなみに、変換するときのオプションが指定できるのでググってみてください(`・ω・´)