カスタムアクターの実装
アクターは名前、外観、可視性、および形状(位置、回転、スケール)によって記述されるシーンの要素です。外観、可視性、変形を時間をかけて変化させることもできます。アクターの例として、キャラクター、背景、テキストプリンター、選択肢ハンドラーがあります。
アクターは、 IActor
インターフェイスとその派生物によって表されます:
ICharacterActor
IBackgroundActor
ITextPrinterActor
IChoiceHandlerActor
各アクターインターフェイスは複数の実装を持つことができます。例えば キャラクターアクターには現在、4つの組み込み実装があります。スプライト、分解スプライト、一般、およびLive2Dです。
アクター実装はコンテキストメニュー Naninovel -> Configuration
のコンフィグマネージャーで行えます。すべてのアクターデフォルトの実装を適用することも、アクターごとに特定の実装も設定することもできます。デフォルトの実装を変更するには、 Default Metadata
プロパティを使用します。特定の実装を設定するには、アクターの設定で Implementation
ドロップダウンリストを使用します。
実装ドロップダウンリストには、全てのアクターインターフェイス実装の種類が含まれています。独自のカスタム実装を追加すると、それらもリストに表示されます。独自のアクター実装を作成する際は、Naninovel/Runtime/Actor
スクリプトを参照してください。組み込みの抽象アクター実装 Naninovel.MonoBehaviourActor
を検討してください。これはほとんどの基本インターフェース要件を満たしています。
カスタムアクター実装を作成するときは、互換性のあるパブリックコンストラクター: public CustomActorImplementation (string id, ActorMetadata metadata)
があることを確認してください。ここで id
はアクターのID、 metadata
はアクター(アクターレコードが存在する場合)またはデフォルトのメタデータです。特定のアクターインターフェイスを実装する場合、対応する特定のメタデータをリクエストすることができます(たとえば、 "ICharacterActor" 実装の "CharacterMetadata")。
エディターメニューで割り当てられたリソースをロードするには、必ず絶対パスで指定してください。たとえば、 "CubeBackground" という名前のリソースを割り当てた場合は:
— このようにリソースを読み込みます:
var prefabResource = await prefabLoader.LoadAsync(id + "/CubeBackground");
— ここで、 id
はコンストラクタを介して渡されるアクターのIDです。
以下は、ダミーの ICharacterActor
実装の例です。これは何もしませんが、メソッドのいずれかが呼び出されるとログに記録します。
using Naninovel;
using UniRx.Async;
using UnityEngine;
public class CustomCharacterImplementation : MonoBehaviourActor, ICharacterActor
{
public override string Appearance { get; set; }
public override bool Visible { get; set; }
public CharacterLookDirection LookDirection { get; set; }
public CustomCharacterImplementation (string id, CharacterMetadata metadata)
: base (id, metadata)
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::Ctor({id})");
}
public override UniTask ChangeAppearanceAsync (string appearance, float duration,
EasingType easingType = EasingType.Linear, Transition? transition = default,
AsyncToken asyncToken = default)
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::ChangeAppearanceAsync({appearance})");
return UniTask.CompletedTask;
}
public override UniTask ChangeVisibilityAsync (bool isVisible, float duration,
EasingType easingType = EasingType.Linear, AsyncToken asyncToken = default)
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::ChangeVisibilityAsync({isVisible})");
return UniTask.CompletedTask;
}
public UniTask ChangeLookDirectionAsync (CharacterLookDirection lookDirection, float duration,
EasingType easingType = EasingType.Linear, AsyncToken asyncToken = default)
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::ChangeLookDirectionAsync({lookDirection})");
return UniTask.CompletedTask;
}
protected override Color GetBehaviourTintColor ()
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::GetBehaviourTintColor");
return default;
}
protected override void SetBehaviourTintColor (Color tintColor)
{
Debug.Log($"{nameof(CustomCharacterImplementation)}::SetBehaviourTintColor({tintColor})");
}
}