OnTriggerStay方法不起作用
本文关键字:不起作用 方法 OnTriggerStay | 更新日期: 2023-09-27 18:15:15
我在Unity中创建了一款游戏,对于关卡选择,我使用了一个世界,你可以在其中走动并接近一个节点,将你带到你想要去的关卡。有点像马里奥的关卡选择。我在世界中有一个玩家和一个节点。节点有两个盒子碰撞器,一个检测附近的玩家,另一个只是围绕着盒子的轮廓。较大的碰撞器检查了isttrigger,另一个没有。我试图让节点检测玩家是否在外部区域,但代码不工作,我不知道为什么。
以下是播放器的代码:public class Player : MonoBehaviour {
public GameManager manager;
private Vector3 spawn;
public bool usesManager = true;
private bool levelComplete;
public AudioClip[] audioClip;
void Start()
{
if (usesManager)
{
manager = manager.GetComponent<GameManager> ();
}
levelComplete = false;
spawn = transform.position;
}
void Update()
{
Movement();
}
void Movement()
{
if (!levelComplete)
{
if (Input.GetKey (KeyCode.A))
{
transform.Rotate(0, Input.GetAxis("Horizontal") * 2.0f, 0);
}
if (Input.GetKey (KeyCode.D))
{
transform.Rotate(0, Input.GetAxis("Horizontal") * 2.0f, 0);
}
if (Input.GetKey (KeyCode.S))
{
transform.Translate (Vector3.forward * 3f * Time.deltaTime);
}
if (Input.GetKey (KeyCode.W))
{
transform.Translate (Vector3.back * 3f * Time.deltaTime);
}
}
}
void OnCollisionEnter(Collision other)
{
if (other.transform.tag == "Enemy")
transform.position = spawn;
}
void OnTriggerEnter(Collider other)
{
//finds friend
GameObject friend = GameObject.FindGameObjectWithTag("Friend");
if (other.transform.tag == "Sensor" && (Mathf.Abs ( friend.transform.position.x - transform.position.x) <= 4))
{
levelComplete = true;
PlaySound (1);
manager.CompleteLevel();
}
if (other.transform.tag == "Token")
{
if (usesManager)
{
manager.tokenCount += 1;
}
PlaySound (0);
Destroy(other.gameObject);
}
}
void PlaySound(int clip)
{
audio.clip = audioClip [clip];
audio.Play ();
}
}
下面是节点的代码:
public class LevelLoader : MonoBehaviour
{
public int levelToLoad;
void OnTiggerStay(Collider other)
{
if (other.transform.tag == "Player")
Debug.Log ("hit");
}
}
当玩家进入触发器时,控制台不会显示任何内容。任何帮助将非常感激!
在你的编码器中,你写的是OnTiggerStay
而不是OnTriggerStay
。
同样重要的是,其中一个碰撞对象具有附加的rigidbody
,否则将不会调用OnTriggerStay
事件。
请注意,只有当其中一个对撞机也附加了刚体时才会发送触发事件。
你可以在这里阅读更多。
我还建议不要完全使用触发器,并自己跟踪进入/退出。这将给你更多的控制权,并阻止Unity处理一些你应该处理的事情。
你用的是OnTiggerStay而不是OnTriggerStay,为什么这个不行