unity3d 鼠标移动三维物体

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;             
            }
        }
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值