mikan_daisuki’s blog

IT系サラリーマンの日記。前職ではスマホゲームを、現在はアプリを作ってます。



uGUI (UnityのUI機能) の使い方まとめ

 

はじめに

今更ながらuGUIを使うようになったので、

スムーズに開発できるように、使い方をまとめておこうと思います。

といっても、まとめてくれているサイトや記事がいっぱいあるので

リンク集に近いものをまとめます。

をまとめると使いやすいかも、ということで。

uGUI入門

uGUIとは

そもそも、UnityではUI機能のことをuGUIとは呼んでいません。

Unity4.6から提供された、UI機能のことを周辺の界隈の人たちが"uGUI"と呼んでいるようです。

由来は調べてみましたがわかりませんでした。Unity GUIとか?

チュートリアル

www.metalbrage.com

これを順番に読んでいけば入門はOK、というすばらしい内容です。

公式ドキュメントにはあまり良いものがなさそうなのでこれを読みましょう。

公式のサンプルプロジェクト

さすがに上記だけだと各パーツの作り方はわからないので、

https://www.assetstore.unity3d.com/jp/#!/content/25468

上記のAsset Storeをダウンロードしてみましょう。

  • テキスト
  • ボタン
  • スライダー
  • ラジオボタン
  • セレクトボックス
  • フォーム
  • スクロール

といった基本的なUIパーツの使い方がわかります。

Controls.unityをみてみるのがオススメです。

逆引きuGUI

とりあえず作り方を知りたいときはこっちを読みます。

テキスト

テキストを表示する

テキストを表示させるのに、Canvas, CanvasScaler, RectTransform, CanvasRenderer, Textと、たくさんのコンポーネントを使わないといけなくて、結構大変です。

hiyotama.hatenablog.com

こちらで、一通り必要な操作がわかりやすくまとめられています。

テキストを一部装飾する

表示するだけでなく、装飾したいこともあるはずです。

全ての色を変えるのは簡単ですが、一部変えたいときもある。

docs.unity3d.com

そんなときは上記を読みます。

htmlタグのように<hoge>ほげ</hoge>と入力して部分的に装飾することができます。

ざっと現状(2015年1月)のサポート内容を以下に記しておきます。

  • b: 太字
  • i: イタリック
  • size: 大きさ
  • color: 色
  • material: マテリアル (上級)
  • quad: 画像を埋め込める (上級)

画像

画像を作る

画像を作る際もいくつか注意ポイントがあったり、

小さな画像は、適切な単位で1枚にまとめることで軽いアプリを提供できます。

下記を読むことで正しい画像の作り方を確認できます。

hiyotama.hatenablog.com

画像を表示する

画像の表示方法にもいろいろあります。

  • Simple: そのまま指定サイズに合わせて拡大縮小する
  • Sliced: 画像の端っこはそのままで中の画像だけ拡大縮小する(UIの背景パーツで便利)
  • Tiled: サイズに合わせて画像を繰り返してくれる
  • Filled: 画像の一部を表示してくれる

hiyotama.hatenablog.com

上記でそれが網羅的にまとめられています。

ボタン

ボタンを作る

ボタンは、

  • デフォルトで背景が画像
  • デフォルトでテキストが内側に表示
  • タップ(クリック)したり、ユーザーのアクションで画像や色が切り替わる
  • タップ(クリック)したときの処理を記述できる

と、できることがたくさんある機能です。それらを全て、以下でまとめてくれてます。

hiyotama.hatenablog.com

レイアウト

パーツの位置を調整する

最低限、デザイナーの想定通りの位置に調整できないと話にならないので

位置調整用のコンポーネント「RectTransform」の理解は必須です。

tsubakit1.hateblo.jp

基本は、

  • 中心点が「左上」なのか「中央」なのか、などを設定する
  • 中心点を基準にした座標で位置を調整する

ということがわかってれば済む話なのですが、初見だと何をすればいいかわからない人もいると思います。

この記事をみれば、RectTransformをどう使えばいいのかわかります。

複数の画面サイズでも違和感なく表示させる

チュートリアルで紹介したサイトのあるページに詳しくまとまっています。

www.metalbrage.com

これにCanvas Scalerコンポーネントの詳細が記載されていて、

これを理解すると、画面サイズが変わったときにどう拡大縮小されるか、

