前提・実現したいこと
UnityとOculusRiftでVRゲームを作っています
敵をロックオンしたら敵の座標点(点A)とプレイヤーの座標点を結ぶ直線のプレイヤー側(点B)、延長線上にある点Pの座標を求めたい
発生している問題・エラーメッセージ
敵のグローバル座標とプレイヤーのグローバル座標から座標点を求めたかったが遠いところに設定されてしまった。
該当のソースコード
C#
1// 引き寄せ計算 2 m_LockedEnePos = LockOnObj.transform.position; // ロックオン時の敵の座標を取得 3 m_LockedPlyPos = transform.position; // ロックオン時の自の座標を取得 4 m_LerpVector = (m_LockedPlyPos - m_LockedEnePos).normalized; // ロックオン時の敵からプレイヤーの向きを正規化 5 Vector3 m_WorldVector = new Vector3(0, 0, 1); // Z軸 6 if(Vector3.Dot(m_WorldVector, m_LerpVector) >= 0) // Z軸と比べて正なら 7 { 8 m_LookatVec = m_LockedPlyPos / 1.1f - m_LockedEnePos; // グローバル座標の負の方向に延長する 9 // ABベクトルの向きがZ軸との比較で正負が違うと延長線上の点の位置が変わるので向きによって計算を変えてる 10 11 } 12 else if(Vector3.Dot(m_WorldVector, m_LerpVector) < 0) // Z軸と比べて負なら 13 { 14 m_LookatVec = m_LockedPlyPos * 1.1f - m_LockedEnePos; // グローバル座標の正の方向に加算する 15 }
// 引き寄せ public void LookatVec() { // 向いている座標までLerpで進む if (PlyCon.m_RushFlg) // 連続パンチに移行するのでLerpを止める { PlyCon.m_LookatVec = LockedEnemy.transform.position; LockedEnemy.transform.position = Vector3.Lerp(PlyCon.m_LockedEnePos, PlyCon.m_LookatVec, m_LerpTime); } else { LockedEnemy.transform.LookAt(PlyCon.m_LookatVec); // 指定した座標を向く LockedEnemy.transform.position = Vector3.Lerp(PlyCon.m_LockedEnePos, PlyCon.m_LookatVec, m_LerpTime); Debug.Log("向かうベクトル座標:" + PlyCon.m_LookatVec); Debug.Log("ロックオン時の敵座標:" + PlyCon.m_LockedEnePos); Debug.Log("ロックオン時の自分の座標:" + PlyCon.m_LockedPlyPos); } }
試したこと
実際の数値
m_LockedEnePos(-8.4, 0.3, -18.1)
m_LockedPlyPos(-8.0, 0.5, -16.4)
敵(m_LockedEnePos)→プレイヤー(m_LockedPlyPos)
補足情報(FW/ツールのバージョンなど)
Unity2020.1.0f1 Personal
OculusRift
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/05 00:28
2020/11/05 01:49
2020/11/05 01:57