おもちゃラボ

Unityで遊びを作っていきます

Unity

【Unityシェーダ入門】スパイクノイズを作る

スパイクノイズは、ブランドロゴのイントロとかでよく使われる感じのエフェクトです。といっても伝わりにくいので↓のような感じのものを作ります。スパイクノイズという言葉はもともとは電子回路の言葉で、スイッチをオン・オフしたときに生じるパルスノイズ…

【Unityシェーダ入門】ポリゴンをポイント(点)で表現する

Unityで3Dモデルを普通に描画するとポリゴンが表示されます。ここではポリゴンの頂点だけをポイントで表示する方法を紹介します。頂点の表示方法を変えるだけなら、なんと2行のスクリプトだけですみます。それぞれの頂点に異なる色をつける場合はシェーダを…

【Unity】uGUIの文字をグラデーションで表示する

uGUIの文字は単色で塗りつぶしたり、Outlineコンポーネントでアウトラインを描画することはできますが(あまり綺麗じゃない)、グラデーションの表示には現在のところ対応していません。そこで、uGUIの文字列にグラデーションをかけることができるスクリプト…

【Unityシェーダ】オブジェクトが重なった部分をくり抜く

特定のオブジェクトと重なった部分を透明にくり抜くシェーダを紹介します。このシェーダを使えば、次のように、好きな形で別のオブジェクトをくり抜くことができます。 オブジェクトの形にくり抜くためには 今回のシェーダの原理は非常に簡単です。まずは抜…

【Unity】シーンが遷移したことを検知する

あるシーンから別のシーンへ遷移するタイミングで何か処理を実行したい場合、シーンが遷移したことを検知する必要があります。Unity5.4からはシーン遷移にSceneManagerを使います。そして、このSceneMangerには「activeSceneChanged」「sceneLoaded」「scene…

【Unity】落下地点の座標から、放物線の方程式を求める

落下地点が決まっていて、そこに向かって弾をとばしたり、ミサイルを撃ち込みたいことがあります。落下地点から放物線の方程式を求めるのって、結構難しいんですよね・・・。ということで、ここでは、打ち出し角度と落下地点の座標を指定することで放物線の…

【Unity】バネの動きを実現する3つの方法

Unityでバネのアニメーションを作る場合、大きく分けて3つの方法があります。 Spring Joint 2Dを使う方法 Animationを使う方法 バネの挙動をスクリプトで書く方法 バネの挙動をシミューレートできるSpring2DコンポーネントはPhysicsの物理挙動に従って計算す…

【Unity】uGUIの文字を一文字ずつ別々に動かす

uGUIを使って文字列を表示するにはTextを使います。このTextを使って一文字ずつランダムに動かす方法を紹介します。UIの文字でも場所によっては動いている方が楽しいですね〜 UIのTextを一文字ずつ動かす方法 UGUIのTextはModifyMeshメソッドを使うことで、…

【Unity】Macで使えるNative Pluginを作る(OpenCV編)

UnityでOpenCVを使いたい場合は、OpenCV for Unityを使う方法と、自分で使いたい関数だけをNative Pluginとして用意する方法があります。ここでは、アセットを使わず、Native PluginからOpenCVの機能を使う方法を紹介します。UnityでOpenCVを使ったNative Pl…

【Unityシェーダ入門】画面をセピア色にするポストエフェクトを作る

今回はスクリーンをセピア調にするポストエフェクトシェーダを作ります。ちなみに・・・Wikipediaによるとセピアとはイカスミのことらしいです。 セピア(sepia)とは、イカ墨のこと。また、イカ墨由来の黒褐色をも意味する。かつてモノクロ写真などにこの色の…

【Unityシェーダ入門】ステンシルバッファを使って隠れた部分を描く

プレイヤがゲームステージに配置されている障害物などの後ろ側に回り込むと、見えなくて操作しづらくなってしまいます。そこで、障害物によって隠れた部分は影だけ描いたりします。この記事では、Unityで隠れた部分を影で描画する方法を紹介します。今回の記…

【Unity】シェーダを使って世界に雪を降らせよう

季節はどんどん夏に向かっていっていますが・・・今回はシェーダを使ってUnityで雪を降らせる方法を紹介したいと思います。 雪を積もらせるアルゴリズム 深さのある雪を積もらせる場合は色々と計算が大変ですが、表面に薄っすらと積もらせるだけであれば、テ…