がわかります。

これとは別に、UIの配置の仕方が大事です。

docs.unity3d.com

これを読んで、Anchorを使うことの重要性が説かれています。

例えば、

  • 端っこのパーツは端っこを基準に(左上のパーツなら左上端、右中央なら右端)UIを置く

など、指針を決めて実装しましょう。 

アニメーション

アニメーションをつける

tsubakit1.hateblo.jp

汎用的には、以下を学べばある程度自由に制御できるようになります。

スライドイン・スライドアウトさせる

uGUIのAnchorsでレスポンシブアニメーション | SOU・COLLE

ある程度Unityなりゲームエンジンに慣れてる人はこれ見れば一発ですが、

慣れてない方にはキツイ気がします。
 

ラブライブっぽいUIをUnityとiTweenで作ってみる

こっちの方がiTweenを使ってスクリプト側で制御してるので、

プログラマーには簡単そうです。

フェードイン・フェードアウトさせる

プログラマーならiTweenを使うのが簡単です。

megumisoft.hatenablog.com

Canvas Groupを使う方法もあります。

kikikiroku.session.jp
 

エフェクト

輪郭を加える

Outlineというコンポーネントがあって、それを使うだけで外枠をつけられます。

baba-s.hatenablog.com

影をつける

Shadowというコンポーネントを使います。便利ですね。

baba-s.hatenablog.com

グラデーションをつける・色の合成(加算/乗算/減算etc)をする

デフォルトではない機能で、作った方がいるようです。

westhillapps.blog.jp

他の機能とのコラボレーション

パーティクルとUIを共存させる

これはあるあるですね。

http://anz-note.tumblr.com/post/96866870921/unityのugui使いつつパーティクル表示させたい-д-カッ

anz-note.tumblr.com

ImageEffectなるものを使ってみる

カメラ側で処理する際に、セピア色、とかInstagramのフィルタみたいなこと(ポストエフェクト、と呼ばれているようです)ができるようです。

qiita.com

以下の方が、検証してる種類数が多いです。

kikikiroku.session.jp

コンポーネントの解説

Canvas

www.metalbrage.com

Canvas Scaler

www.metalbrage.com

Canvas Group

docs.unity3d.com

Canvas Renderer

docs.unity3d.com

Rect Transform

spi8823.hatenablog.com

Text

  • 自動改行と禁則処理
  • 描画範囲
  • フォントがぼやける問題

の解説があります。

tsubakit1.hateblo.jp

Image

  • 画像がぼやける問題

の解説です。

kohki.hatenablog.jp

Raw Image

解説、というよりは使い道の一例として紹介。

qiita.com

Mask/Rect Mask 2D

同じく使い方の一例ですが・・

hiyotama.hatenablog.com

以下はRect Mask 2Dの使用例です。

tsubakit1.hateblo.jp

Slider

これも使用例で使い易そうだったのでリンク。

qiita.com

Toggle

hiyotama.hatenablog.com

Input Field

hiyotama.hatenablog.com

Sprite Packer

設定によって、Editorで毎回ビルドしてpackingすると重い、とかでハマることがあります。

docs.unity3d.com

おわりに

uGUIを学ぶ際のインデックスとして役に立てれば幸いです。

UnityEditor(MacOSX)でPlugins機能を使う方法

UnityのDocumentがいまいちでツラかったので、補足情報をまとめます。

 

公式Document

docs.unity3d.com

 

関連Blog

d.hatena.ne.jp

http://monkeycoders.tumblr.com/post/22414181728/macos向けのnativepluginを作成する

monkeycoders.tumblr.com

 

 

公式Documentにのっとったやり方

  • MacOSXでサポートしてるloadable bundleという形式(拡張子は.bundle)を使う
    • XCodeのビルド設定で、"Mach-O Type"を"Dynamic Library"にする
    • "Architectures"を32bitと64bitのUniversalにする
    • "Build Active Architecture Only"をNoにする
  • Assets/Plugins に置いてDllImportする
    • Assets/Plugins/Hoge.bundleを置いていれば、[DllImport("Hoge.bundle")]とする
    • Plugins以下にフォルダ作って置いて相対パスで指定してもDllImportがうまくいかない

