Unity 通过鼠标框选绘制矩形区域

鼠标拖动的同时绘制一块同等大小的区域:如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 通过鼠标框选绘制矩形区域
/// </summary>
/// public enum MouseType
{left = 0,right = 1,middle = 2
}
public class DrawRectangleArea : MonoBehaviour
{bool _canAddArea = true;/// <summary>/// 是否可以绘制/// </summary>public bool canAddArea{set { _canAddArea = value; }get { return _canAddArea; }}bool _isDraw = false;[SerializeField]Transform areaCube;Vector3 leftTopPos = Vector3.zero;Vector3 rightBottomPos = Vector3.zero;/// <summary>/// 绘制区域所在的层级/// </summary>[SerializeField]LayerMask maskLayer = 0;/// <summary>/// 设置鼠标哪个按键绘制/// </summary>[SerializeField]MouseType _mouseType = MouseType.right;public MouseType mouseType { set { _mouseType = value; } }void AddArea(){if (_canAddArea){if (Input.GetMouseButtonDown((int)_mouseType)){// 从相机位置发射一条射线经过屏幕上的鼠标点击位置Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);// 声明一个射线碰撞信息类RaycastHit hit;// 进行碰撞检测           if (Physics.Raycast(ray, out hit, Mathf.Infinity, maskLayer, QueryTriggerInteraction.Ignore)){_isDraw = true;leftTopPos = hit.point;}}if (Input.GetMouseButton((int)_mouseType)){if (_isDraw){// 从相机位置发射一条射线经过屏幕上的鼠标点击位置Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);// 声明一个射线碰撞信息类RaycastHit hit;// 进行碰撞检测if (Physics.Raycast(ray, out hit, Mathf.Infinity, maskLayer, QueryTriggerInteraction.Ignore)){rightBottomPos = hit.point;Vector3 offset = leftTopPos + rightBottomPos;Vector3 scale = rightBottomPos - leftTopPos;areaCube.position = new Vector3(offset.x * 0.5f, leftTopPos.y + 0.5f, offset.z * 0.5f);areaCube.localScale = new Vector3(Mathf.Abs(scale.x), 1, Mathf.Abs(scale.z));}}}if (Input.GetMouseButtonUp((int)_mouseType)){_isDraw = false;}}}// Update is called once per framevoid Update(){AddArea();}
}

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

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

相关文章

MySQL线上慢SQL问题分析处理小记

相同数据量表结构&#xff0c;线上执行12s 本地执行0.1s过程分析 1. 慢SQL信息 SELECT t1.id,t2.idFROM t_platform_target_standard_target_index t1LEFT JOIN t_platform_target_standard t2 ON t1.target_number t2.target_numberWHERE t1.delete_flag 0 AND t2.user_num …

基于STM32的光电传感器应用开发实例

基于STM32的光电传感器应用开发是一种常见的嵌入式系统应用&#xff0c;光电传感器可以用于检测物体的有无、位置、颜色、亮度等信息&#xff0c;被广泛应用于工业自动化、机器人技术、智能家居等领域。本文将介绍如何在STM32上进行光电传感器应用开发&#xff0c;并提供相应的…

Word 将页面方向更改为横向或纵向

文章目录 更改整个文档的方向更改部分页面的方向方法1&#xff1a;方法2&#xff1a; 参考链接 更改整个文档的方向 选择“布局”>“方向”&#xff0c;选择“纵向”或“横向”。 更改部分页面的方向 需要达到下图结果&#xff1a; 方法1&#xff1a; 选:中你要在横向页面…

基于vim的开发编辑器配置

整体的vim的设置是在 /etc/vim/vimrc 文件中。如果想设置所有用户的配置&#xff0c;在里面设置就可以了,配置和.vimrc是一样的&#xff0c;在最后面添加下面2中的语句。 不建议修改/etc/vimrc 文件&#xff0c;每个用户可以在用户根目录中设置vim&#xff0c;新建.vimrc。命令…

在 Ubuntu 上安装 pip的方法

下面是在Ubuntu上安装pip的完整攻略&#xff1a; 一、安装pip前的准备工作 在开始安装pip之前&#xff0c;我们需要先进行一些准备工作&#xff0c;包括更新软件源和安装必要的依赖。 更新软件源 使用以下命令更新软件源&#xff1a; sudo apt-get update安装必要的依赖 …

VSCode的介绍和入门

VSCode简介 跨平台&#xff1a;VSCode支持Windows、macOS和Linux等多种操作系统。开源&#xff1a;VSCode使用MIT许可协议&#xff0c;允许用户自由修改和分发源代码。支持多种编程语言&#xff1a;VSCode支持C、C、JavaScript、TypeScript、Python、Java、PHP、Go、HTML/CSS等…

探索 Node.js 与 C++ 的绑定:使用 node-addon-api

在 Node.js 中使用 C 进行绑定是一种强大的方式&#xff0c;可以充分利用 C 的性能优势。在本文中&#xff0c;我们将探讨如何使用 node-addon-api 来实现这一目标。 1. 为什么选择 C 绑定&#xff1f; Node.js 是一个基于 JavaScript 的平台&#xff0c;它使得开发人员能够使…