【Unity】Animation Clipで設定した位置を相対的な値として扱う方法

AnimatorでAnimation Clipを動かすと、アニメーションの位置はAnimation Clipに設定されている値が優先されて表示されます。例えば、原点でバウンドするボールのアニメーションを作ると、その後でボールを移動させても、実行時には原点でバウンドするボール…

【Unity】オブジェクトを破棄するタイミングで効果音を鳴らしたい

オブジェクトを破棄(destroy)する直前で効果音を鳴らそうとしても、オブジェクトが破棄されると、AudioSourceコンポーネントもあわせて破棄されてしまうので効果音が鳴りません。 たとえば、シューティングゲームでは、ミサイルが敵にあたったタイミングで…

【Unity】Blenderで人型のボーンを入れて、Animatorで走るアニメを再生する

人型の3Dモデルにボーンを入れるのは、手作業でやると結構大変です。Blenderにはアーマチュアと呼ばれる人型のボーンが用意されており、これを使えば簡単に人型のボーンを入れることが出来るようになります。簡単なはず・・・なのですが、最初にやろうとする…

【Unity】ゲーム実行中にインスペクタで変更した値を停止後に反映させる方法

Unityではゲームを実行しているときにインスペクタから入力した値は、実行終了後にはもとに戻るようにできています。ゲーム実行中にオブジェクトの位置を少し変えてみたり、ライトの方向を少し変えてみたりと実験するのにはとても便利です。でも、実験して気…

【Unity】Dissolve(溶けるような)シェーダをつくる

Dissolveってなんのこっちゃら?と思って辞書を調べてみたら・・・ Dissolve : 分解する、分解させる、溶かす、解消する だそうです!Dissolveシェーダ自体は分解というよりも侵食に近い感じがしますが、ジワーっと消えていくタイプのアニメーションのこと…

【Unity】スクリプトでRGBとHSVを相互に変換する方法

