クラス内で変数を宣言します。
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(); //画面上に番号を表示 <中略> } } |