top of page

3D脱出ゲーム編

Lesson1 プレイヤーを実装しよう

1-0

1-0 このパートで作るゲームについて

1-0 このパートで作るゲームについて

1

​はじめに

 この「3D脱出ゲーム編」では3Dアクションゲーム編を終えた人向けにより高度な3Dゲームの作り方を解説していきます。このサイトの中でも一番難度の高い教材になりますが、難しい処理を完全に理解する必要はありません。3Dアクションゲーム編の内容もちょくちょく出てくるので復習しながら進めていってください。

 また、作ったゲームに敵を配置してホラーゲームにするEXレッスンもあります。

​ まずはどんなゲームかイメージできるように3D脱出ゲーム編のメインページからサンプルゲームを遊んでみてください。

​ このゲームではゲームパッドを使用します。キーボード操作でも遊べるように作っていきますが、スムーズに制作を進めるためにゲームパッドを用意しておいてください。

1-1

1

URPとは

2

URPプロジェクト
​作成

1-1 新規プロジェクトを作る

1-1 新規プロジェクトを作る

 まずはゲームを制作していくためのプロジェクトを作成しましょう。

 今回はURP(Universal Render Pipeline)というテンプレートを使ってゲームを作っていきます。

 URPとは、Unityのレンダリングパイプラインの一つです。ざっくり言うとUnityで画面を描画する仕組みです。

 実は3Dアクションゲーム編で使用した通常の3Dコアの描画の仕組みは古いもので、今後はURPが標準になっていくと言われています。

 URPの特徴としては以下のようなものが挙げられます。

・描画のクオリティは3Dコアと大差ないが、描画処理が最適化されており負荷が少ない

ShaderGraphなどの新しい機能が使える(3Dコアは旧式の描画方法なので、今後新機能を追加する予定はないと言われています)

・通常の3Dコアとは描画方法が異なるため、3Dコアで作ったシェーダーをURPでそのまま使用することはできない

 URPを使用するといっても、今まで学んだUnityの知識が無駄になるわけではありません。ほとんどの機能はそのまま使えるので、3Dコアと異なる部分だけ覚えていきましょう。

 UnityにはURP以外にもHDRPというレンダリングパイプラインがあります。

 HDRPは3DコアやURPと異なり、非常にハイエンドなグラフィック表現が特徴です。物理ベースレンダリング(PBR)を利用可能で、よりリアルな演出を行うことが可能です。

​ ただし、HDRPは現状モバイルゲームなどには対応しておらず、コンシューマ機やPCゲームでの使用が想定されています。

【参考】HD レンダーパイプライン(HDRP)

 HDRPには雲や水面の表現を可能にする機能があります。​ゲームの内容や想定しているプラットフォームによっては、HDRPの使用も検討してみてください。

​【HDRPを用いた地形作成の様子】       【Water Systemの新しい機能】

Unity Tips!

 それではUnity Hubを起動して、新しいプロジェクトを作成してください。

 使用するテンプレートは3D(URP)を選択してください(ない場合はインストールしてください)

​ プロジェクトにわかりやすい名前をつけたら「プロジェクトを作成」をクリックしましょう。

3

画面サイズ変更

 プロジェクトを作成できたら、まずは画面サイズを16:10に変更しておきます。

4

