クラス内で変数を宣言します。
[SerializeField]
private GameObject FaceDot; //顔のマスクの点用インスタンス
int meshNum; //顔のマスクの頂点番号
float duration; //顔のマスクの頂点番号の移動スピード
public UnityEngine.UI.Text meshNumTxt; //顔のマスクの頂点番号を表示するテキスト
Startメソッド内で変数を初期化します。
meshNum = 0;
duration = 0.0f;
FaceAddedメソッド内でFaceDot.SetActive()をtrueにします。
void FaceAdded(ARFaceAnchor anchorData)
{
<中略>
FaceDot.SetActive(true);
<中略>
}
FaceUpdatedメソッド内で以下のコードを追加します。if (Mouth.activeSelf…の後がいいでしょう。
void FaceUpdated(ARFaceAnchor anchorData)
{
<中略>
if (FaceDot.activeSelf != anchorData.isTracked)
{
FaceDot.SetActive(anchorData.isTracked);
}
<中略>
}
FaceRemovedメソッドにHead.SetActive(false)を追加します。
void FaceRemoved(ARFaceAnchor anchorData)
{
<中略>
FaceDot.SetActive(false);
<中略>
}
UpdatePositionAndRotationメソッドに以下のコードを追加します。
private void UpdatePositionAndRotation(ARFaceAnchor anchorData)
{
if (anchorData.isTracked)
{
<中略>
//顔のマスクの1220個ある各点の番号を調べるコード。faceMesh.vertices[0~1219]の値をとる////////////////////////////
int speed = 20; //メッシュ上を点が移動するスピード。数値を下げれば遅くなる
duration += Time.deltaTime * speed; //プログラムが起動してからの経過時間
meshNum = (int)(duration % faceMesh.vertices.Length); //メッシュの数(1220個)まで到達したら、はじめに戻る
FaceDot.transform.position = transform.localToWorldMatrix.MultiplyPoint3x4(faceMesh.vertices[meshNum]); //メッシュの頂点の番号の座標に赤い球を表示
meshNumTxt.text = "meshNum= ";
meshNumTxt.text += meshNum.ToString(); //画面上に番号を表示
<中略>
}
}
