Unity——射線檢測(鼠標點擊開關門效果)


Unity射線檢測——實現簡單的開關門效果

簡要:通過鼠標點擊來發射一條射線,來獲得射線所碰到的物體名稱,再通過改變門的Rotation值來實現開關門的效果。

一、代碼實現

1.1 簡易的場景搭建

注:這里的門是unity資源商店下載的一個預制體。

1.2 給門添加碰撞體

  1. 選中要開的門頁

  2. 添加Box Collider碰撞體(由於導入的資源包不帶有碰撞體)

1.3 給門添加代碼

  1. 新建C-sharp文件命名為DoorRay,編寫代碼文件;

  2. 測試,鼠標點擊門頁實現開關門效果。

代碼:(相關解釋代碼中)

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  整體

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM