问题是我要如何创建可打开的门。当玩家进入与该门相连的Box Collider时,该门应打开。但是问题是当门开始打开并旋转时,对撞机也开始旋转,这给我带来了很多问题。我尝试使用其Collider创建EmptyObject,但无法将此Collider与脚本和OnTriggerEnter函数本身连接。也许我听不懂什么,谁知道,我只是个初学者。如何知道如何提供帮助,请写下答案。 我的代码(如果有人需要):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class openDoor : MonoBehaviour {
public Vector3 Rotation_;
private int i;
public float speed;
bool opentheDoor;
bool closetheDoor;
// Use this for initialization
void Start () {
opentheDoor = false;
closetheDoor = false;
}
// Update is called once per frame
void Update () {
if (opentheDoor == true) {
this.transform.Rotate (Rotation_ * Time.deltaTime * speed);
i += 1;
if (i == 70) {
opentheDoor = false;
i = 0;
}
}
if (closetheDoor == true) {
this.transform.Rotate (-Rotation_ * Time.deltaTime * speed);
i += 1;
if (i == 70) {
closetheDoor = false;
i = 0;
}
}
}
void OnTriggerEnter (Collider other) {
if (other.gameObject.tag == "Player") { {
opentheDoor = true;
}
}
}
void OnTriggerExit (Collider other) {
if (other.gameObject.tag == "Player") {
closetheDoor = true;
}
}
}
答案 0 :(得分:1)
在OnTriggerEnter中添加另一项检查,以检查门是否正在打开。
void OnTriggerEnter (Collider other) {
if (other.gameObject.tag == "Player" && !opentheDoor) {
opentheDoor = true;
}
}
答案 1 :(得分:1)
这就是我处理场景的方式
public class DoorHandler : MonoBehaviour {
public Door door;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
door.OpenDoor();
}
}
}
这应该附加到门的父级。
下次服用
public class Door : MonoBehaviour {
public bool isOpened = false;
public void OpenDoor()
{
if (!isOpened)
{
isOpened = true;
Debug.Log("OPEN");
//OPEN DOOR CODE!
}
}
}
将此附加到Door
GameObject
层次结构类似于 DoorHandler-> Door-> DoorModel (其中Door只是Door的空游戏对象枢轴)
在DoorHandler
的GameObject中,附加BoxCollider
和选中标记IsTrigger
。
另外一个玩家应该有刚体(最好是Kinametic),显然是对撞机
因此,当Player
进入DoorHandler的对撞机-> DoorHandler的OnTriggerEnter
将被触发,并最终将Door
调用到OpenDoor()
答案 2 :(得分:0)
将门固定到空的物体上。将触发器放在空对象上。然后使触发器入口旋转门,而不旋转受害物体,对撞机将保留在原处。
父母 -儿童(门) -child(对撞机)