Проблема с коллайдерами и их вращением в Unity Game - PullRequest
0 голосов
/ 28 ноября 2018

Проблема в том, что мне нужно создать открывающуюся дверь.Эта дверь должна открыться, когда игрок войдет в Box Collider, который связан с дверью.Но проблема в том, что когда дверь начинает открываться и вращаться, коллайдер тоже начинает вращаться, что вызывает у меня много проблем с такой идеей.Я пытаюсь создать EmptyObject с его коллайдером, но не могу связать этот коллайдер с помощью скрипта и самой функции 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;
            }
        }
    }

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

прикрепить дверь к пустому предмету.поставить курок на пустой объект.затем заставьте входной сигнал поворота повернуть дверь, а не упавший предмет, и коллайдер останется на месте.

Parent -child (door) -child (collider)

0 голосов
/ 29 ноября 2018

Вот так я бы справился с scenerio

Take

DoorHandler.cs

    public class DoorHandler : MonoBehaviour {

    public Door door;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            door.OpenDoor();
        }
    }
}

Это должно быть прикреплено к Родителю двери.

Следующий дубль

Door.cs

public class Door : MonoBehaviour {

    public bool isOpened = false;

    public void OpenDoor()
    {
        if (!isOpened)
        {
            isOpened = true;
            Debug.Log("OPEN");
            //OPEN DOOR CODE!
        }
    }
}

Прикрепите это к Door GameObject

NOTE

Иерархия будеткак DoorHandler-> Door-> DoorModel (где Door - это пустой стержень игрового объекта двери)
enter image description here

In DoorHandler GameObjectприкрепите BoxCollider и отметку IsTrigger.

enter image description here

Также игрок ДОЛЖЕН ИМЕТЬ RIGIDBODY (предпочтительно Kinametic) и, очевидно,коллайдер

Итак, когда Player войдет в коллайдер DoorHandler -> DoorHandler's OnTriggerEnter сработает и, наконец, вызовет Door to OpenDoor()

0 голосов
/ 28 ноября 2018

Добавьте еще одну проверку в OnTriggerEnter, которая проверяет, открывается ли дверь в настоящее время или нет.

void OnTriggerEnter (Collider other) {  
    if (other.gameObject.tag == "Player" && !opentheDoor) {
           opentheDoor = true;
    }
}
...