Unity射线的使用

Unity射线的使用

俩种获取相机的方式

//tag必须为MainCamera
mainCamera = GameObject.Find("MainCamera").GetComponen<Camera>();
mainCamera = Camera.main; 

返回一个从相机到屏幕点的光线

Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);

debug画出射线

Debug.DrawRay(ray.origin,ray.direction * 10,Color.yellow);

//ray:射线对象
//layerMask:选择那个层进行碰撞检测
//hit:存放碰撞物体的信息
//maxDistance:最远距离
//存放碰撞物体的信息
RaycastHit hit;
bool isCollider = Physics.Raycast(ray , out hit , 1000, LayerMask(“MapCube”));
//得到对象
MapCube mapCube = hit.collider.GetComponent();

代码示例

using System.Collections;
using System.Collections.Generic;
using System.Xml.Linq;
using UnityEngine;

public class RingMove : MonoBehaviour
{
    
    
    //射线
    private Ray ray;
    //碰撞点
    private RaycastHit hit;
    //是否碰撞上
    private bool is_element=false;
    //拿起放下
    private int flag = 0;
    //物体
    private GameObject gameRing;
    void Update()
    {
    
    
        if (Input.GetMouseButtonDown(0))
        {
    
    
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray,out hit)&&hit.collider.tag=="Ring")
            {
    
    
                is_element = true;
                gameRing= hit.collider.gameObject;
                Debug.Log(gameRing.name);
            }
            if (flag==0)
            {
    
    
                flag = 1;
            }
            else
            {
    
    
                flag= 0;
            }
        }
        if (flag==1&&is_element)
        {
    
    
            Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(gameRing.transform.position);
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);
            gameRing.transform.position = Camera.main.ScreenToWorldPoint(mousePos);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45598937/article/details/130293378