如何只打开一扇门而不打开所有门

alppi00a

会员
已加入
2020年3月18日
留言内容
11
编程经验
Beginner
很抱歉再次打扰,但是当我单击它时,我怎么能打开一扇门,因为现在当我尝试只打开一扇门时,所有的门都打开了 :D

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;




public class DoorOpen : MonoBehaviour
{
    public GameObject Playerr;
    public PlayerRay playerray;  
    public Vector3 AfterAngles;
    public Animator animator;
    public Vector3 CurrentAngles;
    public GameObject Door;
    public float x;
    public float y;
    public float z;
    public float x1;
    public float y1;
    public float z1;
    public bool DoorIsOpen = false;
    public bool DoorIsClosed = true;
    public bool PlayerIsNear = false;
    public Text InfoText;
    public GameObject TextParent;


   
    public void Start()
    {

      

        playerray = Playerr.GetComponent<PlayerRay>();




        TextParent.SetActive(false);

        Door = this.gameObject;



        animator = GetComponent<Animator>();
    }


    public void Update()
    {
      


        if (Input.GetKeyDown(KeyCode.E) && DoorIsOpen == false && PlayerIsNear == true)
        {
            animator.SetTrigger("OpenDoor");


            x = CurrentAngles.x;
            y = CurrentAngles.y;
            z = CurrentAngles.z;

            Door.GetComponent<Transform>().eulerAngles = CurrentAngles;

            Door.GetComponent<Transform>().eulerAngles.Set(x, y -= 90, z);

            Door.GetComponent<Transform>().eulerAngles = AfterAngles;

            x1 = AfterAngles.x;
            y1 = AfterAngles.y;
            z1 = AfterAngles.z;
        }

        if (Input.GetKeyDown(KeyCode.E) && DoorIsOpen == true && PlayerIsNear == true)
        {
            animator.SetTrigger("CloseDoor");


            x = CurrentAngles.x;
            y = CurrentAngles.y;
            z = CurrentAngles.z;

            Door.GetComponent<Transform>().eulerAngles = CurrentAngles;

            Door.GetComponent<Transform>().eulerAngles.Set(x, y += 90, z);

            Door.GetComponent<Transform>().eulerAngles = AfterAngles;

            x1 = AfterAngles.x;
            y1 = AfterAngles.y;
            z1 = AfterAngles.z;
        }

        if (playerray.IsOpen == true)
        {
            //Debug.Log("we hit" + hit.collider.name + " " + hit.point);
            rayopen();
          

        }
        else
        {
            rayclose();
        }

       
    }


    public void open()
    {
        DoorIsOpen = true;
        DoorIsClosed = false;
    }
    public void close()
    {
        DoorIsOpen = false;
        DoorIsClosed = true;
    }

   



        public void rayopen()
        {

        
                TextParent.SetActive(true);

                this.gameObject.GetComponentInChildren<DoorOpen>(PlayerIsNear = true);

                
          
                Debug.Log("welcome");

                InfoText.text = ("press E");



        }

        public void rayclose()
        {

        this.gameObject.GetComponentInChildren<DoorOpen>(PlayerIsNear = false);
       

            TextParent.SetActive(false);



        }
  



}


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerRay : MonoBehaviour
{

    public bool IsOpen;
    public GameObject DoorParent;
    public DoorOpen dooropen;
    public LayerMask door;
    public GameObject ThisDoor;
    Camera cam;
   
    void Start()
    {
        ThisDoor = DoorParent.GetComponentInChildren<DoorOpen>().Door;

        dooropen = DoorParent.GetComponentInChildren<DoorOpen>();

        cam = Camera.main;
    }

    // Update is called once per frame
    void Update()
    {
        Ray ray = cam.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 5, door))
        {
            Debug.Log("we hit" + hit.collider.name + " " + hit.point);
          
            IsOpen = true;
          

        }
        else
        {
           
            IsOpen = false;

        }
    }
}
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
为什么同一动作需要两个布尔值?

这需要阅读很多代码,发布注释代码有什么意义?如果它不存在,则将其删除。

您的代码的哪一部分负责所有门的打开?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
主题拆分,因为它与原始主题不同。
 

alppi00a

会员
已加入
2020年3月18日
留言内容
11
编程经验
Beginner
为什么同一动作需要两个布尔值?

这需要阅读很多代码,发布注释代码有什么意义?如果它不存在,则将其删除。

您的代码的哪一部分负责所有门的打开?

播放器ray脚本仅是从鼠标“拖动”石灰以向前移动,并从其击打中获取信息,并在何时关闭和何时打开g时发出dooropen脚本命令。

在dooropen脚本中,我仅控制门的动画以及门的打开和关闭。

我以前是用对撞机做过的,但是后来我认为使用光线更容易,所以现在我可以使用光线了,除了每扇门同时打开和关闭

每个门玩家都在附近布尔变成真
 
最佳 底部