Unity_通过鼠标点击屏幕移动屏幕里的一个对象
文章目录
- 一、获取到点击物体的Tansform(摁下鼠标左键的瞬间)
- 二、移动点击的物体(摁着鼠标左键不放)
- 三、松开左键清理被移动对象属性
- 总结
注:本文章只是学习总结的笔记,视频链接
一、获取到点击物体的Tansform(摁下鼠标左键的瞬间)
实现思路:通过Camera的ScreenPointToRay方法和Input.mousePosition鼠标坐标生成创建Ray射线,再通过Physics的Raycast方法和射线,获得被碰撞的物体相关信息存储在RaycastHit里。
实现代码:
using UnityEngine;public class 点击移动物体 : MonoBehaviour
{public Camera cam;public Transform 被点击物体;//clickedOBJ// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;Physics.Raycast(ray, out hit);被点击物体 = hit.transform;}}
}
二、移动点击的物体(摁着鼠标左键不放)
思路:通过相机的射线和距离获得一个点,设置给物体从而达到移动物体。
距离如何获取:
方法一:获取到点击物体时hit对象中存射线起点到碰撞点的距离
方法二:通过两个点算一个距离,也就的那被移动对象的坐标和相机坐标算一个距离
代码如下:
using System.Globalization;
using UnityEngine;public class 点击移动物体 : MonoBehaviour
{public Camera cam;public Transform 被点击物体;//clickedOBJpublic float 距离;//distance// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray, out hit)){被点击物体 = hit.transform;距离 = Vector3.Distance(cam.transform.position, hit.transform.position);float 距离1 = hit.distance; //这是视频老师写的获取应该相机和碰撞点的距离Debug.Log($"1:{距离}\n2:{距离1}");}}if(Input.GetMouseButton(0)){if(被点击物体){Ray ray = cam.ScreenPointToRay(Input.mousePosition);被点击物体.position = ray.GetPoint(距离);}}}
}
三、松开左键清理被移动对象属性
using System.Globalization;
using UnityEngine;public class 点击移动物体 : MonoBehaviour
{public Camera cam;public Transform 被点击物体;//clickedOBJpublic float 距离;//distance// Start is called once before the first execution of Update after the MonoBehaviour is createdvoid Start(){}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray, out hit)){被点击物体 = hit.transform;距离 = Vector3.Distance(cam.transform.position, hit.transform.position);float 距离1 = hit.distance; //这是视频老师写的获取应该相机和碰撞点的距离Debug.Log($"1:{距离}\n2:{距离1}");}}if(Input.GetMouseButton(0)){if(被点击物体){Ray ray = cam.ScreenPointToRay(Input.mousePosition);被点击物体.position = ray.GetPoint(距离);}}if (Input.GetMouseButtonUp(0)) {被点击物体 = null;}}
}
总结
射线生成,射线检测,射线+距离获得坐标