ぱふの自由帳

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

【unity2017.1】emissionで3Dオブジェクトを光らせる

はじめに

今回は静的な3Dオブジェクトを光らせ、静的な3Dオブジェクトに影響を与える方法についてです。動的な3Dオブジェクトには使えませんのでご注意を!

実装

  1. Materialを新規に作成します。
  2. 光らせたいオブジェクトに作成したMaterialをアタッチします。
  3. materialの設定からemssionを有効化します。
    f:id:PafuOfDuck:20180116153207p:plain
  4. 光らせたいオブジェクトと光の影響を受けたいオブジェクトをどちらもstaticにします。
    f:id:PafuOfDuck:20180116153247p:plain
  5. 光ります。
    f:id:PafuOfDuck:20180116153304p:plain

おわりに

光る側も光を受ける側もstaticにするというのを忘れずに...((ハマりました!

また、2Dの光らせ方は後々記事に直すと思いますので気になる方は確認してみてください。

【Rails】Font Awesomeの使い方

はじめに

Font Awesomeというサービスを知っているでしょうか?Webアイコンを使用したいときにちょうど良いサービスです。
f:id:PafuOfDuck:20180106233504p:plain

今回はこのサービスの導入〜使用までを紹介したいと思います。
注意:Railsでの導入方法です。Rails以外ではこの方法は使えません。

導入〜使用方法

  1. Gemfileにfont-awesome-railsを追加する
    gem 'font-awesome-rails'のように記述してください。

  2. bundle installを実行

  3. app/assets/stylesheets/application.css*= require font-awesomeを追加
    デフォルトで大量にコメントアウトされている箇所に記述してください。

    --参考画像--
    f:id:PafuOfDuck:20180106234308p:plain

  4. html内に<i class="fa fa-twitter" aria-hidden="true"></i>を記述
    これで、アイコンが表示されるはずです。

今回の例ではTwitterのアイコンが表示されます。他のアイコンが使用したい方は公式サイトから好きなアイコンのページに飛んで、用意されているコードを使用しましょう。

おわり

RailsはFont Awesomeの導入がとても簡単なので、是非使用しましょう!

プロver.もありますので気になる方はご確認を。では〜。

【Rails】uninitialized constant hogeController というエラーが出たときに確認すること

はじめに

タイトルにも書きましたが、uninitialized constant hogeControllerというエラーが出たときに確認すると良い事柄をまとめていく記事です。

確認すべき事項

  • コントローラのファイル名とクラス名が一致しているか
    ファイル名がhoges_controller.rbであるにも関わらずファイル内で定義しているクラス名がHogeControllerであればエラーが出ます。

  • route.rbに定義したコントローラ名/アクション名が正しいか
    hoges#actionと書くべきところをhoge#actionと書いてしまうとエラーが出ます。

おわり

他のエラーパターンが見つかり次第追記しますー。

【Rails】画像を表示する方法

はじめに

今回はサイトに画像を表示する方法です。
htmlだと

<img src="sample.jpg" alt="画像説明">

と書きますね。

では、Railsではどのように書くのかというお話です。

Railsでの書き方

『百聞は一見にしかず』ということでコードをペタッと。

<%= image_tag "sample.png", :alt => "画像説明" %>

これではじめにの箇所で紹介したhtmlのコードと同じ働きとなります。

オプション

せっかくなので一つだけオプションを紹介しておきます。

  • 画像のサイズを指定
    :size => "16x16"

使用上の注意としては掛け算の部分が英字の"x"である点ですね。

その他のオプションはこちらからどうぞ。

おわり

%= %を忘れないようにしてくださいね!では〜。

【Rails】GemfileとGemfile.lockの違い

はじめに

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

今回はGemfileGemfile.lockの役割の違いを調べたので、とーーーっても簡単に紹介します。詳しい違いが知りたい方は他の方の記事をググって探して下さい。笑

Gemfile

アプリを作っている人が使いたいgemを書くファイル。

Gemfile.lock

必要な全てのgemが記述されているファイル。

Gemfileに書いたgemを動かすために必要なgemの情報も詰まっている。

おわり

使いたいgemを書くのがGemfileGemfileに書かれているgemを使用するために依存関係にあるgemまで書いているのがGemfile.lockです。

Gemfile.lockあると便利なの?」みたいな話は別の記事を分けたいと思います〜。ではでは。

【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使用して初めて必要になって調べたのでメモしてみました(`・ω・´)