既存のコンポーネントのメソッドをoverrideするには、C#の継承という仕組みを使います。
通常Unityのコンポーネントは
class クラス名 : MonoBehaviour
と書きます。(つまり通常はMonoBehaviour を継承しているというのがUnityの基本的な仕組みです)
独自のコンポーネントを継承する場合は
class 継承した新しいクラス名 : 継承元のクラス名
と書く形になります。
今回で言えば、下記のようにAdvVideoManagerを継承したAdvVideoManagerOverride という新しいコンポーネントを作って下さい。
ファイル名も新しい名前(AdvVideoManagerOverride )と同じ名前にしてください。
using UnityEngine;
namespace Utage
{
public class AdvVideoManagerOverride : AdvVideoManager
{
#if !UTAGE_DISABLE_VIDEO
//ビデオ用のボリューム値を取得
public override float GetVideAudioVolume()
{
//AmbienceVolumeとマスターボリュームの値
float volume = Engine.SoundManager.AmbienceVolume * Engine.SoundManager.MasterVolume;
if (UseAudioListenerVolume)
{
//必要に応じてAudioListenerのボリュームも掛け合わせる
volume *= AudioListener.volume;
}
return volume;
}
#else
#endif
}
}
ちょっとややこしいのですが、#if !UTAGE_DISABLE_VIDEO などとなっているのは、ビデオ機能そのものを一切使用しない設定がしてある場合に対応するためのかなり特殊なケースです。
(通常の継承やoverrideではこのような書き方はしないです)
継承したコンポーネントを作成したら、シーン内で使用している従来のコンポーネントを差し替えます。
AdvEnine > VideoManagerオブジェクトに、
・新しく作ったコンポーネントをAddComponent
・元からあったAdvVideoManageコンポーネントを削除します。(削除したいコンポーネント名で右クリックか、右上の︙アイコンから、「Remove Component」で削除できます)
このように、新しいコンポーネントだけ残るようにしてください
コンポーネントを差し替えた後、
他のコンポーネントとから従来のコンポーネントを参照していたものがあった場合、Missingになっているのでそれを設定しなおします。
今回で言えば、AdvEnine > GraphicManagerオブジェクトのAdvGraphicManagerコンポーネントの「Video Manager」の項目です。
(
AdvGraphicManager のこの部分に関しては、実は設定しなくても実行時に自動的設定されるのですが、Missingのままだと不具合と見分けづらくなるので設定しなおしておいたほうが良いです)
今回は一か所だけでよいのですが、継承をする際にコンポーネントを付け替えた後は、このように他のオブジェクトの参照を設定をしなおさないといけないので、
どこから参照されているかをみわけるのが少し大変かもしれません。
(参照をしなおさないですむようにコンポーネントを差し替える裏技もあるのですが、Unity公式の操作ではないため動作保証が怪しいのでここでは割愛します)
2025年9月7日日曜日 9:05:57 UTC+9 sola: