【Unity】鼠标移动物体到某个物体上进行触发

今天做完了项目,交给了甲方,但是甲方给出的需求调整很无语。。。之前是点击之后播放动画,现在变成了需要用鼠标移动物体到播放动画的物体上触发,例如:手术刀。。。

移动手术刀到患者身上指定位置之后,播放手术刀动画。。。。

有点坑。。。整体逻辑变了。。。。

中间比较核心的是鼠标和物体的世界坐标以及屏幕坐标的转换,这一点有点难受。。研究了一下,参考了一些大佬的文章,写了一个使用鼠标拖拽物体的脚本出来,触发就不列出来了,比较简单

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chufa : MonoBehaviour {
	private Camera Camera_Ray;//发射射线的相机
	private GameObject go;//射线碰撞的物体
	public static string Obj_Name;//射线碰撞物体的名字 (这一块是看到一个大佬用的)

	private Vector3 Point_Obj;//物体在屏幕上的坐标
	private Vector3 offset;//差值

	private bool isDrage = false;
	// Use this for initialization
	void Start () {
		Camera_Ray = Camera.main;
	}
	
	// Update is called once per frame
	void Update () {
		DragObj();
	}
	private void DragObj()
	{
        Ray ray = Camera_Ray.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (isDrage==false)
        {
            if (Physics.Raycast(ray,out hit))
            {
				go = hit.collider.gameObject;

				//把物体的世界坐标转换为屏幕坐标
				Point_Obj = Camera_Ray.WorldToScreenPoint(go.transform.position);

				//获得物体世界坐标和鼠标在世界中坐标的差值(鼠标的坐标提前转换为世界坐标)
				offset = go.transform.position - Camera_Ray.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y,Point_Obj.z));

				//名称显示出来
				Obj_Name = go.name;
            }
            else
            {
				Obj_Name = null;
            }
        }
        if (Input.GetMouseButton(0))
        {
			Vector3 cameraScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y,Point_Obj.z);
			Vector3 objPosition = Camera_Ray.ScreenToWorldPoint(cameraScreenSpace)+offset;

            if (Obj_Name!=null)
            {
				go.transform.position = objPosition;
            }
			isDrage = true;
        }
        else
        {
			isDrage = false;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜梦说开发(VR)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值