關於Unity中的3D拾取


3D拾取

3D游戲實際上看到的是2D畫面,我們在屏幕上點擊,想要找到哪個3D物體,我們實際上是在一個2維平面內做3D拾取。

3D拾取實際上是,當玩家點擊屏幕的時候,會從顯示屏幕的攝像頭發射一條射線,射到它所照射的平面上,射線第一次碰撞到的物體就是玩家所選的物體。

1: 游戲中需要用戶觸摸/點擊 操作3D世界里面的3D物體,那么需要判斷用戶點擊的是3D中的哪個物體;
2: 3D拾取的原理: 從攝像機到屏幕空間的觸摸點發出一條射線,這條射線第一個撞到哪個3D物體就會認為哪個3D物體被用戶選擇;
3: 代碼編寫
  (1) 發射一條射線: Ray ray = Camera.main.ScreenPointToRay(Touch.position);
  (2) 檢測撞到那個物體: Raycast hit; bool Physics.Raycast(ray, out hit);
  (3) hit.transform, 獲得物體的transform組件, name可以獲得被碰撞的物體的名字;
  (4) Camera.main獲取當前我們的主Camera
  (5) 如果要拾取,需要有一個碰撞器

 

 

3D拾取實例

1.創建Unity工程目錄

2.創建一個立方體Cube,自帶Box Collider(其他物體想要參與3D拾取的必須有碰撞器組件才可以)

3.創建一個腳本ray_test掛載到Cube節點下

4.打開ray_test

using UnityEngine;
using System.Collections;

public class ray_test : MonoBehaviour {

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetMouseButtonDown(0)) {//判斷鼠標是否按下
            // 從攝像機開始,到屏幕觸摸點,發出一條射線
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            // 撞擊到了哪個3D物體
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit)) {
                Debug.Log(hit.transform.name);//打印出碰撞到的節點的名字
            }
        }
    }
}

5.點擊Game視圖中的Cube,控制台打印出Cube的名字Cube

 

 

注意:

獲取主攝像機方法,main是數據成員,使用的時候注意Main Camera節點的Tag必須是MainCamera

Camera.main

 


免責聲明!

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



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