非公式だがこれでも動く、というやり方

  • dylibをビルドして、格納するときに拡張子をむりやり.bundleに書き換える
    • libHoge.dylibだったら、Hoge.bundleなどとする
  • この方法だとPlugins以下にフォルダ作って置いて、相対パスで指定してもDllImportがうまくいく

Editorで動かすときの注意点

Editorの停止はアプリの終了とは処理が異なるので、

pluginの終了処理をEditor向けに入れる必要があります。

終了処理がなされず、初期化済みなままEditorが停止してしまいます。

 

Entity Component Systemについてまとめてみる

自分は、Unityが初めてのクライアントアプリだったので、

 

「こういう風に作るのか〜」

 

程度の感想しかなかったですが、どうやらゲーム開発に向いたアーキテクチャーで、

Entity Component System(以下、ECS)と呼ぶらしいです。

といっても、UnityはECS風であり、ECSそのものではない様子。

 

エンティティ・コンポーネント・システム - Wikipedia

 

とはいえ、初心者にとっては、厳密さより根っこの理解が大事に思えるので、

初学者に向けてまとめてみます。

 

プロダクトが複雑になればなるほど、継承よりも委譲に頼っていく方が筋が良いという話

オブジェクト指向を意識して開発を進めていくと、継承を使う機会がちょいちょい出てきます。

でも、継承を使って開発していくと、以下のようなときにハマります。

qiita.com

※ Effective JavaJava知らなくても勉強になるのでオススメ

 

つまり、「継承は、親クラスの実装詳細を把握してないと書けない」ということです。

オブジェクト指向の特徴に「カプセル化(情報隠蔽)」という言葉がありますが、

継承したときの、子クラスから見た親クラスは、カプセル化(隠蔽)されてないわけで、オブジェクト指向の特徴とは矛盾してしまっています。

 

オブジェクト指向 - Wikipedia

 

そりゃそうか、と言ってしまうとそこまでな話ですが、

割と重要な事実ではないでしょうか。

これは、委譲であればそんなことはないのです。

以下のブログは、そのことをとてもわかりやすくまとめています。

 

qiita.com

 

上記のブログで、コンポジションと言っているのが委譲です。

このような思想をコンポーネント指向と言ったりもするようです。

 

ソフトウェアコンポーネント - Wikipedia

 

コンポーネント指向がオブジェクト指向と違うのは、

 

オブジェクト指向は、1つのクラスが人に例えられる(擬人)けど、コンポーネント指向は、1つのクラスが部品になり、部品の集合がオブジェクトと見なされる」

 

というところです。

例えば、「銃を打てる人」を表すときに、以下のように構成が変わってきます。

直感的にも、継承ツリーを意識せずに実装できるのは、メリットと感じられるのではないでしょうか。

 

ここまで説明すると、UnityがECSの思想に基づいて作られていることがなんとなくイメージできるかと思います。

  • ゲームオブジェクト: Entity
  • ゲームオブジェクトに紐づくスクリプト達: Component

という位置付けになります。

 

じゃあどう実装するのか

具体的にどう実装してるのか、というのは、以下が参考になるので

こちらを参照ください。

www.slideshare.net

 

以下はUnity特化です。非公式ですが、わかりやすいです。

Unity - コンポーネントの使い方

 

そもそもどうやってSceneを作っていくべきか、大いに参考になると思います。

 

おまけ

UnityのECSって微妙じゃね?という議論を垣間見れます。(英語読めればw)

gamedev.stackexchange.com

 

上記ブログで触れられた Artemis Entity Component System

Artemis Entity System Framework - Entity Systems Wiki

 

ちなみに、Unityの上に動く自作ECSも公開されたりしてます笑

github.com

 

動画もあり、熱量を感じられます。

www.youtube.com

 

ぼくもこの程度の知識しかないですが、参考になればうれしいです。

 

 

ゲームプログラマー向けのサウンド入門を目指して

自分は仕事でゲーム開発する際に、サウンドから入りました。

たまたまそういうアサインだったのです。

 

ただ、基礎がまとまってなくて結構苦労したのを覚えています。

ググッてもあんまり情報が出てきません。

 

まだ、おそらくじぶんの知らない部分もいっぱいあるけれど

全然知らない人がこれから取り組むときに参考にできるものを目指して

まとめてみようと思います。

