ぱふの自由帳

ぱふの技術ブログ。メインはUnity。最近はUnity1Weekの放送してます。良ければフォローお願いします、、

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にならないように設定する”のが最も手軽だと思います。