2017-10-17 15 views
0

私はGVRTeleportスクリプトを使用して、ボールボードアプリでテレポートします。テレポーテーションのレイキャストが1つのレイヤーを除くすべてのレイヤーを無視したいと思っています。 thisページを見てください私はそれに応じてスクリプトを修正しました(謝罪、このコードの所有者への元のリンクを見つけることはできません)が、テレポートスクリプトはまったく何も見ません。何か案は?私のフロアレイヤーはレイヤー8で、これはこのレイキャストとやりとりしたいレイヤーです。Unityの特定のレイヤーにレイキャスト

using UnityEngine; 

public class GVRTeleport : MonoBehaviour { 

    public float viewHeight = 7f; 

    Vector3 fwd; 
    public float maxDistance = 10f; 
    public LineRenderer line; 
    public GameObject parent; 
    public GameObject targetIndicator; 

    public StraightLineParam genLine; 

    int layerMask = 1 << 8; 

    void Start() { 
    } 


    void Update() { 
     RaycastHit hit; 
     Ray ray; 

     if (Physics.Raycast (transform.position, Vector3.forward, Mathf.Infinity, layerMask)) { 
      Debug.Log ("The ray hit the floor"); 


      if (debugWithMouse) { 
       Vector2 mousePos = new Vector2 (Input.mousePosition.x/Screen.width, Input.mousePosition.y/Screen.height); 
       ray = Camera.main.ViewportPointToRay (mousePos); 
      } else { 
       ray = new Ray (transform.position, transform.forward); 
      } 

      if (Physics.Raycast (ray, out hit)) { 
       Debug.DrawLine (transform.position, hit.point, Color.red); 
      } 

      if (Input.GetMouseButton (0)) { 
       if (Physics.Raycast (ray, out hit)) { 

        if (useViewHeight) { 
         targetIndicator.transform.position = new Vector3 (hit.point.x, hit.point.y + viewHeight, hit.point.z); 
        } else { 
         targetIndicator.transform.position = new Vector3 (hit.point.x, hit.point.y, hit.point.z); 
        } 

        targetIndicator.transform.LookAt (hit.point); 
        targetIndicator.GetComponent<Light>().intensity = 8; 

        genLine.genLine (new Vector3 (ray.origin.x + 2, ray.origin.y - .5f, ray.origin.z), hit.point); 

        line.material.SetTextureOffset ("_MainTex", new Vector2 (Time.timeSinceLevelLoad * -4f, 0f)); 
        line.material.SetTextureScale ("_MainTex", new Vector2 (hit.point.magnitude, 1f)); 
       } 
      } 

      if (Input.GetMouseButtonUp (0)) { 
       if (Physics.Raycast (ray, out hit)) { 
        if (!debugNoJump) { 
         if (useViewHeight) { //better way? 
          parent.transform.position = new Vector3 (hit.point.x, hit.point.y + viewHeight, hit.point.z); 
         } else { 
          parent.transform.position = new Vector3 (hit.point.x, hit.point.y, hit.point.z); 
         } 
        } 
        if (!debugLine) { 
         line.SetVertexCount (0); 
        } 
       } 
       targetIndicator.GetComponent<Light>().intensity = 0; 
      } 
      Debug.DrawRay (this.transform.position, ray.direction * 5, Color.blue);// .DrawLine(transform.position, hit.point, Color.red); 
     } 
    } 
} 

答えて

1

まず始めに、update()のすべてのフレームに光線を投射しないでください。エンジンがどのように反応するかわからない。レイをキャストする条件を設定することから始めます。たとえば、キーなどを押したときなどです。その後

、マスクに代わり1 << 8これを試してみてください。

int layer_mask = LayerMask.GetMask("Floor"); 

//Actually you can add any layer name you want, for example: 
//int layer_mask = LayerMask.GetMask("Ground","Enemy","Boxes"); 

//do the raycast specifying the mask 
if (Physics.Raycast (ray, out hit, distance, layer_mask)) 
{ 

} 

の私のポイントから、あなたが誤ってレイヤーの順序を変更したり、あなたが将来的にそれを修正し、名前を直接渡す念のためにそれはより安全です。

問題がない場合は、レイをキャストするために使用しているトランスフォームのGameObjectについて、前方にあるものを確認してください。たぶんあなたは何もない方向に、あるいは少なくとも地面にはない方向に光線を投げかけているのかもしれません。

+1

これはうまくいきました。私はいくつかのビットを変更し、整理して共有して投稿します。 – P1505C

+0

パーフェクト!いいですね –

関連する問題