※Unityで使えるサウンド機能についてもちょこちょこ触れてます。

前提

  • サウンド自体は、別のだれかが作ってくれる
  • わたし(読者)は、それを適切に取り込まないといけない人
    例1: どのファイル形式で、とか
    例2: どれくらいのサンプリングレートで、とか

ファイル形式

一番良い音質になるのは当然非圧縮形式ですが、それだとBGMのような再生時間の長いもので問題が起きます。

例えば、wav形式であれば

  • 5分 (=300秒)
  • 44100Hz (サンプル数/秒)
  • 16bit (bit/サンプル数)
  • 2ch (2つ分)

だと、

300 * 44100 * 16 * 2 = 52920000 (Byte) = 52.92 (MB)

となり、1つのBGMでこんなに重いと100個で5Gになってしまいます笑

サウンドだけでこんな容量になってしまうと全体のアプリの容量も増えて非常に困るわけです。

例えばiPhoneの一番少ないストレージだと16GB (でしたっけ)なので、

サウンドだけで5GBだと困るし、アセットをダウンロードするにも異常に時間かかります。

なので、BGMのような大容量ファイルは圧縮形式にした上で、

適切に音質をコントロールしつつ、できるだけ容量を下げる必要があります。

WAV (WAVEとも書く)
  • MicrosoftIBMで開発
  • 通常は非圧縮 (なので、容量もでかい)
  • 開発側でよしなに圧縮できるので、(たぶん通常) サウンド制作者はWAVで納品する
MP3
  • Moving Picture Experts Group (MPEG !) というワーキンググループが開発
    ー 専門家の集団らしい
  • 圧縮形式
  • mp3の技術には特許があり、利用すると訴訟リスクがあり、あまり使われていない (はず)
  • なのにUnityではiOSでビルドするとoggというサウンドファイル形式がmp3に変換されてしまう…
    ー UnityではAIFF, WAV, Ogg, MP3の4種類サポートで、圧縮形式はOggとMP3の2種類しかないから詰んでる 

特許云々の話は以下にまとまっております。

実際にMicrosoftが訴訟されたりしています。

MP3のライセンス問題はその後どうなったのか : Timesteps

 

iOSでビルドすると云々の話は以下です。

docs.unity3d.com

ちなみにUnityでサポートしてるサウンド形式については、以下に書かれています。

docs.unity3d.com

Ogg
  • Xiph.org Foundation (ザイフォ財団)という非営利団体が開発
  • パテントフリー (特許なし)
  • 圧縮形式

すばらしいですね。Oggを利用する、という結論でよさそうです。

AAC

cyber-rainforce.net

 

音質(と容量)を決める重要な指標

ファイル形式とは別に、音質を許容範囲まで下げることで容量を減らすこともできます。

容量を減らす必要がなかったとしても、サウンドライブラリ・エンジンの仕様で指定した形式のデータでないとそもそも再生できなかったりするので、各指標を把握するのは必須です。

サンプリングレート/サンプリング周波数

1秒あたりのサンプルデータ数。

アナログデータは連続ですが、デジタルデータは非連続なのです。

サンプルデータ数を増やすほど、アナログデータの音に近づきます。

ちなみに、音楽CDは44.1kHz/16bit (こっちはビット深度。後述)らしいです。これを超えたやつがハイレゾ

ascii.jp

ビット深度 /量子化ビット数

サンプリングデータ1つあたりのデータ量(bit)のこと。

CDで使っている16bitなら、2^16で0-65535の値でデータを表現できる。

8bitとかにすると音が雑になって、ノイズが出る(らしい)。これを量子化誤差と呼ぶ。

 

ビットレート

単位はbps (bits per second)。1秒にどれくらいのデータ量が処理されるかを表す。

音楽CDの目安は128kbpsだとか。

こちらとか聴いてみると面白いかも。

daredemopc.blog51.fc2.com

 

チャンネル数

よく言われるモノラル/ステレオのことです。ステレオだと2チャンネル使います。

モノラルで再生できるものならモノラルで納品されるので、それを把握した上で組み込む必要があります。 

ゲーム開発でよく出てくるサウンド周りのキーワード

あとはざっとまとめます。

ポイントループ

同じBGMをまるっとループ再生するのではなく、指定したポイント(ループポイント)からループして再生することがよくあります。

