2015-02-12 48 views
0

通過研究我可以找到的所有對象都不會碰撞......我的問題是總是碰撞......我把這些代碼搞砸了,試圖讓它識別出它不是碰撞。他們並沒有統一觸摸任何東西(使用盒子對撞機的立方體觸發器)......我對團結感很陌生,我覺得我看起來很簡單嗎?碰撞觸發器似乎總是碰撞

using UnityEngine; 
using System.Collections; 

public class Battlecam : MonoBehaviour 
{ 

//calling speed integers 
    public float upSpeed = 10; 
    public float rightSpeed = 60; 
//bool colliding 
    public bool colliding = false; 


//triggers 
    void OnTriggerEnter(Collider other) 
    { 
     colliding = true; 
    } 


    void OnTriggerExit(Collider other) 
    { 
     colliding = false; 
    } 


    void Start() 
    { 
      colliding = false; 
    } 
//camera movements 
    void Update() 
     { 
      if (colliding = false) { 
       float horizontal = Input.GetAxis ("Horizontal") * rightSpeed * Time.deltaTime; 
       transform.Translate (0, horizontal, 0); 

       float vertical = Input.GetAxis ("Vertical") * upSpeed * Time.deltaTime; 
       transform.Translate (0, 0, vertical); 

       colliding = false; 
      } 
      else 
       colliding = true; 
     } 

} 

我想不通什麼是扔我的布爾真實。我已經搜索谷歌和堆棧交換任何答案,運氣不大。由於

+0

您可能想使用'OnTriggerStay(碰撞對方)'。我現在無法想到使用它的缺點。但它可能與'OnTriggerEnter(Collider other)'相同。 – 2015-02-12 06:09:23

+0

您可以向我們展示您的場景圖像嗎? – 2015-02-12 06:09:57

+0

@Bobthezealot我不認爲'OnTriggerStay(對撞機其他)'必須做任何事情 – Dinal24 2015-02-12 06:15:48

回答

2

你在這一行中的錯誤:

if (colliding = false) { 

應,

if (colliding == false) // or if(!colliding) 
+1

啊,你是對的! +1 – 2015-02-12 06:17:36

+0

啊,我知道這很簡單。謝謝! – MrRoss 2015-02-12 06:22:07

2

Dinal24了第一點。

您應該修復的另一件事是:
OnTriggerEnter(Collider other)更改爲OnTriggerStay(Collider other)
爲什麼?
如果程序時,該對象已經觸碰(布爾應該返回true)啓動時,它被強制,因爲返回false:

void Start() 
{ 
    colliding = false; 
} 

一個選擇是,如果你使用OnTriggerStay,它將contantly檢測是否它是真的或不是。
另一種選擇是完全刪除void Start()。我認爲沒有必要。

+0

我只是想讓它更有效率。這是我的全部目標。所以OnTriggerStay可能是不行的。既然它剛剛開始,我想在開始的時候對它進行定義,但現在我已經看到了它,它已經在上面定義過了,從一開始就將colliding = false變得更有益處?這段代碼將會浪費很長時間並消耗一些內存,所以我正在努力保持它的短小和高效。 +1順便說一句,非常有效的一點 – MrRoss 2015-02-12 08:13:10