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);
}
}
}