パッケージを
​インポートする

 次に素材配布所(https://drive.google.com/file/d/1gTcMUa_S5o-xbKORxhEnwyV8yiuZy0WY/view?usp=sharing)からパッケージをダウンロードして、3Dアクションゲーム編と同じようにドラッグ&ドロップでインポートしてください。

5

メインシーンに
​切り替える

 同梱されているMainシーンをダブルクリックして開いてください。

 壁や床などは既に配置されています。SampleSceneは使用しません。

 マウスの右を押した状態でWASDキーを押すと、1人称ゲームのようにカメラを移動することができます。これをフライスルーモードと言い、実際のゲーム画面での見栄えを確認するのに便利です。

 また、QEキーで上下に移動でき、ホイールで移動速度を変更できます。SHIFTキーを押して速く移動することもできます。

​ まずはフライスルーモードでステージを見て回ってみてください。

1-2

1-2 ゲームパッドとキーボードの両立

1-2 ゲームパッドとキーボードの両立

1

設定項目を追加

 デフォルトの入力設定ではゲームパッド操作とキーボード操作を両立することはできません。ですが、ゲームパッドがないときでも遊べるようにキーボード操作にも対応しておきたいところです​ここで設定を間違えると後でうまく操作できないので、教材と見比べながらしっかり設定してください。​

​ EditのProject Settingsを開いて「Input Manager」を選択してください。選択したらAxesの左側にある▼をクリックして開いてください。

 まずはSizeを4つ増やしてください。今回は初期値が30だったので34にしています(バージョンによって初期値が異なる可能性があります)

2

​設定を変更する

 1番上にあるHorizontalとVerticalを開き「Negative Button」と「Positive Button」内のテキストを削除してください。

 次に先ほど追加した4つの項目を設定します。名前が同じになっているためややこしいですが、下から4番目の項目を選択してください。

 1番目の項目は以下のように設定してください。テキストの打ち間違いに注意してください。

・Name→「Horizontal2」

・Descriptive Name→「Stick R left/right」

・Negative Button→空白

・Positive Button→空白

・Gravity→0

・Dead→0.19

・Sensitivity→1

​・Axis→4th axis(Joysticks)

 2番目の項目は以下のように設定してください。

・Name→「Vertical2」

・Descriptive Name→「Stick R up/down」

・Negative Button→空白

・Positive Button→空白

・Gravity→0

・Dead→0.19

・Sensitivity→1

​・Axis→5th axis(Joysticks)

 3番目の項目は以下のように設定してください。変更箇所が多いので注意しましょう。

・Name→「Horizontal2」

・Descriptive Name→「Stick R left/right」

・Negative Button→空白

・Positive Button→空白

・Alt Negative Button→left

・Alt Positive Button→right

・Gravity→3

・Dead→0.01

・Sensitivity→3

・Type→Key or Mouse Button

​・Axis→4th axis(Joysticks)

 4番目の項目は以下のように設定してください。

・Name→「Vertical2」

・Descriptive Name→「Stick R up/down」

・Negative Button→空白

・Positive Button→空白

・Alt Negative Button→down

・Alt Positive Button→up

・Gravity→3

・Dead→0.01

・Sensitivity→3

・Type→Key or Mouse Button

​・Axis→5th axis(Joysticks)

 最初に追加した4つの項目の内容を設定できたらOKです。Project Managerを閉じてください。

​ 設定した項目の解説は割愛します。各項目の詳細は公式のリファレンスを参考にしてください。

1-3

1-3 ポストプロセスの調整

1-3 ポストプロセスの調整

1

ポストプロセスを
​調整する

 早くプレイヤーを作りたいかもしれませんが、先にポストプロセスを調整しておきます。URPでは最初からポストプロセスが導入されています。

​ ヒエラルキーからGlobal Volumeを選択してください。

 インスペクターからポストプロセスの調整をしていきましょう。

 Tonemapping(画面の明るすぎる部分などを調整する)はデフォルトのままで構いません。

​ Bloom(明るい部分をネオンのように光らせる)はThresholdを1、Intensityを0.05に設定してください。

2

​項目を追加する

 Vignette(画面の端の色を変更する)はそのままで構いません。

 

​ 新しい項目を追加しましょう。下部の「Add Override」ボタンをクリックして「Depth Of Field」と「Color Adjustments」を追加してください。

 Depth Of Field(被写界深度、指定した距離の物体がぼやけるようになる)はModeを「Gaussian」にして、Startを40、Endを140に設定してください。

 Color Adjustments(画面のトーンや明るさを調整)はPostExposureを1にして、Color Filterのチェックを入れておいてください。

 Tonemappingは画面全体の明るさを調整してくれる便利なものですが、画面が暗く地味になってしまう問題があります。

 それを解決するのがColor Adjustments​のPostExposureです。この値を上げると画面が全体的に明るくなり、トーンマップを使いながら画面を明るくすることができます。

3

SSAOの調整

 次にAmbient Occlusion(物体の角などを暗くして画面の現実感を上げる)です。3Dアクションゲーム編では同じようにVolumeで設定していましたが、URPでは設定場所が変わっています。

​ Settingsフォルダを開いてください​。

 フォルダ内にあるURP-HighFidelity-Rendererを選択してください。

 SSAOのIntensity(強度)を50に上げてください。本棚や木箱など、角になっている部分がより暗くなるようになります。

4

ディレクション
​ライトの調整

 最後にポストプロセスとは異なりますが、ディレクションライトの設定を調整しましょう。

 ヒエラルキーからDirectional Lightを選択して、RotationをX=80 Y=60 Z=0に、ShadowsのStrength(強度)を0.6に設定してください。

 これで基本的な絵作りは完了です。

​ ポストプロセスには他にも様々な機能があるため、作りたいゲームの雰囲気に応じて調整するようにしてください。

1-4

1-4 プレイヤーの移動

1-4 プレイヤーの移動

1

天井を一時的に
​非表示にする

 準備ができたところで、一人称視点のプレイヤーを作成して移動できるようにしましょう。

​ 開発中はステージを見やすいように天井を非表示にしておきましょう。ヒエラルキーからCeilingを選択して、非アクティブにしてください。

2

プレイヤーを作成

 天井は必要に応じてアクティブ状態を切り替えてください。

 準備ができたところで、一人称視点のプレイヤーを作成して移動できるようにしましょう。

​ 新しい空オブジェクトを作成して、名前をPlayerにしてください。タグはPlayerに設定し、PositionはX=40 Y=5.6 Z=-53にしましょう。

3

当たり判定を追加

 次はプレイヤーに当たり判定と重力を追加しましょう。流れは3Dアクションゲーム編の1-4と同じです。

​ プレイヤーに「Add Component」からCapsule Colliderを追加してください。

 コライダーのRadius(半径)を1.2に、Height(高さ)を10に設定してください。

4

物理演算を適用

 次に重力を設定しましょう。

 ​「Add Component」からRigidbodyを追加してください。ConstraintsのFreeze RotationのXYZ全てにチェックを入れて、物理演算による回転を制限しておきましょう。

5

カメラを

追尾させる

 カメラをプレイヤーの子オブジェクトにしましょう。これによってPlayerオブジェクトが移動するとカメラも同じように移動するようになります。

 ヒエラルキー内でMain CameraをPlayerにドラッグ&ドロップしてください。

​→

3_1_30

 子オブジェクトの座標は親オブジェクト(プレイヤー)を基準にしたローカル座標になります。PositionはX=0 Y=4.5 Z=0に設定してください。

 また、今回は一人称カメラなので近平面が近くなるように0.1に設定しておきます。遠平面は500にしておきましょう。

6

スクリプト用の
フォルダを作成

 後は移動処理のスクリプトを作成するだけになります。

​ プロジェクトウィンドウを右クリック→「Create」→「Folder」を選択して、スクリプトを入れておくためのScriptフォルダを作成してください。

7

移動処理を
​実装する

 Scriptフォルダ内にPlayerMoveスクリプトを作成して、以下のように入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class PlayerMove : MonoBehaviour
{
    // パラメータ
    [SerializeField]
    float MoveSpeed = 1000.0f;

 

    // キャッシュ
    Rigidbody m_rigidBody;
    GameObject m_gameCameraObj;

 

    void Start()
    {
        // 必要な情報を取得
        m_rigidBody = GetComponent<Rigidbody>();
        m_gameCameraObj = Camera.main.gameObject;
    }


    // Fixedなので注意!

    void FixedUpdate()
    {
        // カメラを考慮した移動
        Vector3 PlayerMove = Vector3.zero;
        Vector3 stickL = Vector3.zero;

        stickL.z = Input.GetAxis("Vertical");
        stickL.x = Input.GetAxis("Horizontal");

 

        Vector3 forward = m_gameCameraObj.transform.forward;
        Vector3 right = m_gameCameraObj.transform.right;
        forward.y = 0.0f;
        right.y = 0.0f;

 

        right *= stickL.x;
        forward *= stickL.z;

 

        // 移動速度に上記で計算したベクトルを加算する
        PlayerMove += right + forward;

 

        // プレイヤーの速度を設定することで移動させる
        PlayerMove = (PlayerMove * MoveSpeed * Time.deltaTime);
        PlayerMove.y = m_rigidBody.velocity.y;
        m_rigidBody.velocity = PlayerMove;
    }
}

 基本的には3Dアクションゲーム編のプレイヤーと同じですが、一部異なる点があります。

【プログラムの解説】

・[SerializeField] というコードがありますが、これはAttribute(アトリビュート)と呼ばれるもので変数に属性を付与することができます。publicやprivate(アクセス指定子)とは異なり、アトリビュートはインスペクター上での属性を付与するものが主です。

 変数をpublicにするとインスペクター上に表示できますが、publicにするということはどこからでもアクセスできてしまう…つまり外部から簡単に変更できてしまうということになります。変数をprivateにしつつインスペクター上に値を表示したい時は、変数の前に[SerializeField] という属性を付与することで実現することができます。

 アトリビュートについてはEXでも解説しているので参考にしてみてください。

​ 「アクセスがどうとかよくわかんないよ!」という人は気にしなくてOKです。

8

プレイヤーに
​アタッチする

・Input.GetAxis("Vertical") はゲームパッドの左スティックの上下の入力量を取得する関数です。入力量は-1.0f~1.0fの間で返されます。

 また、キーボードのWキーが押されると1.0fを、Sキーが押されると-1.0fを返すようにもなっています。これによって、ゲームパッドがないときにはキーボードで操作を代用できるようになります。

​ 同じようにInput.GetAxis("Horizontal") は左スティックの左右の入力量、AキーとDキーの入力を取得することができます。

​・Rigidbodyクラスのパラメータvelocityは「物体がどの方向にどれだけの速度で移動しているか」を表すVector3型のパラメータです。​移動量を計算してvelocityに代入することで、プレイヤーの移動を実現しています。

​ コードが書けたら保存して、PlayerMoveスクリプトをPlayerにドラッグ&ドロップしてアタッチしてください。

 これでプレイヤーが移動できるようになりました。ゲームを実行して、ゲームパッドの左スティックか、WASDキーで移動してみてください。

​ まだゲームの最適化をしていないので描画に負荷がかかりますが、これは後ほど修正します。

 前述のとおり移動速度用の変数MoveSpeedに[SerializeField]というアトリビュート(属性)を付与しているので、privateな変数でありながらインスペクターに表示されています。

 移動速度はお好みの値に調整してください。

1-5

1

カメラの回転を
​実装する

 AddForceやvelocityなど物理演算を扱う移動処理は、FixedUpdateに書くことが推奨されています。FixedUpdateは決まった間隔で実行されますが、UpdateはFPSによって実行間隔が変わるため、移動処理に使うとガタガタした移動になってしまいます。

​ 気になる方は実際に移動処理をUpdateに書いてみてください。移動が不安定になるはずです。

Unity Tips!
1-5 カメラ操作

1-5 カメラ操作

 次はカメラ操作を実装しましょう。こちらも基本的な内容は3Dアクションゲーム編と同じです。

​ GameCameraスクリプトを作成して、以下のように入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameCamera : MonoBehaviour
{
    [Header("カメラの回転速度"), SerializeField]
    float RotSpeed = 200.0f;
    [Header("カメラの回転モード(X)"), SerializeField]
    bool CameraModeX = false;
    [Header("カメラの回転モード(Y)"), SerializeField]
    bool CameraModeY = false;

 

    [Header("X回転最大値"), SerializeField]
    float MaxX = 60.0f;
    [Header("X回転最小値"), SerializeField]
    float MinX = -40.0f;

 

    // 初期座標
    Vector3 m_defPos;

 

    void Awake()
    {
        // 初期ローカル座標を保存
        m_defPos = transform.localPosition;
    }

 

    void Update()
    {
        
    }

 

    void LateUpdate()
    {
        // 右スティックでカメラ回転

 

        // 上下
        float rot = Time.deltaTime * RotSpeed;
        if (Input.GetAxisRaw("Vertical2") != 0.0f)
        {
            rot *= Input.GetAxisRaw("Vertical2");

            if (CameraModeY)
            {
                // モードに応じて変更
                rot *= -1.0f;
            }
        }
        else
        {
            rot = 0.0f;
        }
        transform.RotateAround(transform.position, transform.right, rot);

 

        // X角度制限
        float nowRot = transform.localEulerAngles.x;
        // 取得した角度は0~360°なので補正する
        if (nowRot >= 180.0f)
        {
            nowRot -= 360.0f;
        }
        if (nowRot > MaxX)
        {
            transform.localEulerAngles = new Vector3(
                MaxX, transform.localEulerAngles.y, transform.localEulerAngles.z);
        }
        if (nowRot < MinX)
        {
            transform.localEulerAngles = new Vector3(
                MinX, transform.localEulerAngles.y, transform.localEulerAngles.z);
        }

 

        // 左右
        rot = Time.deltaTime * RotSpeed;

        if (CameraModeX)
        {
            // モードに応じて変更
            rot *= -1.0f;
        }

        if (Input.GetAxisRaw("Horizontal2") != 0.0f)
        {
            rot *= Input.GetAxisRaw("Horizontal2");
        }
        else
        {
            rot = 0.0f;
        }
        transform.RotateAround(transform.position, Vector3.up, rot);

 

        // Z軸の回転があるとややこしいので制限する
        Vector3 angles = transform.eulerAngles;
        angles.z = 0.0f;
        transform.eulerAngles = angles;

 

        // 座標は固定
        transform.localPosition = m_defPos;
    }

}

【プログラムの解説】​

・[Header("表示したい文")] は前述したアトリビュートの一種です。この文を書くことでインスペクター内に文章を表示することができます。日本語も使えます。インスペクターを見やすく整理するためにぜひ使ってみてください。

・[SerializeField, Header("テキスト")] のように,(カンマ)で区切ることで複数のアトリビュートを同時に使用することができます。

 

 

 コードが書けたら保存して、Main CameraにGameCameraスクリプトをアタッチしてください。ゲームを実行して、右スティックか矢印キーでカメラが回転することを確認しましょう。

2

​重力を強くする

 段差を通った時などに大きくジャンプしてしまうことがあるため、重力を強くしましょう。今回は重力を5倍にします。

​ EditのProject Settingsを開いて「Physics」を選択してください。

 Unityではパラメータ内で四則演算を行うこともできます。GravityのYに「*5」を追加してEnterキーを押してください。重力が-49.05になります。

 今回はジャンプやアニメーションなどは必要ないため、プレイヤーの移動処理は一通り完成になります。

1-6

1-6 最適化

1-6 最適化

1

Batchsについて

 ゲームに負荷がかかる要因は色々あるのですが、このゲームでは描画の負荷がかなり大きくなっています。このマップには大量のオブジェクトが配置されており実行時に大きい負荷がかかるため、ここで最適化を行いましょう。

 

 DirectXの授業などで解説されているかと思いますが、オブジェクトを描画する際にはドローコールというものが行われます。これはCPUからGPUに「絵を描いて!」と命令する処理になります。この処理が多ければ多いほど描画の処理は重くなるため、ドローコールを削減することがゲームの軽量化に繋がります。

 Gameウィンドウの右上にあるStatsボタンを押した状態でゲームを実行すると、FPSや描画回数などの情報を確認できます。

 Batchesは描画するメッシュをCPUからGPUに転送した回数です。実際に見てみると多くて3000回のドローコールが呼ばれています。

 参考までにスマートフォンゲームでのBatchesの目安は100回前後と言われていたりします。現在は描画処理にかなりの負荷がかかっているようです。今回はこのBatchsの値を減らすことを目指してみましょう。

2

バッチングの設定

 厳密に言うとBatch(バッチ)とは、同じ設定のオブジェクトをひとまとめにしたものを指します。​例えば同じマテリアルが使われていたり、同じ形状であるようなオブジェクトは、1つにまとめて描画処理を行うことで、描画回数を削減しつつ理想の描画を実現することができるのです。

 そのため Batchs=ドローコール という訳ではないのですが、この教材では便宜上同じものとして解説しています。

 厳密には違う概念とはいえ、Batchsが減ることでドローコールも削減できます。そのため、軽量化のためにBatchsを減らすという手法は間違っていないので安心してください。

(細かい違いですが、誤解のないように小ネタとして補足させていただきました。覚えなくても構いません)

Unity Tips!

 マップにはたくさんのオブジェクトがありますが、そのオブジェクトのメッシュ1つ1つをGPUに送っているとその数だけドローコールが呼ばれることになります。ですが、メッシュを全てまとめて1つのメッシュとして送ればドローコールが1回で済みますよね?

​ Unityにはメッシュをまとめるバッチングという機能があります。まずはバッチングの設定をして最適化を行いましょう。

 (実際には周囲のメッシュをまとめる処理のようで、シーンに存在する全てのメッシュを1つにまとめているわけではありません)

 長々と説明しましたが、内容を全て理解する必要はありません。とりあえず「今のままだとドローコールが多いから、ドローコールを減らす措置を行うんだなー」くらいに思っておいてください。

​ オブジェクトをバッチングの対象にする方法は簡単です。インスペクター内のStatic右側にある▼をクリックして、Batching Staticをクリックするだけになります。Mapを選択してから、Batching Staticを選択してください。

 子オブジェクトの設定も変更するか訊かれるので「Yes, change children」を選択してください。

 この状態でゲームを実行すると、Batchingが修正前の10分の1ほどになったことがわかります。

 サンプルの環境ではFPSが10~20ほど上昇しました。

3

オクルージョン
​カリングの設定

 バッチングは背景などに使うと便利ですが、メッシュを1つにまとめてしまうため、ゲームの実行中にそのオブジェクトを動かしたり回転させたりすることができなくなってしまうので注意しましょう。

​ もう一つ最適化を行いましょう。​3D描画技術にはオクルージョンカリングというものがあります。これは「他のオブジェクトに隠れているオブジェクトを描画しない」ことで、描画の負荷を軽減する技術になります。

​ 例えばこの画面だと、壁の向こうにあるオブジェクトを描画する必要はありません。ですが、今の状態では木箱やテーブルを描画した後に壁を描画しています。これだと少し勿体ないですよね。

​ オクルージョンカリングをするためには、事前に遮蔽判定のデータを生成しておく必要があります。

 まずはヒエラルキー内のMapの子オブジェクトを確認してください​。

​ インスペクター内のStatic右側にある▼をクリックして、Occluder StaticかOccludee Staticを設定しましょう。

 Occluder Staticは遮蔽する側、Occludee Staticは遮蔽される側に設定します。

 Platform(足場)にはOccludee Static、Wall(壁)にはOccluder Static、Furniture(家具)にはOccludee Staticをそれぞれ設定してください。

3_1_51

​ 遮蔽の設定ができたら、遮蔽判定用のデータを生成しましょう。

 「Window」→「Rendering」→「Occlusion Culling」を選択してください。

​ Occlusionウィンドウ内の「Bake」を選択して、下部にあるBakeボタンを押してください。

​ 青い立方体が画面にたくさん表示されたら完了です。

​ ゲームを実行するとBatchesがさらに削減され、FPSが改善したことがわかると思います。

​ この先のLessonでギミックやライトの設置など負荷のかかる処理を色々行いますが、事前に最適化をしておくことでスムーズに制作を進めることができます。

​ Occlusionウィンドウの「Visualization」​を選択した状態でゲームを実行してシーンビューを確認すると、実際にどのようにカリングが行われているか見ることができます。

​ オクルージョンカリングはゲームの最適化に有効な技術ですが、どのゲームにもとりあえず入れればOKというものではありません。特に遮蔽されている物が少ないときは 最適化の効果<遮蔽計算の負荷 となってしまい、逆効果となる可能性もあるので注意しましょう。

 実は他にもフラスタムカリングというものがあります。フラスタムカリングは視錐台カリングとも呼ばれ「カメラに映らないオブジェクトは描画しない」という手法になります。

​ 例えばプレイヤーの後ろにある壁などはカメラに絶対に映らないため描画する必要はありません。こういったカメラの範囲外のオブジェクトの描画を省略する手法がフラスタムカリングになります。

 フラスタムカリングは設定しなくてもUnity側で自動で行われる最適化のため、実装において気にする必要はありません。

 まとめるとオクルージョンカリングは「他のオブジェクトに隠れたオブジェクトを描画しない」手法、フラスタムカリングは「カメラの範囲外のオブジェクトを描画しない」手法になります。

​ オクルージョンカリングとフラスタムカリングは混同されがちですが、実際は違う技術なので間違えないように注意しましょう。

Unity Tips!

​ Lesson1ではプレイヤーの作成と今後の制作に向けた最適化を行いました。

 次のLessonではいよいよゲーム進行の鍵となるアイテムを実装していきます。

まとめ

URP(Universal Render Pipeline)とは、Unityのレンダリングパイプラインの一種です。

【URPの特徴】

 1.従来の「コア」と比較して描画処理が軽量化されている(見た目はほぼ変わらない)

 2.Shader Graphなどの新しい機能が使える

 3.古いシェーダーは対応していないことがある

​・privateな変数の前に [SerializeField] とつけることで、インスペクターに値を表示することができる

​・このように変数やクラスに属性をつけるものを Attribute(アトリビュート)という

評価テスト

評価テスト

河原電子ビジネス専門学校
​ゲームクリエイター科

bottom of page