私はVRゲームを統一して作りたいと思います。私はドア、引き出し、銃、オブジェクトピッカーの上のスクリプトなどの基本を持っています。ベースビルダー/エディタを作ってみたいが、コントローラーがどこに向いているのか(レーザポインターのように)どうやって手をつけるのかという手がかりはない。 プロジェクトはC言語である#どのように動くモーションコントローラーが指し示している位置を得るか(単位で)
0
A
答えて
0
あなたのコントローラからオブジェクトへのレイキャスト。 https://vrtoolkit.readme.io/
ツールキットの帽子機能の多くを、のように:
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
作業を簡素化するために、私はあなたが単にあなたの団結のプロジェクトにアサートとして追加することができますVRTKツールキットを使用することをお勧めいたしますでしょうレーザーポインティング、グラッピングなど
私はこれがあなたを助けてくれることを願っています!
編集:ここでは
VRTKツールキットからのレーザーポインターのための非常に良い例:
using UnityEngine;
using System.Collections;
public class ViveCursor : MonoBehaviour
{
public enum AxisType
{
XAxis,
ZAxis
}
public Color color;
public float thickness = 0.002f;
public AxisType facingAxis = AxisType.XAxis;
public float length = 100f;
public bool showCursor = true;
GameObject holder;
GameObject pointer;
GameObject cursor;
Vector3 cursorScale = new Vector3(0.05f, 0.05f, 0.05f);
float contactDistance = 0f;
Transform contactTarget = null;
void SetPointerTransform(float setLength, float setThicknes)
{
//if the additional decimal isn't added then the beam position glitches
float beamPosition = setLength/(2 + 0.00001f);
if (facingAxis == AxisType.XAxis)
{
pointer.transform.localScale = new Vector3(setLength, setThicknes, setThicknes);
pointer.transform.localPosition = new Vector3(beamPosition, 0f, 0f);
if (showCursor)
{
cursor.transform.localPosition = new Vector3(setLength - cursor.transform.localScale.x, 0f, 0f);
}
}
else
{
pointer.transform.localScale = new Vector3(setThicknes, setThicknes, setLength);
pointer.transform.localPosition = new Vector3(0f, 0f, beamPosition);
if (showCursor)
{
cursor.transform.localPosition = new Vector3(0f, 0f, setLength - cursor.transform.localScale.z);
}
}
}
// Use this for initialization
void Start()
{
Material newMaterial = new Material(Shader.Find("Unlit/Color"));
newMaterial.SetColor("_Color", color);
holder = new GameObject();
holder.transform.parent = this.transform;
holder.transform.localPosition = Vector3.zero;
pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
pointer.transform.parent = holder.transform;
pointer.GetComponent<MeshRenderer>().material = newMaterial;
pointer.GetComponent<BoxCollider>().isTrigger = true;
pointer.AddComponent<Rigidbody>().isKinematic = true;
pointer.layer = 2;
if (showCursor)
{
cursor = GameObject.CreatePrimitive(PrimitiveType.Sphere);
cursor.transform.parent = holder.transform;
cursor.GetComponent<MeshRenderer>().material = newMaterial;
cursor.transform.localScale = cursorScale;
cursor.GetComponent<SphereCollider>().isTrigger = true;
cursor.AddComponent<Rigidbody>().isKinematic = true;
cursor.layer = 2;
}
SetPointerTransform(length, thickness);
}
float GetBeamLength(bool bHit, RaycastHit hit)
{
float actualLength = length;
//reset if beam not hitting or hitting new target
if (!bHit || (contactTarget && contactTarget != hit.transform))
{
contactDistance = 0f;
contactTarget = null;
}
//check if beam has hit a new target
if (bHit)
{
if (hit.distance <= 0)
{
}
contactDistance = hit.distance;
contactTarget = hit.transform;
}
//adjust beam length if something is blocking it
if (bHit && contactDistance < length)
{
actualLength = contactDistance;
}
if (actualLength <= 0)
{
actualLength = length;
}
return actualLength; ;
}
void Update()
{
Ray raycast = new Ray(transform.position, transform.forward);
RaycastHit hitObject;
bool rayHit = Physics.Raycast(raycast, out hitObject);
float beamLength = GetBeamLength(rayHit, hitObject);
SetPointerTransform(beamLength, thickness);
}
}
関連する問題
- 1. 位置の配列を指定してマーカーを移動するにはどうすればよいですか?
- 2. ナビゲーション位置「絶対」私がチェックし、トップにPICナビゲーション位置「メニュー」に移動しようとしている
- 3. reloaddataテーブルビューの位置が正しくないようにする
- 4. 固定位置要素内で絶対位置を指定してZ-インデックスが正常に動作しない
- 5. パテでは、エラーがchar位置に基づいてどこに位置するのでしょうか?
- 6. コードから位置を取得している他のビューの下にどのように配置するか
- 7. エスケープシーケンスを使用してマウスの位置をピクセル単位で取得します。
- 8. 行の位置を正しく取得しようとしています
- 9. div位置を固定してアコーディオンが動作しないようにする
- 10. ポインタが指しているメモリ位置のアドレスを取得する方法
- 11. どのように位置を動的に変更し、その位置を記録するJavaScript PHP
- 12. CATransitionでどのように開始位置と終了位置を指定できますか?
- 13. Javascriptでマウスの位置を正しく取得するにはどうすればよいですか?
- 14. どのようにミディノートの位置を取得するには?
- 15. 名前でボタンの位置を取得しようとしているjquery
- 16. どのようにイメージを削除し、イメージがある位置にテーブルを置くのですか?
- 17. どのようにしてユニティ2Dのスプライトの位置が自動的に
- 18. MediaPlayerの位置/期間を正しく表示するにはどうすればよいですか?
- 19. DOM要素の位置オフセットを正しく取得するにはどうすればよいですか?
- 20. シェイプの位置とグラデーションの位置はHTML5キャンバスにどのように関係していますか?
- 21. バックグラウンドでの位置が正しく動作しない
- 22. どうやってイメージの位置を取得し、アンドロイドでその位置に他のイメージを置くことができますか
- 23. ARKitで現在のデバイス位置をどのように表示しますか?
- 24. どのようにあなたの位置をjavascriptで取得しますか?
- 25. テーブルビューの指の位置/動き情報にアクセスするにはどうすればよいですか?
- 26. デバイスが移動していない場合には位置更新を停止し、300mの距離を移動してその位置を取得すると
- 27. 埋め込みdivの相対位置と絶対位置はどのように動作しますか?
- 28. RecyclerViewページ位置がスクロール位置を維持していない
- 29. ここで指定した位置に
- 30. JavaFXタイムラインを秒単位で取得してプログレスバーにバインドするにはどうすればよいですか?