簡要:通過鼠標點擊來發射一條射線,來獲得射線所碰到的物體名稱,再通過改變門的Rotation值來實現開關門的效果。
一、代碼實現
1.1 簡易的場景搭建
注:這里的門是unity資源商店下載的一個預制體。
1.2 給門添加碰撞體
-
選中要開的門頁
-
1.3 給門添加代碼
-
新建C-sharp文件命名為DoorRay,編寫代碼文件;
-
測試,鼠標點擊門頁實現開關門效果。
代碼:(相關解釋代碼中)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DoorRay : MonoBehaviour { //碰撞信息 RaycastHit hit; //判斷門的開關,關為false,開為true private bool isOpen = false; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetMouseButtonUp(0))//這里的GetMouseButtonUp是指鼠標點擊回彈時觸發; //GetMouseButtonDown是鼠標點擊下去觸發;0代表鼠標左鍵,1代表鼠標右鍵,2代表鼠標中鍵 { var ray = Camera.main.ScreenPointToRay(Input.mousePosition);//發射射線 if (Physics.Raycast(ray, out hit))//如果射到物體 { Debug.Log(hit.collider.gameObject.name);//控制台輸出檢測到物體的名稱 //判斷門的開合,以及檢測到的名稱是否與門的名稱相同(這里我的門的名稱為doorWing) if (isOpen.Equals(false) && hit.collider.gameObject.name.Equals("doorWing")) { //改變門頁的Rotation中的y軸值(按照自己實際情況(x,y,z)) transform.rotation = Quaternion.Euler(0.0f, 90f, 0.0f); isOpen = true; } else if (hit.collider.gameObject.name.Equals("doorWing") && isOpen.Equals(true)) { transform.rotation = Quaternion.Euler(0.0f, 180f, 0.0f); isOpen = false; } } } } }
1.4 整體