テキストプリンター
テキストプリンターは、時間の経過とともに表示(印刷)できるテキストメッセージを提示するために使用されるアクターです。
プリンターの動作は、Naninovel -> Configuration -> Printers コンテキストメニューを使用して構成できます。利用可能なオプションについては、構成ガイド を参照してください。プリンターのリソースマネージャーには、Naninovel -> Resources -> Printers コンテキストメニューを使用してアクセスできます。
シナリオスクリプトでは、テキストプリンターは主に @print および @printer コマンドで制御されます。
; "Dialogue" プリンターをデフォルトにします
@printer Dialogue
; "Fullscreen" プリンターをデフォルトにします
@printer Fullscreen
; デフォルトのプリンターを使用してフレーズを表示します
@print text:"Lorem ipsum dolor sit amet."
; 上記と同じですが、汎用テキストステートメントを使用します
Lorem ipsum dolor sit amet.
; 上記と同じですが、キャラクター "Felix" に関連付けられています
Felix: Lorem ipsum dolor sit amet.組み込みプリンターはUIとして実装されていますが、依然としてアクターであり、すべてのアクター関連の可視性の変更(表示/非表示アニメーション)は、対応するコマンドまたはアクター構成で設定された期間を使用することに注意してください。たとえば、@showPrinter コマンドの time パラメータは表示アニメーションの期間を制御し、指定されていない場合は、プリンターアクター構成プロパティの Change Visibility Duration がデフォルトの期間として使用されます。この場合、プリンターUIプレハブのルートにある Fade Time プロパティは無視されます。
オートリード
オートリード機能により、スクリプトは待機入力(クリックして続行)イベントで実行を自動的に継続できます。
ユーザー入力待ちまたは [-] コマンドは、ユーザーが Continue 入力をアクティブにするまでスクリプトの実行を停止します。これらは通常、テキストメッセージを表示した後に使用されます。オートリードモードの場合、[-] コマンドは代わりに一定期間スクリプトの実行を停止してから終了し、次のコマンドの実行を許可します。停止期間は、最後に表示されたテキストメッセージの長さによって異なり、ゲーム設定の「印刷速度」によってさらに変更されます。
オートリードモードは、AutoPlay 入力(スタンドアロン入力モジュールのデフォルトでは A キー)またはコントロールパネルの「AUTO」ボタンを使用して切り替えることができます。
テキストのスキップ
テキストのスキップ機能により、@print コマンドの実行を早送りして、テキストの表示(印刷)プロセスを効果的にスキップできます。
スキップモードは、Skip 入力(スタンドアロン入力モジュールのデフォルトでは Ctrl キー)またはコントロールパネルの「SKIP」ボタンを使用して切り替えることができます。
デフォルトでは、スキップモードは過去にすでに実行されたコマンドを実行しているときにのみ使用できます。たとえば、ユーザーが表示されるテキストをまだ読んでいない場合、スキップモードは使用できません。これは、ゲーム設定の「スキップモード」設定を使用して変更できます。
プリンターバックログ
プリンターバックログは、ユーザーが以前に表示されたテキストを読み直したり、選択した選択肢を確認したり、ボイスラインを再生したり、(オプションで)ログに記録されたメッセージにロールバックしたりできる機能です。
バックログは、メインゲームループ中にいつでも ShowBacklog 入力(スタンドアロン入力モジュールのデフォルトでは L キー)をアクティブにするか、コントロールパネルの「LOG」ボタンを押すことで表示できます。
さまざまなバックログUIプロパティは、プレハブのルートにアタッチされたコンポーネントを介してカスタマイズ可能です。それぞれが何を制御するかについては、プロパティのツールチップを参照してください。
UIのカスタマイズと構成方法の詳細については、組み込みUIのカスタマイズガイド を参照してください。
プリンターアクター構成の Add To Backlog プロパティを無効にすることで、特定のテキストプリンターがメッセージをバックログに追加するのを防ぐことができます。Split Backlog Messages プロパティが有効になっている場合、バックログに追加されたメッセージは個別のレコードに分割されます。
メッセージテンプレート
メッセージテンプレートを使用して、テキストメッセージの追加処理を自動化できます。処理は、実行時に @format コマンドを使用するか、エディタでプリンターパネルUIの Default Templates プロパティを使用して、各テキストプリンターに対して個別に構成されます。たとえば、以下は組み込みの Fullscreen プリンターのデフォルトのフォーマットテンプレートです。
任意のテキストフォーマットタグまたは文字を指定し、%TEXT% をメッセージテキストに、%AUTHOR% を著者の表示名に置き換えることができます。たとえば、次のテンプレートを考えてみましょう:“%TEXT%” — <i>%AUTHOR%</i> — これは、表示されたメッセージを引用符で囲み、ダッシュとイタリック体の著者名を続けます。たとえば、そのようなテンプレートで処理された Kohaku: Lorem ipsum. は次のようになります。
割り当てられたテンプレートは順番に適用され、Author プロパティを使用すると、表示されたメッセージの著者に基いて適用するテンプレートをフィルタリングできます。著者(キャラクターアクター)IDを指定してテンプレートをその特定の著者にのみ適用可能にするか、+ を指定して任意の著者のメッセージに適用可能にするか、- を指定して著者のいないメッセージに適用可能にするか、* を指定して任意のメッセージに適用します。
Dialogueプリンター
Dialogueプリンターは、柔軟な高さを持つウィンドウ内にテキストを表示します。最初は画面サイズの約3分の1を占め、コンテンツがより多くのスペースを必要とする場合は高さを増やします。Dialogueプリンターは、テキストウィンドウの上のラベルに関連付けられたキャラクター名も表示します。
Wideプリンター
Wideプリンターは、ワイドディスプレイ用に調整されたパネルレイアウトのいくつかの変更を除いて、Dialogueプリンターと非常によく似ています。Wideプリンターは キャラクターアバター 機能もサポートしています。
Fullscreenプリンター
Fullscreenプリンターは、静的サイズのウィンドウ内にテキストを表示します。画面の大部分を占め、大量のテキストを表示することを目的としています(別名「NVL」モード)。
Fullscreenプリンターは、デフォルトでは連続する各printコマンドでテキストをリセットしません。代わりに、必要に応じて @resetText コマンドを使用してプリンターの内容をクリアします。これは、プリンターアクター構成メニューで Auto Reset を有効にすることで変更できます。
Fullscreenプリンターによって処理される各printコマンドは、デフォルトで表示されるテキストの前に2つの改行を追加します(プリンターの現在の内容が空の場合を除く)。これは、プリンターアクター構成メニューで Auto Line Break をゼロに設定することで無効にできます。
以下は、Fullscreenプリンターの使用例です。
; Fullscreenプリンターをアクティブにします。
@printer Fullscreen
; 次の行は同じウィンドウに表示され、2つの改行で区切られます。
Lorem ipsum dolor sit amet. Proin ultricies in leo id scelerisque.
Praesent vel orci luctus, tincidunt nisi et, fringilla arcu. In a metus orci.
Maecenas congue nunc quis lectus porttitor, eget commodo massa congue.
; プリンターの内容をクリアします。
@resetText
; さらに行を表示します。
Morbi ultrices dictum diam, in gravida neque vulputate in.
...Chatプリンター
Chatプリンターは、モバイルメッセンジャーアプリに似た、縦方向にスクロール可能なコンテンツを持つウィンドウで囲まれたメッセージバブル内にテキストを表示します。表示効果の間、表示されたメッセージを文字ごとに表示するのではなく、「著者が入力中」のアニメーションを表示し、その後すぐに表示されたメッセージを表示します。Chatプリンターは キャラクターアバター 機能をサポートしています。
Chatプリンター内に選択肢を埋め込むには、ChatReply 選択肢ハンドラーを参照してください。Chat Printer Panel コンポーネントにある Choice Handler Id プロパティを介してカスタムハンドラーを指定することもできます。
Bubbleプリンター
Bubbleプリンターは、マンガ/コミック スタイルのテキスト表示(「吹き出し」とも呼ばれる)に使用できます。
組み込みのBubbleプリンターは、「Left」と「Right」の2つの外観をサポートしており、キャラクターに対する相対的な位置に基づいてプリンターの方向を揃えるために使用できます。
@printer Bubble.Left pos:42,80 !visible time:0
@show Bubble
Misaki: Aliquam lobortis!
@char Nanikun.Happy
@printer Bubble.Right pos:53,55 !visible time:0
@show Bubble
Nanikun: Integer nec maximus elit, eget posuere risus.一度に複数のBubble(またはその他の)プリンターを表示するには、カスタムプリンターを追加します。
バブルアンカー
Bubbleプリンターを広範囲に使用する場合、毎回手動で位置を指定するのは面倒です。代わりに、アクターアンカーを使用して、Naninovelがバブルをそれぞれのキャラクターに合わせて自動的に配置するようにします。
この機能を有効にするには、キャラクターアクター 内でアンカー位置を指定します。2つのオプションがあります。
- キャラクターメタデータで、
Anchorsリストを使用し、BubbleIDとアクターのゲームオブジェクト内のローカル位置を持つレコードを追加します。 - キャラクターがプレハブ(たとえば、レイヤー、汎用、またはLive2D)の場合、プレハブ内に空のゲームオブジェクトを作成し、
Actor Anchorコンポーネントをアタッチし、BubbleをアンカーIDとして割り当てます。
正しく構成されると、Naninovelはプリンターをアンカーの上に配置するだけでなく、画面からはみ出す場合は反転させます。プリンターが反転しているかどうかに応じてより正確に配置するために、キャラクターごとに複数のアンカーを指定できます。以下はサポートされているアンカーIDです。
| アンカーID | 説明 |
|---|---|
Bubble | 他のどれも適合しない場合のデフォルトまたはフォールバックアンカー。 |
Bubble/TopLeft | バブルが左上隅に配置されている場合に使用されます。 |
Bubble/Top | バブルが上端に配置されている場合に使用されます。 |
Bubble/TopRight | バブルが右上隅に配置されている場合に使用されます。 |
Bubble/Left | バブルが左端に配置されている場合に使用されます。 |
Bubble/Right | バブルが右端に配置されている場合に使用されます。 |
Bubble/BottomLeft | バブルが左下に配置されている場合に使用されます。 |
Bubble/Bottom | バブルが下端に配置されている場合に使用されます。 |
Bubble/BottomRight | バブルが右下に配置されている場合に使用されます。 |
すべてを指定する必要はありません。Naninovelは、完全に一致するものがない場合でも、最適なものを選択します。たとえば、左上に配置されているが Bubble/TopLeft がない場合、Bubble/Left、次に Bubble/Top を確認し、最後に Bubble にフォールバックします。 以下は、4つのアンカー(コーナーごとに1つ)を指定する例です。
EXAMPLE
キャラクターメタデータとプレハブ内の両方を介してバブルアンカーを設定する例については、サンプルプロジェクト の Content/Characters にある Hiyori および Senko Live2Dキャラクターを確認してください。
カスタムBubbleプリンターを作成する場合、反転と配置の動作は Floating Printer プロパティで構成できます。各プロパティが動作にどのように影響するかについては、ツールチップを参照してください。
アンカーによる自動配置を使用している場合でも、バブルを手動で配置したい場合があります。これは @printer コマンドを使用して行うことができます。コマンドで明示的な位置が指定されている場合、自動配置は一時的に無効になります。再度有効にするには、anchor! フラグを使用します。
; 自動配置を無効にし、バブルを手動で配置します
@printer Bubble pos:50,50
...
; 自動配置を再度有効にします
@printer Bubble anchor!カスタムプリンターの追加
組み込みテンプレートに基づいてカスタムテキストプリンターを追加したり、ゼロから新しいプリンターを作成したりできます。たとえば、組み込みの Dialogue テンプレートをカスタマイズしてみましょう。
Create -> Naninovel -> Text Printers -> Dialogue アセットコンテキストメニューを使用して、Naninovelパッケージの外部(例:Assets/TextPrinters フォルダ)にダイアログプレハブを作成します。
プレハブを編集します:フォント、テクスチャの変更、アニメーションの追加など。利用可能なUI構築ツールの詳細については、uGUIのUnityドキュメント を参照してください。UIカスタマイズガイド には、uGUIの操作に関するいくつかのチュートリアルビデオとサンプルプロジェクトもあります。
Naninovel -> Resources -> Printers コンテキストメニューからアクセスできるプリンターのマネージャーGUIを使用して、プレハブをエンジンリソースに公開します。+(プラス)ボタンを使用して新しいレコードを追加し、アクターID(プレハブ名とは異なる場合があります)を入力し、レコードをダブルクリックしてアクター設定を開きます。プリンタープレハブを Resource フィールドにドラッグアンドドロップします。
これで、@printer コマンドを介してアクティブ化し、マネージャーで設定したアクターIDを指定することで、新しいテキストプリンターを使用できます。
@printer MyNewPrinterEXAMPLE
カスタムプリンターを追加する例については、デモプロジェクト を確認してください。プレハブは Assets/Prefabs/CustomPrinter.prefab として保存されています。
ITextPrinterActor インターフェイスを手動で実装して、ゼロからプリンターを作成することも可能です。詳細については、カスタムアクターの実装 に関するガイドを参照してください。
テキスト表示エフェクト
表示されるテキストメッセージの進行状況は、UnityのTMPro Textをラップし、すべて同じ機能をサポートする Revealable Text コンポーネントによって維持されます。これを行うには、現在の表示進行状況に応じて最大表示文字数を制限する Reveal Clipped などのスタンドアロンコンポーネントが使用されます。ほとんどの組み込みプリンターには Reveal Fader コンポーネントも適用されており、表示される文字にグラデーション不透明度フェードを追加します。
表示効果の強度(フェードがどこまで伸びるか)を変更するには、Length プロパティを変更します。
Slack Opacity が1未満の場合、最後の追加の前に表示されたテキストの不透明度は、Slack Duration 秒かけて指定された値にフェードします(これは、組み込みの Fullscreen プリンターでデフォルトで有効になっています)。
テキストプリンターの寸法が一定で、さまざまなメッセージの長さやフォントサイズに対応できない場合は、TMProのテキストオーバーフローモードを「page」に設定し、Reveal Paginator コンポーネントを追加します。これにより、現在表示されているページが表示進行状況と同期されます。組み込みの Fullscreen プリンターで設定例を見つけてください。
テキストスタイル
テキスト内に配置されたリッチテキストタグを使用するか、@format コマンドを使用して、さまざまなテキストスタイルを適用できます。
; "Lorem" を太字で、"sit" を青とイタリック体で表示します。
Kohaku: <b>Lorem</b> ipsum <color=#0000FF><i>sit</i></color> amet.利用可能なタグについては、TMProリッチテキストドキュメント を参照してください。
TIP
特定のキャラクターまたはプリンターによって作成されたすべてのメッセージに特定のテキストフォーマットまたはスタイルを適用したい場合は、メッセージテンプレート 機能を確認してください。
ルビ(ふりがな)
ルビ 文字のサポートは、カスタム <ruby> タグを介してNaninovelの Naninovel TMPro Text コンポーネント(Revealable Text はこれに基づいています)によって提供されます。ルビ文字を配置するテキストをルビタグで囲み、タグ内にルビテキストを指定します。例:
Lorem <ruby="VERY">ipsum</ruby> dolor sit amet.— 実行時にメッセージが表示されると、"VERY" ルビテキストが "ipsum" という単語のすぐ上に表示されます。
NOTE
<ruby> を他のタグと組み合わせる場合は、フォーマットの問題を防ぐためにルビタグを最後に指定してください。例:
Lorem <tip="TipID"><ruby="VERY">ipsum</ruby></tip> dolor sit amet.プリンタープレハブで使用される Naninovel TMPro Text コンポーネントのプロパティを変更することで、ルビテキストのサイズと垂直方向の行オフセットを追加で制御できます。
デフォルトでは、ルビテキストが表示されるメッセージに挿入されると、新しいコンテンツを補正するために行の高さが増加します。すべての行(ルビテキストの有無にかかわらず)の高さを等しくするには、Add Ruby Line Height プロパティを無効にし、デフォルトの行の高さを増やします。
以下は、動作中のルビタグのビデオデモンストレーションです。
右から左(アラビア語)テキスト
RTLテキスト表示効果のサポートは、すべての組み込みプリンターで有効にできます。
プリンターでRTLテキストを使用するには、次の手順を実行します。
- 任意の組み込みテンプレートからカスタムテキストプリンターを作成します。
- プリンター内の
Revealable TextコンポーネントでEnable RTL Editorプロパティを設定します。 - 同じコンポーネント("Naninovel Settings" ドロップダウンの下)で
Fix Arabic Textプロパティを有効にします。
互換性のあるフォント とアトラス構成を使用することを忘れないでください。以下はその例です。
Font Size: Auto Sizing
Font padding: 5
Packing Method: Optimum
Atlas res: 1024x1024
Character Set: Unicode Range (Hex) with this Sequence:
20-7E,600-603,60B-615,61B,61E-61F,621-63A,640-65E,660-6DC,6DF-6E8,6EA-6FF,750-76D,FB50-FBB1,FBD3-FBE9,FBFC-FBFF,FC5E-FC62,FD3E-FD3F,FDF2,FDFC,FE80-FEFC
Font Render Mode: Distance Field 16EXAMPLE
右から左(アラビア語)テキストをサポートするカスタムtext mesh proプリンターの設定の完全な例については、RTLサンプル を参照してください。
NOTE
Unityはアラビア語テキストをネイティブにサポートしていません。アラビア語をサポートする必要があるテキストラベル(プリンター以外)には、Naninovel TMPro Text コンポーネントを使用することを検討してください。
CJK言語
中国語、日本語、韓国語には多くのユニークな記号がありますが、ゲームで通常必要なのはそのごく一部だけです。生成されたフォントアトラスサイズを最適化するために、TMProにはSDFテクスチャを作成する文字セットを指定するオプションがあります。
Naninovelによって表示される文字を見つけるには、Naninovel -> Tools -> Character Extractor エディタメニューからアクセスできるCharacter Utilityを使用します。
ツールは、指定されたフォルダ(すべてのサブフォルダを含む)内のシナリオスクリプトと管理テキストドキュメントの両方を検査するため、表示されたすべてのテキスト、UIラベル、アンロック可能なヒントなど、Naninovelによってプレイヤーに表示されたすべてのテキストの文字を取得できます。
EXAMPLE
日本語ロケール用にカスタムTMProフォントアトラスを使用する例については、ローカライズサンプル を確認してください。日本語が選択されるとフォントが自動的に切り替わり、他の言語が選択されるとデフォルトのアトラスに戻ります。
テキスト表示音
表示効果をサポートする組み込みプリンター(現在は Dialogue、Fullscreen、Wide)の場合、文字が表示されたときに再生するSFXをオプションで設定できます。
上記の「カスタムプリンターの追加」ガイドに従って、組み込みのいずれかに基づいてカスタムプリンターを作成し、プレハブのルートオブジェクトにアタッチされた Revealable Text Printer Panel コンポーネントを見つけ、Chars SFX プロパティを使用して、文字が表示されたときに再生されるSFXを設定します。利用可能なオプションの実際のリストは、Naninovel -> Resources -> Audio メニューを介して追加したオーディオリソースに基づいています。
次の図は、スペースに「Keystroke2」SFX、文字 D、d、F、1、4、9、* に「Explosion」が再生され、% 文字にはSFXが再生されず、その他のすべての文字には「Keystroke1」が再生される設定を表しています。
あるいは、キャラクター構成で Message Sound を設定して、そのキャラクターがメッセージの著者である間にテキストが表示されたときにキャラクター固有のサウンドを再生できます(どのテキストプリンターがメッセージを表示しているかに関係なく)。
テキスト表示音は非常に頻繁に再生され(メッセージの表示速度に応じて)、同じ音が連続して再生されるとクリップされるため、対応するオーディオクリップが非常に短く鋭い(冒頭に一時停止や無音がない)ことを確認してください。
表示音が機能しない場合(たとえば、各文字の表示で再生するには音が短くないなど)、TextPrinterManager エンジンサービス の OnPrintTextStarted および OnPrintTextFinished イベントを使用して、それに応じてサウンドのループを開始/停止することを検討してください。
表示イベント
特定の文字が表示されたときのイベントにフックして、任意のアクションを実行することが可能です。イベントを呼び出す必要がある表示テキスト内の場所を <@...> タグで指定します。たとえば、「dolor」が表示された後に「foo」ペイロードを持つ表示イベントをトリガーするには:
Lorem ipsum dolor<@foo> sit amet.プリンタープレハブの表示可能テキストオブジェクトにアタッチされた Event Broadcaster コンポーネントを使用して、イベントをリッスンします。すべての組み込みプリンターにはコンポーネントがすでにアタッチされているため、リスナーを配線するだけです。
組み込みプリンターでは、Play Command オプションも有効になっています。これにより、コンポーネントはイベント本体(@ の後の部分)をコマンドとして解析して実行しようとします。たとえば、次は「dolor」が表示されたときに背景の色合いを変更します。
Lorem ipsum dolor<@back tint:blue> sit amet.インラインコマンド の代わりにイベントタグを使用して ローカライズドキュメント に公開し、翻訳者が選択したロケールに基づいて実行されるコマンドをオーバーライドできるようにすることができます。
待機入力タグ
ローカライズドキュメントに公開するためだけに [-] 待機入力コマンドの代わりに <@wait i> を頻繁に使用する場合は、代わりに <-> 待機入力タグの使用を検討してください。同じように機能しますが、入力が短くなります。
; 'Lorem[-] ipsum' と同じですが、待機入力
; コマンドはローカライズドキュメントに公開されます。
Lorem<-> ipsum表示式
場合によっては、生成されたローカライズドキュメントに スクリプト式 を含めるか、言語(ロケール)が変更されたときに式の再評価を強制する必要がある場合があります。
プロセスは 表示イベント に似ていますが、@ の代わりに : タグを使用します。
Lorem ipsum <:random(t_text1, t_text2)> sit amet.— random(t_text1, t_text2) 式は、言語が変更された場合を含め、テキストがプリンターに割り当てられるたびに再評価され、t_text1 と t_text2 スクリプトテキスト変数 が現在アクティブなロケールと同期します。式もローカライズドキュメントに含まれ、特定の言語ごとに変更できます。
表示式は、翻訳者が注入された値の順序を変更できるようにするのにも役立ちます。言語によって、さまざまな品詞の順序/優先順位に関するルールが異なるのが一般的であるためです。
Hello, <:MC>! How's <:AC> doing?— ここで、MC と AC 変数(プレイヤーが指定したキャラクター名が含まれていると思われる)の両方が生成されたローカライズドキュメントに公開され、翻訳者は必要に応じて順序を変更できます。
WARNING
未定義の動作を引き起こす可能性があるため、ゲームの状態を変更または依存する式でこの機能を使用することは控えてください。たとえば、結果がローカル変数 foo に依存する式があり、この式を含むメッセージがある時点で表示され、バックログに保持されているとします。プレイヤーがロケールを変更すると、式はロケールが変更されたときの foo の値を使用して再評価されますが、これは最初に表示されたときとは異なる場合があります。
選択タグ
表示式 の一般的な使用例は、セレクターとして使用することです。たとえば、プールからのランダムなテキストや、代名詞に依存する言い回しなど、プレイヤーの選択に依存するテキストを含めたい場合があります。
これがシナリオで広く行われている場合、毎回完全な式構文を繰り返すのは面倒になる可能性があります。このような場合は、選択タグの使用を検討してください。
; ランダムな色を選択します。
私の好きな色は </red/blue/green> です。
; ユーザーの選択に基づいて選択します。
代名詞を選択してください。
@choice "He/Him" set:selector=0
@choice "She/Her" set:selector=1
@choice "They/Them" set:selector=2
...
</He/She/They> </was/was/were> magnificent.</x/y> タグに注目してください。これらはセレクタータグです。/ 文字の間のテキストはオプションと呼ばれます。デフォルトでは、ランダムなオプションが返されます。ただし、selector 変数をインデックスに設定すると、タグはそのインデックス(0ベース)を持つオプションを返します。
より柔軟な選択ロジックが必要な場合は、select エイリアスを使用してカスタム 式関数 を作成し、params string[] を受け入れて string を返すようにします。セレクタータグがコンパイルされるたびに、関数を使用して結果を評価します。以下はカスタム選択関数の例です。最初のオプションで選択の種類を指定し、最初のオプションが空の場合はランダム選択にフォールバックします。
[ExpressionFunction("select")]
public static string Select (params string[] args)
{
var kind = args[0];
var options = args[1..];
return kind switch {
"p" => SelectPronoun(options),
"t" => SelectTemper(options),
_ => options[Random.Range(0, options.Length)]
};
}その後、次のようにシナリオで使用できます。
; 代名詞に基づいて選択します。
</p/his/her/their>
; 気質に基づいて選択します。
</t/smiling/frowning/poker face>
; ランダムに選択します。
<//green/red>セレクタータグはローカライズドキュメントにも公開され、翻訳者は必要に応じて構成をターゲット文化に適応させることができます。