頭の位置に帽子をのせる
ここでは、Asset Storeから3Dオブジェクトをダウンロードし、カメラで映った自分の頭の位置にその3Dオブジェクトを表示してみます。まず、Window > Asset Storeを洗濯します。

すると、シーンビューの位置にAsset Storeタブが表示されます。まずは、「hat」というキーワードで検索し、PricingのFree Assetsの項目にチェックを入れましょう。

ここでは、 「Free Christmas Assets / Low Poly」を選んでダウンロードし、さらにインポートしてください。

すると、Import Unity Packageという画面が出てきますので、以下のように帽子のパーツだけインポートします。

これでインポートが完了しました。Christmas-Assets-Free > Prefabsに、Santa-Hatがあるので、ヒエラルキーウィンドウにドラッグしてインスタンス化します。さらに空のオブジェクト(Hatに名称変更)を作ってその中に入れます。

Santa-Hatの位置とサイズを変更しましょう。Hatが親オブジェクトで、Santa-Hatが子オブジェクトになります。親オブジェクトの位置やサイズを変えても、プログラムに反映されないので気をつけてください。

ExpressionManagerのスクリプトにHeadというゲームオブジェクト型の変数を追加します。Mouthの下がいいでしょう。
[SerializeField]
private GameObject Mouth; //口用インスタンス
[SerializeField]
private GameObject Head; //頭用インスタンス
FaceAddedメソッド内でHead.SetActive()をtrueにします。
void FaceAdded(ARFaceAnchor anchorData)
{
<中略>
Head.SetActive(true);
<中略>
}
FaceUpdatedメソッド内で以下のコードを追加します。if (Mouth.activeSelf…の後がいいでしょう。
void FaceUpdated(ARFaceAnchor anchorData)
{
<中略>
if (Mouth.activeSelf != anchorData.isTracked)
{
Mouth.SetActive(anchorData.isTracked);
}
if (Head.activeSelf != anchorData.isTracked)
{
Head.SetActive(anchorData.isTracked);
}
<中略>
}
FaceRemovedメソッドにHead.SetActive(false)を追加します。
void FaceRemoved(ARFaceAnchor anchorData)
{
<中略>
Head.SetActive(false);
<中略>
}
UpdatePositionAndRotationメソッドに以下のコードを追加します。
private void UpdatePositionAndRotation(ARFaceAnchor anchorData)
{
if (anchorData.isTracked)
{
<中略>
//頭の位置と回転////////////////////////////////////////////////////////////////////
Head.transform.localPosition = UnityARMatrixOps.GetPosition(anchorData.transform);
Head.transform.localRotation = UnityARMatrixOps.GetRotation(anchorData.transform);
<中略>
}
}
最後に、ヒエラルキーウィンドウでExpressionManagerを選び、インスペクタのHeadにHatをドラッグ&ドロップします。

プログラムを実行すると、サンタの帽子が追加されていることを確認できます。
