2015-02-12 63 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