AnyPortrait > マニュアル > 「Prefab」を編集
「Prefab」はUnityを使用してゲームを作成する際に非常に重要です。
それはGameObjectをリソースとして作成することができますので、必要に使用する機能です。
以前のバージョンのAnyPortraitで作成されたキャラクターを「Prefab」に保存するときに、いくつかの問題点がありました。
v1.0.3から「Prefab」のサポートが変更された、このページの指示を提供しています。
これAnyPortraitによって生成されたキャラクターが「Prefab」として保存されている画面です。
Hierarchyで青い文字で表示されたことを見ることができます。
「Prefab」に保存されたキャラクターを編集しようとするとダイアログが表示されます。
AnyPortraitは、基本的にユニティSceneのGameObjectを編集して、開発されます。対象が「Prefab」である場合、問題が発生する可能性があります。
Okayボタンを押すと、「Prefab」の接続が切断され、一般的なGameObjectに変換されます。
Hierarchy をもう一度チェックすると、青色ではなくデフォルトの色に変更されていることがわかります。
この状態は「プレハブ(Disconnected)」から「Prefab」され、「Prefab」情報は完全に失われません。
すべての編集が終了したら、「Apply」ボタンを押して「Prefab」に戻すことができます。
注意
AnyPortraitで編集中に強制的に 「Prefab」に変換すると、エディタに正しくデータを保存できないことがあります。
上記のように、ターゲットは編集中に 「Prefab」状態にあってはいけません。
そして、それを「Prefab」に変換した後、それを保存する必要があります。
私たちのチームは、複数のユーザーからのUnityエディタ上で「Prefab」を扱うことについて多くのフィードバックに受けており、また、Unity 2018.3に追加された「新方式のPrefabシステム」がAnyPortraitの方法と正常に互換性のない問題がありました。
このような理由から、PrefabをAnyPortraitのUIから直接制御して、ApplyまたはDisconnectをすることができる機能がv1.2.5に追加されました。
(基本的なPrefab管理方式は、上記の説明と同じです。)
(1) このキャラクターは「Prefab Asset」の形で保存された状態です。
(2) 「Prefab Asset」を「Prefab Instance」としてシーンに配置します。
(「Prefab Asset」状態で編集することができないので、常にシーンに配置した後、編集してください。)
既存のと同じように、Prefab Instance状態でAnyPortraitエディタを開いて編集をしてみましょう。
(1) Prefab Instanceの状態のキャラクターを選択すると、
(2) 「Prefab」状態では、編集することができなくて、自動的に「Disconnect」というメッセージが表示されます。
キャラクターを編集して、Bakeをした後、再びUnityシーンに戻ります。
(1) 「Prefab Instance」だったキャラクターを選択します。 Hierarchyで該当のキャラクターGameObjectの名前が青ではない黒に変わったことを見ることができます。現在「Prefabの状態」ではないか「Disconnected状態」になったからです。
(2) v1.2.5で追加された「 Prefab状態UI」をInspectorで見ることができます。
(3) 「Prefab状態UI」の「Apply」ボタンを押して再度「Prefab元と接続された状態」にしてみましょう。
(Unity 2018.3より前のバージョンであれば、(4)のようにInspector上部のApplyボタンを押します。)
(1) HierarchyでのGameObjectの名前が再び青に変わりました。今では「Connected Prefab Instance状態」に変わったことです。
(2) これはAnyPortraitの「Prefab状態UI」で確認することができます。
v1.2.5に追加されたPrefab状態UIです。
選択された対象が「Prefab Instance」である場合にのみ、このUIがInspectorに表示されます。
「Prefab Asset」と同期がされている場合(Connected)では、上の画像のように青い色でUIが表示されます。
逆に、「Prefab Asset」と同期がされていない場合は、(DisconnectedまたはMissing)では、以下の画像のように赤い色のUIが表示されます。
1. Source Prefab : 元となる「Prefab Asset」です。同期がされない場合どのような状態なのか表示されます。
2. Root GameObject : 選択された「Prefab Instance」のルートです。 AnyPortraitで製作されたGameObjectだけではなく、「ルートGameObject」を基準に同期を行うことができます。
3. Apply : 「Prefab Instance」の変更履歴を「Prefab Asset」に適用して、同期をします。 「Revert」をしようとする場合にはUnityのUIを活用したり、このオブジェクトを削除してください。
4. Refresh : 「Prefab Asset」との同期状態を再更新します。
5. Disconnect : 「Prefab Asset」との同期を解除します。
Unity 2018.3で「新しいPrefabシステム」が導入されました。
このバージョンからは「Prefab "をよりさまざまな方法で管理し、編集することができます。
- Prefab Manual(Unity公式ページ)
残念ながら、「新しいPrefabシステム」は、以前のPrefabシステムと内部的にも大きな違いを持っていて、AnyPortraitは、このシステムの互換性を持つことができませんでした。
「Prefab Instance」状態を維持しながら、AnyPortraitエディタで編集することは不可能し、唯一の編集されたキャラクターを「Prefab Asset」に上書きする方法のみ有効でした。
しかし、上で紹介した「Prefab状態UI」を利用して「Prefab Asset」との接続情報を可能な維持した状態で同期をすることが可能になりました。
v1.2.5での既存の方式とは異なるどのように改善されたか、以下の説明をご覧ください。
新しいPrefabシステムでの画面です。
(1) ソースとなる「Prefab Asset」です。
(2) シーンに配置された「Prefab Instance」です。
「Prefab Instance」を選択し、AnyPortraitエディタで編集しようとすると、従来と同様に、「Prefab Asset」との接続が解除されるというメッセージが表示されます。
Bakeを実行して、Unityシーンに戻ってきたら、「Prefab Assetとの接続」が解除され、「Prefab Instance」状態ではないことを見ることができます。
この状態は、「Prefab Asset」との接続情報がない状態であるので、以前は再び「Prefab Asset」を作成したり、上書きしスイウォヤました。
しかし、AnyPortraitキャラクターを選択し、Inspectorを確認してみると、 「Prefab状態UI」が表示されことを見ることができます。
AnyPortraitでは「最後のPrefabの接続情報」が記録されて、ユーザーに同期機能を提供します。
(実際にはUnityでは「Prefab接続情報」がすべてなくなって、一般的なGameObjectに戻っています。)
(1) 「Prefab状態UI」で(2) 「Apply」ボタンを押してみましょう。
(3) 「GameObject」が再び「Prefab Instance」で回復され、編集された内容が「Prefab Asset」に適用され、同期が完了したことを見ることができます。
Unity 2018.3およびそれ以降のバージョンでは、AnyPortraitで編集された文字に対してPrefab接続情報が内部的に維持されないが、AnyPortraitが「Prefab接続情報」を別々に記録して同期を行うことができます。
逆に、Prefabの接続情報を解除することもありますが、以下の2方式があります。
(1) 「Disconnect」ボタンを押すと、「Prefab Asset」との同期を解除します。しかし、接続情報は削除しないので、再度「Apply」をクリックして同期を実行することができます。
(2) 「Clear」ボタンを押すと、同期をオフにし、接続情報を完全に削除します。これで、このGameObjectは「Prefab Instance」としての役割を完全に喪失します。
注意事項
1. この方法は、Unityで提供される機能ではなく、AnyPortrait自体の機能なので、「Prefab Asset」の変更があった場合、正しく動作しない可能性があります。
2. 別の方法で接続情報を記録するように、「AnyPortrait v1.2.5」に更新した直後には、「Prefab Instance」で回復することができない可能性があります。この場合には「Prefab Asset」を再作成するか、上書き被せ同期をした後に、再度「Prefab Instance」を作ってください。
新しいPrefabシステムの最大の特徴の一つは、 「Prefabソースを直接編集することができるということ」です。
しかし、このシステムの一部の機能は、安定化されていない部分があって、私たちのチームが完全にサポートすることがありませんでした。
したがって、現在ではPrefabソースを対象にAnyPortraitエディタで編集することは制限されます。
(1) 「Prefab Asset」を選択して、「Prefab」を編集することができる状態に移行します。
(2) Prefab内部の「AnyPortraitキャラクター」を選択します。
(3) 「Prefab Assetソース」であるため、「エディタを開くことができないというメッセージ」が表示されます。
上記のようなメッセージは、「Unity 2020.1」から表示され、「Unity 2018.3」から「Unity 2020.1」の間のバージョンでは、このメッセージが表示されません。
しかし、これは、そのバージョンで 「 Prefab AssetのかPrefab Instanceのか区別できないから」にAnyPortraitで編集することができるように見られるだけであり、実際に「Prefab Asset」を直接編集すると、さまざまな問題が発生する可能性があります。
したがって、常に次のような方法でのみPrefabを編集願います。
(1) 編集したい「Prefab Asset」を選択して、シーンに配置します。
(2) シーンに配置された「Prefab Instance」を選択すると、エディタで編集したり、「Bake」をすることができます。
(3) 「Bake」をしたり、「Refresh Meshes」ボタンを押して、レンダリングされたキャラクターを確認した後、再同期を願います。