1. 基本原理
从相机发射一条射线到屏幕的鼠标位置,通过射线检测要抓取得物体
2. 类
(1)Camera : 相机组件
(2)Ray : 射线
(3)Physics.Raycast : 射线反射,碰到三维物体,返回True
(4)Input : 输入组件
3.实现代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class capture : MonoBehaviour {
private static Camera cam;
private static Ray ray ;
private static RaycastHit hit;
// Use this for initialization
void Start () {
//获取相机组件
cam = gameObject.GetComponent<Camera>();
}
// Update is called once per frame
void Update () {
// 判断鼠标左键是否按下
if (Input.GetMouseButton(0))
{
// 创建一条从相机到鼠标点的射线
ray = cam.ScreenPointToRay(Input.mousePosition);
// 判断射线是否击中三维物体
if (Physics.Raycast(ray,out hit))
{
// 将被击中物体的世界坐标转换为屏幕坐标,目的是获取z位置,因为屏幕坐标只有x,y
Vector3 hit_object_p = cam.WorldToScreenPoint(hit.collider.transform.position);
//屏幕坐标转为世界坐标
Vector3 p = cam.ScreenToWorldPoint(new Vector3
(Input.mousePosition.x,
Input.mousePosition.y,
hit_object_p.z)
);
//设置抓取物体的新位置
hit.collider.transform.position = p;
}
}
}
}