代码之家  ›  专栏  ›  技术社区  ›  Глеб Буткевич

单位博弈中对撞机及其旋转问题

  •  1
  • Глеб Буткевич  · 技术社区  · 6 年前

    问题是我要创造一个可打开的门。当玩家进入与门相连的对撞机时,该门应打开。但问题是,当门开始打开和旋转时,碰撞机也开始旋转,这给我带来了很多使用这种想法的问题。我试图用它的碰撞器创建EmptyObject,但是我不能用脚本和OnTiggerCenter函数本身连接这个碰撞器。也许我不明白,谁知道,我只是个乞丐。怎么会帮忙,请写个答案。 如果有人需要我的代码:

        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 回复  |  直到 6 年前
        1
  •  1
  •   Rudra K Gesota    6 年前

    这就是我处理风景的方法

    采取

    门把手

        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 游戏对象

    注释

    层次结构应该是 门把手->门->门型号 (门只是门的一个空游戏对象轴)
    enter image description here

    DoorHandler 游戏对象连接 BoxCollider Check Mark IsTrigger .

    enter image description here

    也是球员 应该有一个硬体 (最好是基纳米特)显然是对撞机

    所以什么时候 Player 进入门把手的碰撞器->门把手的碰撞器 OnTriggerEnter 将被触发并最终调用 OpenDoor()

        2
  •  1
  •   Eliasar    6 年前

    添加另一个签入控制中心,用于检查门当前是否打开。

    void OnTriggerEnter (Collider other) {  
        if (other.gameObject.tag == "Player" && !opentheDoor) {
               opentheDoor = true;
        }
    }
    
        3
  •  0
  •   Technivorous    6 年前

    将门连接到空对象上。将触发器置于空对象上。然后让控制器入口旋转门,而不是旋转物体,碰撞器将保持在原位。

    起源 -儿童(门) -儿童(对撞机)