AnyPortrait > マニュアル > 3Dワールドに配置
AnyPortraitは基本的に2Dゲームのエディタです。
しかし、3Dの背景に2Dキャラクターを導入するなどの様々なゲームメソッドにも対応しています。
このページでは、3Dゲームで使用されるPerspectiveのカメラでAnyPortraitで作成されたキャラクターをレンダリングする方法と、3Dゲームでビルボードを設定する方法について説明します。
この機能を使用して開発された「Pirate Game3D」のデモを確認してください。
「Perspective」カメラ : 遠近感のあるカメラです。その逆は「Orthographic」方式です。
ビルボード(Billboard) : オブジェクトがカメラを正面に続け眺めるレンダリング方式では、主にエフェクトに使用されます。
(1) 「Bake」ダイアログボックスを開きます。
(2) 「Setting」タブで、「Billboard」の設定を変更します。
- None : ビルボードを使用していません。Perspectiveカメラはサポートされていません。
- Billboard : ビルボード方式でレンダリングをします。
- Billboard with fixed Up Vector : ビルボードとしてレンダリングされ、ワールド座標系のUp(+Y)方向を維持します。
「Perspective」カメラのオプションは、個別に存在しません。
「Billboard」の設定が「None」ではない場合、カメラがレンダリングされる方法を認識して、「Perspective」カメラが自動的にサポートされます。
(「Orthographic 」カメラはビルボードオプションに関係なくサポートされています)
注意。
ビルボード方式を使用すると、カメラの「Camera.transparencySortMode」プロパティが「TransparencySortMode.Orthographic」に自動的に変更されます。
「TransparencySortMode」が強制的に変更されないようにするには、「Bakeダイアログ」の「Set Sort Mode to Orthographic」のチェックを外してください。
掲示板の設定がオンになっているときに、ゲームが開始されると、自動的に「レンダリングするカメラ」を検索し、その方向を見続けます。
カメラが「Orthographic」か「Perspective」かを認識した後、形状はカメラに合うように修正されます。
Billboard setting: None
カメラを見ず、順番に正しく表示されません。
Billboard setting: Billboard
常にカメラを見る。
カメラに遠近感があっても正常に表示されます。
カメラが傾いても、常にまっすぐにレンダリングされます。
Billboard setup: Billboard with fixed Up Vector
常にカメラを見る。
カメラに遠近感があっても正常に表示されます。
「Billboard」の方法とは異なり、ワールド座標系のY方向は、固定されているので、カメラは傾いたかのように表示されます。
ビルボード方式でレンダリングを行うと、GameObjectの回転に関係なく、キャラクターが常に定められたルールでカメラを眺めることになります。
だからキャラクターを回転させることは不可能でした。
ところで、ユーザーの意見でビルボードを回転させなければならない場合があることがわかり、回転機能を新たに追加しました。
ビルボードで回転し、カメラを見ているキャラクターをさらに回転させるには、「親オブジェクト」が必要です。
親オブジェクトの「Transform」の「Rotation」値を変更してキャラクターを回転させる2つの方法について学びましょう。
3D空間に配置されたキャラクターです。
ビルボードがアクティブになり、「Perspective」方式のカメラでレンダリングを行っています。
キャラクターが平地にある場合は、ビルボードが自然にレンダリングされます。
それでは、キャラクターを傾斜路に配置しましょう。
地面が傾いた分、キャラクターが回転しなければなりません。
しかし、ゲームを実行するとキャラクターをいくら回転させても、キャラクターはビルボードルールによって上記のようにまっすぐ立ってカメラを眺めます。
ビルボード操作が「World Rotation」を制御するため、現在の方法ではキャラクターを回転させることはできません。
新しく追加されたオプションを試してみましょう。
(1) 「AnyPortrait Editor」を開き、「Bake」ボタンを押します。
(2) 「Setting」タブを選択します。
(3) 「Billboard」オプションが「Billboard」または「Billboard with fixed Up Vector」に設定されている場合、「Parent's Rotation」オプションが表示されます。
このオプションの値は次のとおりです。
- Ignore : 親オブジェクトの「Rotation」を無視して、従来のビルボード方式で動作します。
- Pitch Yaw Roll (Local) : 親オブジェクトの「Local Rotation」を「Pitch、Yaw、Roll」回転と見なしてキャラクターを回転させます。
- Sync Up Vector (World) : 親オブジェクトの「Up Vector(World)」を使ってキャラクターを回転させます。
一度「Pitch Yaw Roll (Local)」オプションを選択し、「Bake」を行います。
「Inspector」でもこのオプションを設定できます。
(1) Unity シーンに戻った後、AnyPortrait キャラクターに「親GameObject」を生成します。
(2) 「親GameObject」の「RotationのZ値」を適切に変更してみましょう。
(3) ゲームを実行すると、キャラクターがビルボード方式でレンダリングされているにもかかわらず、傾斜路に合わせて傾いてレンダリングされることがわかります。
このオプションは、親オブジェクトの「Local Rotation」の「X、Y、Z」値をビルボードに加え、それぞれ「Pitch、Yaw、Roll」の回転を行うようにします。
したがって、通常の「Transform」操作とは異なり、値に応じて上記のように回転します。
- 「X」回転は「Pitch」で動作し、キャラクターが前後に傾きます。
- 「Y」回転は「Yaw」で動作し、キャラクターが左右に傾きます。
- 「Z」回転は「Roll」で動作し、キャラクターがカメラを見た状態でぐるぐる回転します。
ただし、キャラクターのメッシュの「Depth」による「Z位置」の違いにより、「Pitch」と「Yaw」ではレンダリングエラーが発生するため、「Z値」に応じた「Roll」のみを使用するのが一般的でしょう。
2番目の方法は、親オブジェクトの「Upベクトル」を使用してキャラクターを回転させる方法です。
親オブジェクトの「World Rotation」を利用できるという点で、前述の方法とは異なる特性があります。
(1) 「Bake」ボタンを押します。
(2) 「Setting」タブを選択します。
(3) 「Billboard」オプションが有効な状態で、「Parent's Rotation」の値を「Sync Up Vector (World)」に変更して「Bake」を実行します。
Unityシーンに戻って親GameObjectを回転させましょう。
あらかじめ少しスクリプトを書いて、親GameObjectの「Upベクトル」を見ることができるようにしました。
親GameObjectを回転させましょう。
上記の画像を見ると、この「Sync Up Vector」の仕組みがどのように機能するかがわかります。
親 GameObject の World 座標系での「Up ベクトル」をキャラクターが自分の「Up ベクトル」にするように回転するのがわかります。
このとき、キャラクターの回転は「Roll」だけで動作します。
また、この方法では、「Billboard」オプションのうち「Billboard」と「Billboard with fixed Up Vector」が同じように動作します。
注意
「Upベクトル」が「カメラのForwardベクトル」と平行である場合、キャラクターの回転が異常に動作します。