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

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

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

1
2
3
4
5
6
[SerializeField]
private GameObject FaceDot; //顔のマスクの点用インスタンス
int meshNum;                //顔のマスクの頂点番号
float duration;             //顔のマスクの頂点番号の移動スピード
 
public UnityEngine.UI.Text meshNumTxt;  //顔のマスクの頂点番号を表示するテキスト

Startメソッド内で変数を初期化します。

1
2
meshNum = 0;
duration = 0.0f;

FaceAddedメソッド内でFaceDot.SetActive()をtrueにします。

1
2
3
4
5
6
7
8
9
void FaceAdded(ARFaceAnchor anchorData)
{
 
    <中略>
 
    FaceDot.SetActive(true);
 
    <中略>
}

FaceUpdatedメソッド内で以下のコードを追加します。if (Mouth.activeSelf…の後がいいでしょう。

1
2
3
4
5
6
7
8
9
10
11
12
void FaceUpdated(ARFaceAnchor anchorData)
{
    <中略>
 
 
    if (FaceDot.activeSelf != anchorData.isTracked)
    {
        FaceDot.SetActive(anchorData.isTracked);
    }  
 
    <中略>
}

FaceRemovedメソッドにHead.SetActive(false)を追加します。

1
2
3
4
5
6
7
8
void FaceRemoved(ARFaceAnchor anchorData)
{
    <中略>
 
    FaceDot.SetActive(false);
 
    <中略>
}

UpdatePositionAndRotationメソッドに以下のコードを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();   //画面上に番号を表示
 
        <中略>         
    }
}