Unityで炎エフェクトを作成! 拡張機能Shader Forgeを使いこなすシェーダーテクニック Unityアセットストアには、36,000点以上のアセットやツールが販売されていて(※1)、制作効率アップにはかかせない存在となっています。本記事では、アセットストアのなかでも人気が高いノード型シェーダーエディター「Shader Forge」(従来は有料でしたが、2018年5月より無料)を使ったシェーダーテクニックをご紹介します。直感的な操作で制作を進められ、レスポンスもよく安定していますので筆者オススメのツールです。 ノード型シェーダーエディターの利点は、シェーダーコードの細かい文法を知らなくてもノードの操作だけでエフェクトが作成できることです。できることが少ない分、エラーでつまづくことも少なくなります。シェーダーの導入として手にとってみると良いでしょう。本記事でご紹介するシェーダーテクニ
確認バージョン 2019.1.9f1 MaterialのShaderファイルを入れ替える 最もシンプルなShaderの入れ替え方は以下の様に書きます。 予めビルドインシェーダーとして含まれているシェーダーであれば、Shader.Findが使えます。 Androidなど出力すると正常に表示されない(ピンク色現象) Shader.Findできるシェーダーファイルは、ビルトインシェーダーに登録されているもののみです。そのためビルトインシェーダーに登録されていないと、アプリをビルドした際にシェーダーファイルを見つけることが出来ず表示がおかしくなってしまいます。 ビルトインシェーダーの場所 メニューの「Edit」->[Project Settings..]からGraphicsメニューのAlways Included Shadersから確認できます。任意のシェーダーファイルをこちらに追加するとShad
Unityの、ShaderLabにはQueueというレンダリング順をコントロールするためのタグがあります。 詳しくは、以下のページに書かれていますが、自分でも自分の言葉でまとめてみます。 タグ名 内部インデックス 説明 Background 1000 他より前にレンダリングされます。Skyboxなんかもこれらしいが... Geometry 2000 次に描画されるのはこれ。不透明なマテリアル用。 AlphaTest 2450 3番目。アルファテストするマテリアル用。 Transparent 3000 4番目。半透明マテリアル用。このキューに入るものは奥から順に描かれます。 Overlay 4000 最後。ポストエフェクトとか用。 タグは実は内部的にはインデックスになっています。例えばBackgroundタグは1000というように。 それを利用して、それぞれのタグの間にキューを作って描画する
今回はもう一つの記述形式である Vertex/Fragment Shader について解説していきます。 字が多めなので頑張って下さい。 Unityにおける Surface Shader と Vertex/Fragment Shader の大まかな使い分けは、 ライトの影響を受けるモノには Surface Shader で、受けないモノには Vertex/Fragment Shader です。 が、勘違いしてはいけません。「Surface Shader > Vertex/Fragment Shader」ではなく、 むしろシェーダーの基本は Vertex/Fragment の方です。(以降 V/F Shader と書きます) V/F Shader でもライトやリフレクションプローブの影響を与えることは可能です。 と言うより、Unityの内部的に Surface Shader は全て V/F
そもそもDOTweenとはDOTweenとはDaniele Giardiniさん(個人)が開発するUnity用アニメーションライブラリです。個人の製品ですが Unityで作られたゲームでは幅広く採用される有名なライブラリ です。 ソースコード自体はGitHub、AssetStoreに無料で公開されています。GitHubのスター数は現在約1700(2022.6.20時点)。多くの人に使われていることが伺えます。 次のリンクからDOTweenをダウンロードできます。 初心者におすすめは断然Unity Asset Store経由 です。数ボタンでDOTweenを使えるようになります。 ・Unity Asset Storeからダウンロード 👉 【無料】DOTween ・GitHubからダウンロード 👉 DOTween | GutHub GitHubからインストールするのは、少し難易度が高いため
今回はゲームの機能を作成するのではなく、AwakeとStartの違いと現状のプログラミングの仕方の問題点を見ていきます。 通常のクラスはMonoBehaviourを継承してクラスを作成していますが、MonoBehaviourで用意されているメソッドでAwakeとStartというものがあります。 この二つは同じタイミングで実行されるような気がしますが、実は違います。 わたしの場合あまり気にせずすべてStartメソッドで変数の初期化、ゲームオブジェクトの取得を行っていました。 なぜそうしているかと言うと、購入した本の中で他に設定しているゲームオブジェクトを取得する際は、Awakeだと初期化処理がまだ行われておらず取得出来ない可能性があるので、Startメソッド内でやると良いと書いてあったからです。 AwakeとStartの違いをマニュアルで調べるUnityのマニュアルを見てみると、 ・Awak
たとえば「あるメッシュの表面に沿って別のオブジェクトをランダムに配置したい!」という場合にどうやってその座標を取得するか、という話です。手っ取り早く実装するなら「メッシュの外側から中心方向に向かってランダムに Ray を発射し、メッシュコライダーと衝突した地点を取得する」という方法が楽で便利だと思います(参考: Unity 地表に沿ってオブジェクトを配置する)。ただ、その方法だと Ray の当て方やメッシュの形状によっては均等に取得できないので、今回はもう少し厳密に計算して求める方法を考えます。 アプローチとしてはこんなかんじ↓ 注意しないといけないのは 1. の三角形の選び方です。すべての三角形を同じ確率で選んじゃうと偏ってしまうので、面積に応じて選ばれる確率を変えないといけません。つまり、広い面ほど確率が高く、逆に小さい面ほど確率を低くする「重み付き」のランダムにする必要があります。
このようにすることでプレイヤーのx座標はMinのx座標より大きく、Maxのx座標より小さい値の中でしか動けないという意味になります。 このコードを transform.positionに入れれば良いです。 これだけ見ると簡単ですが、実際にプレイヤーなどのオブジェクトを指定していくとなかなか長いコードになります。 以下から説明していきます。 具体的な使い方 以下のようなコードを使うと、Playerのx座標は「wall_Leftからwall_Rightまで」で移動制限し、y座標は「wall_Bottomからwall_Topまで」で移動を制限します。 using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { GameObject Player; GameObject w
概要 今作っているコンテンツで、なにもない空間からオブジェクトが転送されてきたような演出をしたいと思い、そのために色々シェーダを書いたのでそのメモです。 以下の画像を見てもらうとどういう効果かイメージしやすいと思います。 今回はこれを実装するにあたって色々ハマったり勉強になったりした点を書いていきたいと思います。 なお、こちらで解説しているシェーダなどについてはGithubで公開しているので動作を見たい方はそちらをダウンロードして確認ください。 github.com まずは方針決め Deferred Shadingだと、最初にMeshをレンダリングして、その後にBoolean演算を行ってくり抜く、みたいなことができるようです。 (↓こんな感じの。みんな大好き凹みTips) tips.hecomi.com ただ、作っているコンテンツがVRなのでDeferredとは相性が悪く、Forward
今回はUnityで位置や方向を求めるStatic変数について見ていきます。 方向を求めることが出来ればキャラクターの前方に弾を飛ばしたい時や、敵を倒した時に敵の上方からアイテムを登場させるといった時に使う事が出来ます。 既にいくつかの記事で方向のStatic変数については解説していますが、それだけについてを取り上げた記事を書いていなかったので書いてみました。 そもそもStatic変数ってなんなのさ?Static変数についてしばらく説明しますが、飛ばしても大丈夫です。(^_^;) まずはStatic変数ですが、いったいこれはなんなのでしょうか? UnityのスクリプトリファレンスでStatic変数という表記になっていたので、この記事のタイトルにもそのまま記載しましたが、日本語に直すと静的変数ですね。 オブジェクト指向プログラミングで言うとそのクラスで定義されている変数です。 オブジェクト指向
僕はNavMeshを使ったことがない。 Unityをぼちぼち使ってきているのにも関わらず、NavMeshを使ったことがない。 そんな僕は、きっとみんなからバカにされているに違いない。 勉強しよう……。 この記事にはUnity2017.1.2f1を使用しています。 ドキュメントは読むさ メニューが無いんだが 焼けないのだが 動かないのだが いじってみるのだが 終わったのだが ドキュメントは読むさ まず、ドキュメントを読むことが大切だ。 ドキュメントを読めば八割がたNavMeshを理解したといっても過言ではないだろう。 さっそく読んでみる。 docs.unity3d.com 読み終わった。 気分はNavMeshマスターだ。 とはいえ、日本語のドキュメントはUnity5.4時代のものだ。 情報が古いかもしれない。 ここは最新の情報として、今年のUniteであったNavMeshのセッションの動画を
この記事でのバージョン Unity 2017.4.0f1 はじめに UnityにはMeshに合わせてコライダーを作るMeshColliderという機能がありますが、 使い勝手が良くなく、結構重かったりするので、 他のシンプルなコライダーを組み合わせてそれっぽいコライダーを作る事がよくあります。 しかし、手動でコライダーを組み合わせるのは地味に面倒です。 と、言うことで今回紹介するのがSAColliderBuilder。 SAColliderBuilder - Asset Store これを使えば、メッシュに合ったコライダーの組み合わせを自動作成してくれます! なお、本記事に出てくる椅子や女の子のアセットは以下のものを使っています。 Home Bedroom and Bathroom Pack | 3D Interior | Unity Asset Store Aoi Character P
はじめに 制作中の変則スネークゲームの新ルールとして ・ヘビが敵を囲んで倒す というものを実装することができたのでまとめます。 実際の挙動やることは動的メッシュ生成です。 はじめに 前提 必要なスクリプト 本題 だいたいの流れ ①ヘビが輪になる ②頭→体→尻尾のセル座標をListに順次追加 ③Listを元にMeshを生成 ④Meshを元にMeshColliderを生成 ⑤MeshColliderのOnTriggerEnterでオブジェクト取得 ⑥オブジェクトを消す まとめ 参考にさせていただいたサイト様 前提 スネークゲームではヘビを構成するセル(ブロック)があるので、頭セルから体セル通って尻尾セルまでを結んだ線で囲んだオブジェクトを消すというものを実装します。 実装するモノ 必要なスクリプト Player.cs 頭セルについていて方向入力で移動 BodyCell.cs 頭セル以外は前セル
要注意事項 この手法はtwitterの規約上グレーな部分があります。(後述) 最悪アカウント凍結なども考えられるので、利用する場合は自己責任でお願いします。 初めに まずはこちらのツイートをご覧ください。 何も進んでないけどサンプルが動いたので進捗を出した気分を醸し出すhttps://t.co/tQtUlkeDiB — 東大で登壇したニム式@TL閲覧自粛中 (@ni26mu) January 5, 2019 なんと、twitter上でゲームが出来ます。モバイルでも動きます。 これはTinyUnity(正式にはProjectTiny)のサンプルにあるゲームですが、ひと手間加えるとこんな風にtwitter上でプレイ出来るようになります。 概要 TinyUnityとは Webで動かすことを前提とした、小さくて軽いUnityの機能です。正式にはProject Tinyと言うそうです。 参考:【Un
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 注意 この記事は2018/12/5時点の情報です。 Unity2018.3.0.b12、Tiny Mode0.13.2に基づいて記載しています。 Tiny Modeは現在プレビュー版のため、この情報は日が経つにつれ古くなる可能性が高いです。 Tiny Unity について ※この章は前置きが長いので、すぐに使いたい方は #使ってみる に飛んでください。 Tiny Unity (Tiny Mode) って何 ドキュメント(0.13) https://docs.unity3d.com/Packages/com.unity.tiny@0.13
Unityを使ってシェーダーを作る方法を学ぶ連載「Unityで始めるシェーダー入門」。前回の「Unityゲーム/アプリの表現力の幅を広げるシェーダーとは――シェーダー作成の初歩」では、シェーダーの概要と、作り始めるまでの環境構築を紹介した。今回は、前回作成したサーフェースシェーダープログラムを細かく見ていく。 今回解説するのは、前回紹介した図1のような表示になるシェーダーだ。 Shader "Custom/Standard Surface Shader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く