サウンド作成ソフトで、ループポイントを指定できて、それはバイナリファイルのコメント部分に直接埋め込まれています。

WAVEで納品されて、例えばoggに変換するときにループポイント指定部分が除かれてしまったりしないように注意する必要があります。

Wavosaurというフリーソフトがあるので、これを使って変換すれば(CUIじゃなくて面倒ですが)ポイントループを引き継いで変換できます。

Wavosaur - 窓の杜ライブラリ

同時再生数

SEを何かのアクションに合わせて再生させるとき、最大いくつまで再生出来る、という設定を入れることで音が重なりすぎて変な音になることを防ぐ仕組みがあります。

・・・なければ作る必要があります汗

フェードイン/アウト

これくらいできないと、ゲームとして結構微妙な演出になります。

 

あれ、もっとあった気がするけど思い出せない・・・汗 

また書きます。

最後に

また後日、追記して一部具体的なやり方についても書きます。

ゲーム開発初心者のWebエンジニアがUnity×C#で開発するために1年間で読んだ9のモノ

私がアプリでゲーム開発をするようになったのは2014年の夏でした。

もう1年が経ったので、今まで読んだモノ(本だけでなくWebも)をまとめてみます。

当時のスキルセットは、

  • 業務経験3年ほどのWebエンジニア
  • サーバーサイドが専門(Perl)
  • html, css, js, Flashは嗜む程度

です。

右も左もわからない頃

0. まずはWebで

Unity公式のTutorialが楽しく学べるようになってます。

Unity - Tutorial - 2D Shooting Game

まずはこれに沿ってUnityを動かしてみるのが良いです。

他にもドットインストールをちょっと見てみましたが、退屈かもしれません。

1. まずはひよこ本から

有名みたいですね、ひよこ本。 

私はUnity4で開発しているので、以下を読みました。

Unity4入門 最新開発環境による簡単3Dゲーム制作

Unity4入門 最新開発環境による簡単3Dゲーム制作

 

Unity自体をどう触るのか、という超初歩が学べます。

GUIのEditorで実装する感じが最初は抵抗ありましたが、もう慣れました。

 

筆者の労働環境はUnity4ですが、

今やUnity5が出てしばらく経つので、こちらの方が良いと思います。

Unity5入門 最新開発環境による簡単3D&2Dゲーム制作

Unity5入門 最新開発環境による簡単3D&2Dゲーム制作

 

 

2. ざっくり学んだ後に実際のゲームを触ってみる

会社の先輩が、「深イイ」と言っていたのでこちらを読みました。

ゲームの作り方 Unityで覚える遊びのアルゴリズム

ゲームの作り方 Unityで覚える遊びのアルゴリズム

 

 当時の自分にはよくわからなかったですが、

手触りをよくするために、どういう実装にしたのか、というのが非常に勉強になる」

と仰っていたので、本当はある程度慣れてから読む本かもしれません。

ただ初心者でも、「Unityで完成したゲームを触っていじってみる」ことができるのが良いと思います。

素材がどこかのサイトからダウンロードできて、プロジェクトを開いていじれるのですが、「こうやって作ってるんだ〜」と、何かと気づきが得られるかと思います。

 

3. C#を覚える

ぼくはだいたい「なんちゃら最速マスター」みたいなページを読んで覚えてます。

anond.hatelabo.jp

 

C#ラムダ式 基礎文法最速マスター − @IT

 

なんかタイトルがキャッチーで情報もスリムなので、さくっと読んで覚えるかーという気分になります笑

同僚は、以下をお勧めしておりました。

ぼくの場合は、ググったらたまたま以下に出会って読むことは多々ありました。

ので、どっちにしても出会うことになると思います。

ufcpp.net

 

4. 3Dグラフィックスの雰囲気を感じる

 これはコンソール業界にずっといた方から勧めてもらいました。

ゲームグラフィックス 2013 CGWORLD特別編集版 (Works books)

ゲームグラフィックス 2013 CGWORLD特別編集版 (Works books)

 

 3Dグラフィックスってどんなかんじなのか、

どんなものが注目されているのか、眺めるだけなのですが

なんとなく意識が高まります。笑

自分はエンジニアなので直接こういうものを作ることはないのですが、

