void Update() { if (flag) { //Debug.Log(StateManger.GetInstance().FsmEye.y); Debug.Log("Listen"); //状態更新 //StateManger.GetInstance().UpdateState(); // 入力1: transform.position; Vector3 EyePos = LookTarget.transform.position; // 入力2: TobiiAPI.GetGazePoint Vector3 gazePointInWorld = cam.ScreenToWorldPoint(new Vector3(StateManger.GetInstance().FsmEye.x, StateManger.GetInstance().FsmEye.y, cam.nearClipPlane)); // EyeballCenterからCameraに向かうdirectional vector Vector3 EyeCamPos = Vector3.Normalize(Campos - EyePos); Vector3 EyeGazePos = Vector3.Normalize(gazePointInWorld - EyePos); // cross productの計算 Vector3 axis = Vector3.Cross(EyeCamPos, EyeGazePos); axis = Vector3.Normalize(axis); // inner productの計算 float Angle = Mathf.Acos(Vector3.Dot(EyeCamPos, EyeGazePos)); float angle = Angle * Mathf.Rad2Deg; // 出力: transform.localRotation transform.rotation = Quaternion.AngleAxis(angle * 40, axis); } }
void Awake() { // 状態登録 StateManger.GetInstance().Region("A", new AState()); StateManger.GetInstance().Region("B", new BState()); StateManger.GetInstance().Region("C", new CState()); StateManger.GetInstance().Region("D", new DState()); StateManger.GetInstance().Region("E", new EState()); // デフォルト状態設定 StateManger.GetInstance().SetDefat("C"); }
public override void UpdateState() { Debug.Log("B状態更新"); if (Probability(30)) { StateManger.GetInstance().ChangeState("A"); } else if (Probability(30)) { StateManger.GetInstance().ChangeState("C"); } else if (Probability(40)) { StateManger.GetInstance().ChangeState("B"); } else if (Probability(0)) { StateManger.GetInstance().ChangeState("D"); } else if (Probability(0)) { StateManger.GetInstance().ChangeState("E"); } }