【Unity】检测鼠标点击位置是否有2D对象

news/2024/9/19 21:15:44 标签: unity, 游戏引擎, c#

在这里提供两种方案,一种是射线检测,另一种是非射线检测。

初始准备步骤:

  1. 创建2D对象(比如2D精灵)
  2. 给要被检测的2D对象添加2D碰撞体(必须是2D碰撞体
  3. 创建一个空对象,再创建一个检测脚本,将检测脚本挂载在这个空对象上
  4. 编写检测脚本

一、非射线检测的方式

using UnityEngine;

public class DragTest : MonoBehaviour
{
    private void Update() 
    {
        if(Input.GetKeyDown(KeyCode.Mouse0))
        {
            //将鼠标坐标转化为世界坐标
            Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            //定义一个2D碰撞体,读取Physics2D.OverlapPoint方法的检测数据
            Collider2D hitcollider = Physics2D.OverlapPoint(mousePos);
            if(hitcollider != null)
            {
                //打印出这个对象的tag名称
                Debug.Log(hitcollider.gameObject.tag);
            }
        }
    }
}

二、射线检测的方式

using UnityEngine;

public class DragTest : MonoBehaviour
{
    private void Update() 
    {
        if(Input.GetKeyDown(KeyCode.Mouse0))
        {
            //创建一条从屏幕射出的射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //获得射线检测命中到的目标
            RaycastHit2D hit = Physics2D.Raycast(ray.origin,ray.direction,Mathf.Infinity);
            if(hit.collider != null)
            {
                Debug.Log(hit.collider.gameObject.tag);
            }
        }
    }
}

三、特别注意

如果有多个2D物体重叠在一起,那么这两种检测方式的最终检测结果都是叠在最上方的2D物体


http://www.niftyadmin.cn/n/5666148.html

相关文章

简单题35-搜索插入位置(Java and Python)20240919

问题描述&#xff1a; Java&#xff1a; class Solution {public int searchInsert(int[] nums, int target) {int k 0;int i 0;while(i<nums.length){if(nums[i]target){return i;}if(nums[i]<target){k i1;}i;}return k;}}class Solution(object):def searchInsert(…

STM32MP157/linux驱动学习记录(二)

38.Linux INPUT 子系统实验 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件…

SRE实例的一些结构图

SRE实例的一些结构图 一&#xff1a;直播 二&#xff1a;技术复杂性和运维着力点 对运维质量和运维人员技能提出了更高的要求 如果一个屏幕上十几个窗口&#xff0c;各种刷屏&#xff0c;但却不彻底解决问题&#xff0c;这时就需要用更好的方式——自动化、系统化、工具化的…

【百日算法计划】:每日一题,见证成长(017)

题目 用栈来实现队列 思路1 入队直接入&#xff0c;出队用两个栈来回倒腾。 static class StackToQueue{Stack<Integer> stack new Stack<>();Stack<Integer> tmpStack new Stack<>(); //临时栈public StackToQueue(){}//入队 直接入public void…

[性能]RK芯片平台定时读取ISP延迟

在AI识别中一些高速场景下会比较敏感&#xff0c;ISP处理延迟会造成AI响应滞后&#xff0c;可以使用以下脚本来每隔1秒读取文件/proc/rkispp0&#xff1a; #!/bin/bashwhile true; docat /proc/rkispp0sleep 1 done将以上脚本保存为一个.sh文件&#xff08;例如read_rkispp0.s…

PHP 数组排序类型介绍

在PHP中&#xff0c;数组排序是一项常见且重要的操作&#xff0c;它允许开发者根据一定的规则对数组中的元素进行排序。PHP提供了多种数组排序函数&#xff0c;以适应不同的排序需求。这些函数包括基本的升序和降序排序&#xff0c;以及基于特定键值、自定义排序逻辑等的复杂排…

HAL库中的三种延时函数HAL_Delay、vTaskDelay和vTaskDelayUntil的区别

1、HAL_Delay() 阻塞型延时&#xff0c;实现方式是通过死循环方式实现的&#xff0c;不会释放掉cpu&#xff0c;会造成其他低优先级任务无法执行 2、vTaskDelay() 相对延时函数 void vTaskDelay(TickType_t xTicksToDelay); 相对延时函数:相对延时是指每次延时都是从任务执行…

测试开发基础——测试用例的设计

三、测试用例的设计 1. 什么是测试用例 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素。 设计测试用例原则一&#xff1a;测试用例中一个必需部分是对预期输出或结果进…