碰撞触发器似乎总是在碰撞
Collision trigger always seems to be colliding
我通过研究所能找到的所有对象都没有碰撞...我的问题是它总是在碰撞...我把这段代码搞得一团糟,试图让它认识到它没有碰撞。他们在统一中根本没有触及任何东西(立方体触发器使用盒式碰撞器)...我对统一有点陌生,我觉得我看不起一些简单的东西?
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;
}
}
我不知道是什么让我的 bool 变为 true。我已经搜索了 google 并堆栈交换任何答案,但运气不佳。谢谢
你在这一行中有一个错误:
if (colliding = false) {
应该是,
if (colliding == false) // or if(!colliding)
Dinal24 获得了第一分。
您应该修复的另一件事是:
将 OnTriggerEnter(Collider other)
更改为 OnTriggerStay(Collider other)
.
为什么?
如果程序在对象已经接触时启动(bool 应该 return true),它会被强制为 return false,因为:
void Start()
{
colliding = false;
}
一个选项是,如果您使用 OnTriggerStay
,它会不断检测它是否正确。
另一种选择是完全删除 void Start()
。我觉得没必要。
我通过研究所能找到的所有对象都没有碰撞...我的问题是它总是在碰撞...我把这段代码搞得一团糟,试图让它认识到它没有碰撞。他们在统一中根本没有触及任何东西(立方体触发器使用盒式碰撞器)...我对统一有点陌生,我觉得我看不起一些简单的东西?
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;
}
}
我不知道是什么让我的 bool 变为 true。我已经搜索了 google 并堆栈交换任何答案,但运气不佳。谢谢
你在这一行中有一个错误:
if (colliding = false) {
应该是,
if (colliding == false) // or if(!colliding)
Dinal24 获得了第一分。
您应该修复的另一件事是:
将 OnTriggerEnter(Collider other)
更改为 OnTriggerStay(Collider other)
.
为什么?
如果程序在对象已经接触时启动(bool 应该 return true),它会被强制为 return false,因为:
void Start()
{
colliding = false;
}
一个选项是,如果您使用 OnTriggerStay
,它会不断检测它是否正确。
另一种选择是完全删除 void Start()
。我觉得没必要。