GPT系列概述

OPENAI做的东西 Openai老窝在爱荷华州&#xff0c;微软投资的数据中心 万物皆可GPT下咱们要失业了&#xff1f; 但是世界不仅仅是GPT GPT其实也只是冰山一角&#xff0c;2022年每4天就有一个大型模型问世 GPT历史时刻 GPT-1 带回到2018年的NLP 所有下游任务都需要微调&#x…

Pycharm 切换interpreter---python的环境和第三方库问题

这篇回答两个问题&#xff1a; 1.为什么在 pycharm中打开新的project&#xff0c;切换interpreter 之后发现自己之前装的库消失了&#xff1f; 2.为什么 interpreter 切换到python3.8了&#xff0c; terminal 还是在 3.9&#xff1f;&#xff1f; 问题的关键&#xff1a;搞懂什…

编程笔记 html5cssjs 012 HTML分块

编程笔记 html5&css&js 012 HTML分块 一、HTML 块级元素二、HTML 内联元素三、HTML <div> 元素四、HTML <span> 元素五、HTML<article>元素六、<article>元素和<div>元素的区别与联系小结 像报纸排版一样&#xff0c;很多时候需要把平面…

LTPI协议的理解——2、LTPI实现的底层架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——2、LTPI实现的底层架构 前言一、体系结构三、实现细节四、物理接口信号传输方法总结 前言 前面讲了LTPI的定义和大概结构&#xff0c;接下来继续理解LTPI…

【百度前端三面面试题】

在某乎看到的《百度前端三面面试题全部公开&#xff0c;三面的最后一个问题令我窒息》 其中下面三个问题没有给出答案&#xff0c;我虽然是前端出身&#xff0c;但也面试过一些人&#xff0c;大概分析一下这些问题。 面试中问这几个问题的目的是什么 &#xff0c;怎么回答 上…

理解开源协议GPL、MIT、BSD、Apache License

开源协议是一种法律文件&#xff0c;规定了使用、修改和分享开源软件的规则和条件。以下是一些常见的开源协议及其相同点和区别&#xff1a;GPL&#xff08;GNU General Public License&#xff09;&#xff1a;GPL 是一种比较严格的开源协议&#xff0c;要求使用者如果对开源软…

MySQL 数值函数,字符串函数与多表查询

MySQL像其他语言一样,也提供了很多库函数,分为单行函数和分组函数(聚合函数),我们这里先简易介绍一些函数,熟悉就行,知道怎么使用即可. 数值函数 三角函数 指数与对数函数 进制间的转换函数 字符串函数 注:LPAD函数是右对齐,RPAD函数是左对齐 多表查询 注:如果为表起了别名,就…

elasticsearch系列四:集群常规运维

概述 在使用es中如果遇到了集群不可写入或者部分索引状态unassigned&#xff0c;明明写入了很多数据但是查不到等等系列问题该怎么办呢&#xff1f;咱们今天一起看下常用运维命令。 案例 起初我们es性能还跟得上&#xff0c;随着业务发展壮大&#xff0c;发现查询性能越来越不…

边缘计算网关:重新定义物联网数据处理

随着物联网&#xff08;IoT&#xff09;设备的爆炸式增长&#xff0c;数据处理和分析的需求也在迅速增加。传统的数据处理方式&#xff0c;将所有数据传输到中心服务器进行处理&#xff0c;不仅增加了网络负担&#xff0c;还可能导致数据延迟和安全问题。因此&#xff0c;边缘计…

Java虚拟机中的垃圾回收

2 垃圾回收 2.1 判断一个对象是否可回收 2.1.1 引用计数法 如果一个对象被另一个对象引用&#xff0c;那么它的引用计数加一&#xff0c;如果那个对象不再引用它了&#xff0c;那么引用计数减一。当引用计数为 0 时&#xff0c;该对象就应该被垃圾回收了。 但是下面这种互相…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的&#xff0c;但是kafka不支持这种直接的用法&#xff0c;所以我们需要独立实现这个功能&#xff0c;以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务&#xff0c;这个检…

0开始配置Cartographer建图和导航定位

0开始配置Cartographer 日期&#xff1a;12-19 硬件&#xff1a;激光雷达IMU 小车的tf变换&#xff1a; 建图配置 lua文件配置&#xff1a;my_robot.lua include "map_builder.lua" include "trajectory_builder.lua"options {map_builder MAP_BUILDE…

华为无线ac双链路冷备和热备配置案例

所谓的冷备和热备&#xff0c;冷备就是不用vrrp和hsb协议同步ap和用户信息&#xff0c;主的断了等七十五秒后&#xff0c;备的capwap和ap连接上去。 双链路冷备不用vrrp和hsb 双链路热备份只用hsb同步ap和用户信息&#xff0c;不用vrrp&#xff0c;两个ac可以不用在同一个二层…