顔のマスクの頂点番号を調べる

      顔のマスクの頂点番号を調べる はコメントを受け付けていません

クラス内で変数を宣言します。

[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();   //画面上に番号を表示

        <中略>         
    }
}