beginCameraRendering イベントの使用
このページの例には、beginCameraRendering イベントを使用してカスタムメソッドを実行する方法が示されています。
beginCameraRendering イベントの概要
Unity では、各フレームで各アクティブカメラがレンダリングされる前に beginCameraRendering
イベントが発生します。カメラがアクティブでない場合 (例えば、カメラゲームオブジェクトで Camera コンポーネントのチェックボックスがオフになっている場合)、このカメラの beginCameraRendering
イベントは発生しません。
このイベントにメソッドをサブスクライブすると、Unity でカメラのレンダリングが行われる前にカスタムロジックを実行できます。カスタムロジックの例としては、レンダーテクスチャに追加のカメラをレンダリングし、そのテクスチャを平面反射や監視カメラビューのような効果に使用する方法があります。
RenderPipelineManager クラスの他のイベントを使用すれば、さまざまな方法で URP をカスタマイズできます。それらのイベントにも、この記事に記載されている原則を適用できます。
beginCameraRendering イベントの例
この例は、beginCameraRendering
イベントにメソッドをサブスクライブする方法を示しています。
この例の各ステップを実行するには、ユニバーサルプロジェクトテンプレート を使用して新しい Unity プロジェクト を作成します。
- シーン内でキューブを作成します。Example Cube という名前を付けます。
- プロジェクトで C# スクリプトを作成します。
URPCallbackExample
という名前にします。 以下のコードをコピーしてスクリプト内に貼り付けます。
using UnityEngine; using UnityEngine.Rendering; public class URPCallbackExample : MonoBehaviour { // Unity でこのコンポーネントが有効になると、このメソッドが自動的に呼び出されます private void OnEnable() { // RenderPipelineManager.beginCameraRendering イベントのデリゲートとして WriteLogMessage を追加します RenderPipelineManager.beginCameraRendering += WriteLogMessage; } // Unity でこのコンポーネントが無効になると、このメソッドが自動的に呼び出されます private void OnDisable() { // RenderPipelineManager.beginCameraRendering イベントのデリゲートとして WriteLogMessage を削除します RenderPipelineManager.beginCameraRendering -= WriteLogMessage; } // このメソッドが RenderPipeline.beginCameraRendering イベントのデリゲートである場合、Unity では beginCameraRendering イベントが発生するたびにこのメソッドが呼び出されます void WriteLogMessage(ScriptableRenderContext context, Camera camera) { // テキストをコンソールに書き出します Debug.Log($"Beginning rendering the camera: {camera.name}"); } }
ノート: イベントにサブスクライブするときは、イベントデリゲートに定義されているパラメーターをハンドラーメソッド (この例では
WriteLogMessage
) で受け取る必要があります。この例では、イベントデリゲートはRenderPipeline.BeginCameraRendering
であり、<ScriptableRenderContext, Camera>
パラメーターを受け取ります。URPCallbackExample
スクリプトを Example Cube にアタッチします。Play を選択します。Unity で
beginCameraRendering
イベントが発生するたびにスクリプトのメッセージが Console ウィンドウに出力されます。OnDisable()
メソッドを呼び出すには、再生モードで Example Cube を選択し、スクリプトコンポーネントのタイトルの横にあるチェックボックスをオフにします。RenderPipelineManager.beginCameraRendering
イベントからWriteLogMessage
のサブスクライブが解除され、Console ウィンドウへのメッセージの出力が停止されます。