自分の関わるプロダクトがどういうものなのか、感覚が掴める気がします。

 

最新のものだと以下ですかね。

ゲームグラフィックス 2015 CGWORLD特別編集版

ゲームグラフィックス 2015 CGWORLD特別編集版

 

 

5. 3D技術の歴史とキーワードを把握する

4. とも近いですが、「自分の作るものがどういうものなのか」よくわからなかったので、以下を読んでキーワードを把握するようにしました。

ゲーム制作者になるための3Dグラフィックス技術 増補改訂版

ゲーム制作者になるための3Dグラフィックス技術 増補改訂版

 

mikan-daisuki.hatenablog.com

 こちらでも触れてますね。まとめも知識不足で意味不明になってますね笑

でも、シェーダーもよくわかってなかったので、俯瞰して技術要素がどうなってるのか把握するのにはよかったと思います。

ある程度慣れてから

6. C#のイケてる書き方ってどんな感じなんだろう

てことで、読んだのが以下。

Effective C# 4.0

Effective C# 4.0

 

「 Effective 〜」は有名みたいで、これも周囲は読んでるし、レビューもよさげだったので読んでみました。

C#らしい書き方で大事なこと、が書いてあります。

でもちょっと難しいかも。わかるのもありますが、わからない項目も結構ある。

勉強にはなりました。

7. ゲームっぽい書き方ってどんな感じなんだろう

 と思って読んだのが以下。

ゲームプログラマのためのコーディング技術

ゲームプログラマのためのコーディング技術

 

割と基本的な内容らしく、そういうレビューも多かったんだけど、

わかりやすいし分量もちょうどよくて、面白かった。

オブジェクト指向デザインパターンに詳しい人には不要らしいけど、

自分はそういう人ではなかったので勉強になった。

もっとガチで勉強するならCode Completeの方がいいらしい。

 

Code Complete 第2版 上 完全なプログラミングを目指して

Code Complete 第2版 上 完全なプログラミングを目指して

 

 上ってことは下もあるのか・・・と自分は敬遠してる笑

8. そもそもC#の言語仕様って・・・

と、慣れてきて気になったころに読む本。

C#エッセンシャルズ 第2版

C#エッセンシャルズ 第2版

 

 薄いのが良いです。持ち歩くのも全然問題ない。

ちょっと暇なときに読むのがよいカジュアルさです。

9. 実はJavaC#に似てるので、Javaの技術書も良い

インターフェースと抽象クラスで分けるコードの書き方が正しいのか疑問に感じて2chで聞いたら「Effective Javaを読め」と言われて読んだら面白かったので

読んでなかったら是非。 

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

 

個人的には、この本が一番アタリだったかも。

staticクラスの使い方やらインターフェースの使い方、やらが、しっかり書いてあって、そういう思想的なことを学べなかったので、こういう本を読むのは大事だと思う。

ネット読んでるとJavaC#の違いに苦しむ人がいるみたいだけど、LLから入った人がみたらだいたい一緒ですね。笑

まとめ

いかがでしたでしょうか。

誰かの参考になれば、それ以上のことはありません。

 

画像を光らせたい、暗くしたいときに使う、画像の加工(ブレンド)方法「加算」とか「乗算」とか

画像を光らせて点滅させてください

今日、「画像を光らせて点滅させてほしい」と言われて実装していたら、

デザイナーとチャット越しで

 デザイナ:ベースの画像の上に光の画像をのっけてください

 ぼく  :はーい

 デザイナ:加算でおねがいできます?

 ぼく  :ん?乗っけてますよ?

 デザイナ:・・・

 ぼく  :(あれ、加算ってなんかそういう用語?)

 ぼく  :(隣のパイセンに) 加算ってどういう意味ですか?

 パイセン:Photoshopとかで、2つのレイヤーを合成するときの合成(ブレンド)方式だよ

 ぼく  :!!!

てなやりとりがあって勉強になったのでまとめます。

加算ってなに?

単純に2つの色を足してるだけ。カラーコードでいえば

#FF0000 + #00FF00 = #FFFF00

これだけ。画像で下記例を見るとわかりやすいです。

加工前

https://helpx.adobe.com/jp/photoshop/using/images/pa_22.png

単純に上からかぶせた場合 (不透明度100%)

