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

总结

射线生成,射线检测,射线+距离获得坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91980.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDP中的单播,多播,广播(代码实现)

文章目录1. UDP 单播(Unicast)示例2. UDP 广播(Broadcast)示例3. UDP 多播(Multicast)示例3.1 多播发送方示例3.2 多播接收方示例总结1. UDP 单播(Unicast)示例 发送方向指定单个目…

神经网络:卷积层

神经网络 卷积操作 例子: 输入:二维图像 [1,2,0,3,1] [0,1,2,3,1] [1,2,1,0,0] [5,2,3,1,1] [2,1,0,1,1] 卷积核: [1,2,1] [0,1,0] [2,1,0] 然后需要将输入图像和卷积核转化为4维张量 为什么转为4维张量?因为卷积操作需要输入图像…

2.4 组件间通信Props(父传子)

父组件 在父组件模板上的子组件上加上属性值&#xff0c;属性值就是想要传递给子组件的信息。 例如&#xff1a; <template> <div class"Big-box"><testBox :personList"p"></testBox> </div> </template>子组件 子组…

从零开始学习 Redux:React Native 项目中的状态管理

Redux 是一个用于 JavaScript 应用程序的状态管理库&#xff0c;通常与 React 或 React Native 配合使用&#xff0c;帮助管理应用的状态和数据流。其核心原理是通过集中式的“单一数据源”来管理应用状态&#xff0c;避免组件之间的“层层传递”状态和副作用。 Redux 的原理单…

[特殊字符] CentOS 7 离线安装 MySQL 5.7 实验

&#x1f427; CentOS 7 离线安装 MySQL 5.7 实验 针对企业无互联网环境的系统&#xff0c;设计了如何在 CentOS 7 系统中&#xff0c;使用一台可以联网的主机&#xff08;NodeA&#xff09;为另一台无法联网的主机&#xff08;NodeB&#xff09;安装 MySQL 5.7 数据库及其依赖…

Redis 概率型数据结构实战指南

1. 为什么要用「近似」&#xff1f; 随着业务量爆发式增长&#xff0c;精确统计 的内存或 CPU 成本可能难以接受。例如&#xff1a; 统计一天内 唯一 IP 数 —— 用 SET 精确去重&#xff0c;百万 IP→占用数百 MB。统计海量商品销量、实时计算 P99 延迟、获取 TOP-N 热门页面……

Android开发工程师:Linux一条find grep命令通关搜索内容与文件

find . -type f \( -name "*.java" -o -name "*.xml" \) -not -path "./out/*" -exec grep -irnE activity|class {} 多关键词搜索&#xff1a;使用正则表达式 pattern1|pattern2 同时搜索多个关键词&#xff08;如 activity|class&#xff09;单…

深入理解浏览器解析机制和XSS向量编码

URL 编码 "javascript:alert(1)"---->%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>-------浏览器解析不了。 页面识别在url解码之前&#xff0c;在…

ThinkPHP8极简上手指南:开启高效开发之旅

目录一、环境搭建1.1 安装 PHP1.2 安装 Composer二、安装 ThinkPHP8三、目录结构解析四、第一个简单示例&#xff1a;Hello, ThinkPHP84.1 创建控制器4.2 编写控制器方法4.3 配置路由4.4 访问测试五、进阶示例&#xff1a;数据库查询5.1 配置数据库连接5.2 创建模型5.3 编写查询…

智能制造之物料详解

在制造业业务系统中&#xff0c;物料流转贯穿“需求→采购→入库→生产→成品→交付”全流程&#xff0c;各系统通过数据协同实现物料状态、位置、数量的精准追踪。以下按流转阶段拆解&#xff1a;一、需求发起与计划阶段&#xff08;CRM/ERP/PLM主导&#xff09;1. 需求源头…

Qt的安装和环境配置

QT开发环境的搭建&#xff0c;需要安装3个部分&#xff0c;C编译器、Qt SDK(SDK是软件开发工具包)、QT的集成开发环境(IDE)Qt的3种集成开发环境&#xff1a;Qt Creator&#xff1a;是由Qt官方提供的&#xff0c;容易上手&#xff0c;不需要额外的配置&#xff0c;但是有一些bug…

解析MCUboot的实现原理和Image结构

目录 概述 1 MCUboot的功能 1.1 代码包结构 1.2 限制 2 MCUboot Image 2.1 Image格式 2.2 Flash Map 2.3 Image 槽 2.4 使用scratch交换 2.5 Image 尾部数据结构 3 交换区 3.1 单交换区 3.2 Multiple Image boot 3.3 Image交换 4 交换状态&#xff08;swap statu…

YOLOv8目标检测项目代码详解与习题

YOLOv8目标检测项目代码详解与习题一、项目代码详解该代码是基于 YOLOv8 和 OpenCV 实现的图像目标检测项目&#xff0c;核心功能是加载预训练的 YOLOv8 模型&#xff0c;对指定图像进行目标检测&#xff0c;然后可视化检测结果并保存或显示。以下是逐行解析&#xff1a;# -*- …

gradle关于dependency-management的使用

1、相关文档Spring官方文档&#xff1a;https://docs.spring.io/dependency-management-plugin/docs/current-SNAPSHOT/reference/html/#introduction仓库版本查看&#xff1a;https://mvnrepository.com/artifact/io.spring.gradle/dependency-management-plugin/1.0.15.RELEA…

Java SpringBoot 对接FreeSwitch

1.增加Maven依赖<dependency><groupId>org.freeswitch.esl.client</groupId><artifactId>org.freeswitch.esl.client</artifactId><version>0.9.2</version></dependency><!-- XML-RPC --><dependency><groupI…

限流算法与实现

费曼学习法学习限流算法为什么要限流mysql插入600次/秒超过这个阈值&#xff0c;要么使用mysql集群、要么限流&#xff0c;防止宕机有哪些算法固定窗口就是个计数器&#xff0c;一秒内超过阈值&#xff0c;不允许访问缺点&#xff1a;不均匀&#xff0c;跨越临界点的一秒内&…

Android本地浏览PDF(Android PDF.js 简要学习手册)

环境 Min SDK: 21 依赖&#xff1a; implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1" implementation "androidx.webkit:webkit:1.12.0"权限&#xff1a; <uses-permission android:name"android.permission.INTERNE…

CVE-2022-41128

概述CVE-2022-41128 是 Microsoft Internet Explorer&#xff08;IE&#xff09;浏览器中 JavaScript 引擎&#xff08;JScript/Chakra&#xff09;的一个 0day 漏洞&#xff08;披露时无官方补丁&#xff09;&#xff0c;属于内存破坏类漏洞&#xff0c;可被用于远程代码执行&…

基于LSTM的时间序列到时间序列的回归模拟

获取项目源码点击文末名片项目背景与目标 本项目旨在开发一种基于长短期记忆网络&#xff08;LSTM&#xff09;的模型&#xff0c;用于时间序列到时间序列的回归模拟任务。通过处理多组不同来源的时间序列数据&#xff0c;本模型的目标是从给定的输入序列中预测相应的输出序列。…

Linux基础命令详解:从入门到精通

本文整理了Linux系统中最常用的基础命令&#xff0c;每个命令都配有详细说明和具体示例&#xff0c;帮助你快速掌握Linux操作技巧。文章中用的终端是XShell,系统是Centos&#x1f4c1; 1. ls - 列出目录&#xff08;文件夹&#xff09;内容 功能&#xff1a;显示当前目录下的文…