色空間を表す方法は色々(←ギャグではありません)あるのですが、その中でも有名なものに「RGB」と「HSV」があります。 RGBとHSVについて RGBは毎度おなじみのR(Red)、G(Green)、B(Blue)の三原色を使って色を表現する方法です。HSVはH(Hue)とS(Saturatio…

【Unity】Unity5.6で綺麗な画面を作るための5つの手順

Unityでキレイな画作りをしたいときの、基本的な設定手順を5つに分けて紹介します。Cinematic Filterやカラースペースの変更は処理が重いので、スマートフォン向けではないかもしれません。完成までのステップは次のようになります。 手順1 オブジェクトを…

【Unity】Animatorでステートが遷移するタイミングを検知する

Animatorを使っていると、あるステートから別のステートへ遷移したタイミングを検知して、アクションを起こしたいことがあります。例えばジャンプアニメーションが終了して着地したタイミングで効果音を鳴らしたいとか、カメラを振動させたい、といった場合…

【Unity】プログレスバーを作るときにハマりがちな3つの誤り

Unityでプログレスバー(progressbar)を作るときは、uGUIのImageを使うことが多いと思います。Imageの設定をFillに設定することで簡単にプログレスバーのようなものを作ることができます。スクリプトからプログレスバーを更新する場合は、次のようにImageオ…

【Unityシェーダ入門】シェーダで旗や水面をなびかせる

ゲーム中で、旗や水面は静止していることはあまりなく、風にあおられてなびいていることが多いですね。リアルになびかせようとすると、シミュレーションやボーンアニメーションをする必要があります。この記事ではUnityの頂点シェーダを使ってお手軽に旗や波…

【Unityシェーダ入門】頂点カラーを表示するシェーダを作る

3Dモデルの表現には通常テクスチャを使いますが、3Dモデルの頂点ごとに色を設定したモデルを使用することもできます。こちらの動画で使われているモデルは、テクスチャを使わずすべて頂点カラーで表現されています。たぶん、世界観に統一感をもたせるためのD…

【Unityシェーダ入門】トゥーンシェーダを自作してみる

Unityではフォトリアルな映像を作るのは簡単ですが、風ノ旅ビトやGravity dazeなどの独自にデフォルメされた映像を作るためにはシェーダを使う必要があります。その中でアニメ風の映像を作るためには、トゥーンシェーダ(Toon Shader)を使います。Unityには…

【Unity】ビルボードで常にカメラの方に向く木を作る

ビルボードを使って、常にカメラの方を向く木のオブジェクトの作り方を紹介したいと思います。最近ではビルボードを使う機会も減り、パーティクル以外ではあまり使われなくなりました。ただ、スマートフォン用など、ROM容量が厳しい環境では、依然として使わ…

【Unity】Animation Curveを使ってインスペクタからレベルデザインをする

Animation Curveとはベジェ曲線を使って物体の動きや挙動などをGUIで設定するための仕組みです。 Unityではスクリプトで定義したAnimation Curveをインスペクタに表示することができます。そこで、このアニメーションカーブを使ってレベルデザインをしちゃお…

【Unity】LODで負荷を軽減させて60FPSを死守する

スマートデバイスなどのモバイルがターゲットのゲームは計算量をいかに減らすかがキーになります。ここではLODを使ってパフォーマンスを改善する方法を紹介します。LODとはLevel Of Detailの略で、オブジェクトが近くにあるときは高精細のモデルを使用し、オ…

【Unity】これは便利!カメラの位置をシーンビューの視点と一致させる方法

「いまシーンビューで見ている映像を、そのままカメラの撮影アングルとして使いたいな〜」ということはありませんか?この記事では、シーンビューで表示されている視点をMain Cameraの視点と一致させる方法を紹介します。 この方法を使うことでシーンビュー…

【Unity】XキーとZキーのショートカット使ってますか?

Unityのショートカットキーの中でもあまり知られていない(?) XキーとZキーのショートカットを紹介したいと思いますー! Xキー:World/Localの切り替え オブジェクトを移動させるときにワールド座標系に従って動かすのか、ローカル座標系に従って動かすの…

【Unity】ユニティちゃんをMecanimで歩かせる方法

ユニティちゃんをAsset Storeからダウンロードしてきたけれども、動かすのがむずかしい、locomotionはなんか複雑だし・・・という方は多いと思います。 locomotionは一通りの動きが揃っていて便利なのですが、簡単なアニメーションの実験をしたい場合は逆に…

【Unity入門】60分でつくるシューティングゲーム 全6回

会社でUnityを使うことになったんだけれども「何から手を付けてよいかわからない」とか「Unityの基本操作は分かったけど、自分のゲームに応用できない」とかいう方は多いと思います。私もUnityを触り始めたときは、あまりに機能が多くて何から始めたら良いの…

【Unity】Anima2Dでユニティちゃんがネギを振るアニメを作る

Anima2Dとは2Dのキャラクタでスケルタルアニメーション(ボーンアニメーション)を作るためのツールです。 Anima2Dを使うことで、ボーンに従ったアニメーションが作れるほか、メッシュを変形させたり、IK(Inverse Kinematic)を使うこともできます。 https:…

【Unity】Timelineエディタでムービーを作ってみた

現在時点(2017/3/7)ではTimelineエディタは公式にリリースされているわけではありません。Unity5.6のβ版にマージする感じでビルドされたものが公開されているので、それをダウンロードしてきて使います。こちらからダウンロードしてください http://beta.u…

【Unity】Ambient Occlusionを綺麗に見せる3つの方法

ライトをベイクするとき、あわせてAmbient Occlusionの設定もすることが多いと思います。このAmbient Occlusionがなかなかの曲者で、適当に設定すると綺麗に見えないのです。ここではライトをベイクする際にオススメなAmbient Occlusionの設定を3つ紹介しま…

【Unityシェーダ】テクスチャの両面を描画する方法

Planeオブジェクトにテクスチャを貼り付けると、両面が描画されるのではなく裏面は透明になってしまいます。片面だけが描画されてしまうのは、カリングと呼ばれる「見えないところは描画しない設定」が原因です。カリングをオフにして両面を表示するためには…

【Unityシェーダ入門】暗闇から光が溢れ出るライトブルームの演出をする

室内から外を眺めたときや、トンネルから出るとき、イルミネーションなど、暗い場所から明るい場所を眺めるときに、光が溢れ出るような映像がよく使われます。この光のあふれるエフェクトをライトブルーム(Light Bloom)と呼びます。Unityでは標準機能を使…

【Unity】Unityで作られたショートフィルム5本を紹介する

Unityで作られたショートフィルム(ショートムービー)をまとめました。2012年から2016年のものまで時系列で並べています。こうみると、数は多くはないけれどもUnityでもちゃんとショートフィルムが作れるんだなーと感じますね! The Butterfly Effect www.y…

【Unityシェーダ入門】粘性のある液体をシェーダで作る

瓶に入った、粘性の高い液体をUnityで表現してみます。RPGの回復系液体ドリンク・・・・とはちょっと違いますね。笑今回はいちからUnityでシェーダを書くのではなく、ShaderToyで紹介されているシェーダを利用して液体を作ってみました。 ShaderToyを利用する…

【Unityシェーダ入門】フラットシェーディングでローポリっぽく見せる

シェーディングの方法は大きく分けると、次の二つの方法があります。 スムースシェーディング フラットシェーディング スムースシェーディングは少ないポリゴン数でも、表面がなめらかに見えるように法線情報を補間して表示する方法です。一方フラットシェー…

Unityでドローコール(Set pass call)を減らす方法まとめ

ゲームのFPSに大きなインパクトを与える要因としてドローコール(Unity5ではSet Pass Call)があります。これは1フレーム描画するのに、CPUからGPUに対して何回描画命令を送っているかを示す値です。描画命令にはそれなりの時間がかかるので、Set Pass Call…

Blenderで作ったモデルがUnityでベイクできない

Blenderで作った3DモデルをUnityのシーンビューに配置して、ライトをbakeしようとすると次のようなエラーが出ることがあります。 Mesh doesn't have albedo UVs. Please create them in your modeling package. Mesh doesn't have UVs suitable for lightmap…

【Unity】Unity5でライトをベイクした結果が汚い

ライトをベイク(bake)した時に、汚い状態になってしまうことがあります。こんな木のモデルがライトをベイクした途端に、謎の紋章が・・・!AO(Ambient Occlusion)の有無や、ライトのMixedまたはBakedに関わらず、汚くなってしまうようです。調べたところ…

【Unityシェーダ入門】シェーダで作るノイズ5種盛り

ノイズといえば、砂嵐のようなランダムノイズから連続性を保ったパーリンノイズまで様々なノイズが考えられています。残念なことにUnityのシェーダにはノイズを生成するメソッドが用意されていないため、プログラムを作る必要があります。 この記事では、Uni…

Animatorの使い方とアニメーションカーブ入門

レースゲーム開始時や映画の開始のカウントダウンによく使われる円がくるくるして数字が減っていくあれ(↓)を作ってみましょう。今回はUnity付属のアニメーションカーブとドープシート、Animatorを使って作ります。図www.youtube.com次のように手順が長いで…

敵にやられたときに画面を赤く光らせる

昔のゲームだと敵にやられたときに画面全体が赤くフラッシュしたりしましたね。今回はこんなのを作ります。まずはプロジェクトを作って画面全体を光らせるためのImageを配置しましょう。ヒエラルキービューから「Create」→「UI」→「Image」を選択し、画面い…

Unity5.5.0f3でパーティクルがピンク色になる

Unity5の教科書のP.336で、イガグリにパーティクルをアタッチすると白いパーティクルが放出されている画像(Fig.7-57)が載っています。Unity5.5.0ではParticleSystemコンポーネントをゲームオブジェクトにアタッチすると、下図のようにピンク色のパーティク…

UnityでiOSビルドするとエラーが出る

Unity5の教科書で、iPhoneにアプリケーションをインストールしようとすると、Xcodeで次のようなエラーが表示される場合があります。 エラー内容 Signing for "Unity-iPhone" requires a development team. Select a development team in the project editor.…

Unityでグリッドが表示されない!

いつも表示されていたシーンビューのグリッドが、 ある日突然表示されなくなってしまいました・・・シーンビュー上部の「Gizmos▼」から「Show Grid」を選んでも変化なし。 これは困った・・・ただ、平面をおいてみると・・・ん、うっすら表示されている? メ…

ワールド空間に文字を表示する

プレイヤの頭の上にポップアップで文字を表示したいことが時々あります。今回はその方法を紹介します。今回の目次は次の通りです。 3D空間上に文字を表示する だんだん文字を透明にする どこからみてもカメラの方向を向くようにする 3D空間上に文字を表示す…

Unityでテクスチャにお絵描きしよう

Unityではゲームの実行時にリアルタイムでテクスチャのピクセルを変更することが出来ます。この方法を使ってテクスチャにお絵かきをしてみたいと思います。今回の記事の内容は次のとおりです。 平面の配置 テクスチャの設定 テクスチャの上半分を塗りつぶす …