https://helpx.adobe.com/jp/photoshop/using/images/pa_22a.png

加算の場合

https://helpx.adobe.com/jp/photoshop/using/images/pa_22m.png

画像の引用元:Adobe Photoshop * 描画モード

加算だと、かなり明るくなりましたね!

明るくしたいときは加算」とざっくり覚えておきましょう。

 Unityでの実装例

ぼくはNGUIを使っていたので、ベース画像はそのままUISpriteで配置して、

光らせ用画像を、UITextureで参照しつつShaderでAdditiveなものを使うだけでよいです。

Particles/Additive」とか、「Particles/Additive (Soft)」とか、デフォルトでShaderがあるようです。 

SpriteRendererの例はこちらを見るとよさそうです。

qiita.com

ポイントは、「"Particles/Additive"などの、AdditiveなShaderを使う」ですね。

 

他にもあるの?

 ぼく  :「他にもそういうやつあるんですかね?似たようなやつ。」

 パイセン:「乗算とか、スクリーンとか、うんぬん」

 ぼく  : ほほぉ・・・!

ということで、他のものも簡単にまとめます

乗算ってなに?

色をかけ算するだけ。また、カラーコードで考えると、

#CC0000 × #CC0000 = RGB(204/255, 0/255, 0/255)^2 ≒ #A30000

と、少し暗くなります。

同様に、Photoshopページの例でも暗くなっています。

加工前

https://helpx.adobe.com/jp/photoshop/using/images/pa_22.png

乗算

https://helpx.adobe.com/jp/photoshop/using/images/pa_22g.png

画像の引用元:Adobe Photoshop * 描画モード

Unityでの乗算の実装は・・・

残念ながら、デフォルトのShaderはなさそうです。少なくとも私には見つかりませんでした。

自力でシェーダーを書く必要があります。

※ 申し訳ありませんが、筆者は2015年4月4日現在シェーダーを書いたことがありません。

じゃあスクリーンって何?

乗算で暗くなるのを、逆に明るくするロジックです。

計算方法は少し難しくなります。

RGB(1,1,1) - (RGB(1,1,1) -  RBG(r,g,b)) * (RGB(1,1,1) -  RBG(r',g',b'))

こんなかんじなのですが、なんとなくわかりつつよくわかりませんねw

見た目は、以下のようになります。

加工前

https://helpx.adobe.com/jp/photoshop/using/images/pa_22.png

スクリーン

https://helpx.adobe.com/jp/photoshop/using/images/pa_22k.png

画像の引用元:Adobe Photoshop * 描画モード

加算と比べると、少しまろやかになります。

最初は、「加算よりも、少し明るさがまろやかになる」とだけ覚えておけばいいと思います。

スクリーンもデフォルトでShaderなし

自力で実装(ry

書いたらアップします。

まとめ

  • 画像を明るくしたいときは加算かスクリーン、暗くしたいときは乗算を思い出そう
  • Unityでデフォルトで使えるシェーダーは加算のみ (自分の環境はUnity4.6でした)

  

 

 

iOSでビルドしたら、dllがでかすぎてXcodeでエラー

ドキュメントのしたの方にあった。。

Xcode throws compilation error: "ld : unable to insert branch island. No insertion point available. for architecture armv7", "clang: error: linker command failed with exit code 1 (use -v to see invocation)"

このエラーは通常、ひとつのモジュールにコードが多すぎることを意味します。典型的には多くのスクリプトコードがあること、または大きな .NET アセンブリがビルドに含まれることに起因します。そしてスクリプト デバッギング を有効化することで状況はさらに悪化するかもしれず、いくつかの追加指示を各々の関数に加えるため、より多くに制限にヒットするようになります。

この問題の解決にはマネージド コード ストリッピングを有効化することで役立つ場合があり、特に おおきな.NET アセンブリがカラム場合です。しかし、もしこの問題が継続的に発生する場合、もっとも良い解決策はユーザのスクリプトのコードを複数アセンブリに分割することです。その最も簡単な方法はコードを Plugins フォルダに移動することです。この場所にあるコードは別のアセンブリに含まれます。さらにこれらのスクリプト コンパイル ガイドラインもチェックして下さい:



これが結構大変だった。。
ちゃんと依存関係を意識して、最初から分割すべきだった。気をつけよ。