Unity点击物体后,移动到物体所在位置

2023-11-09

Unity点击物体后,移动到物体所在位置

方法一:OnMouse检测(需要Collider组件)

脚本挂在被点击的物体上

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

/// <summary>
/// 缺点:要挂在所有需要被检测的物体上
/// </summary>
public class Move01 : MonoBehaviour
{
    public GameObject Player; //可以直接通过手动拖拽找到物体,也可以通过名字或tag查找

    private void Start()
    {
        //Player = GameObject.Find("Player"); //通过名字查找物体
        //Player = GameObject.FindWithTag("cube"); //通过tag查找物体
    }

    void OnMouseDown()
    {
        Player.transform.localPosition = this.transform.localPosition; //position是世界位置,localPosition是相对父节点的位置;如果物体没有父节点,localpositon和position没有区别;如果物体有父节点,用position
        Debug.Log("已移动");
    }
}

方法二: 射线检测(需要Collider组件)

脚本挂在角色控制器上

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

/// <summary>
/// 缺点:当场景中有大量物体时,会检测最近的物体,导致无法获取真正想要得到的物体
/// </summary>
public class Move02 : MonoBehaviour
{
    Ray ray;
    RaycastHit hit;
    GameObject obj;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                obj = hit.collider.gameObject;
                string name = obj.name;
                string tag = obj.tag;
                name = name.Trim(); //去掉名字前后的空格符
                tag = tag.Trim(); //去掉tag前后的空格符
                
                //通过名字判断是否是想要的路标物体
                if (obj.name == "Cube")
                {
                    this.transform.localPosition = obj.transform.localPosition;
                }
                //通过tag判断是否是想要的路标物体
                if (obj.tag.Equals("cube"))
                {
                    this.transform.localPosition = obj.transform.localPosition;
                }
            }
        }
    }
}

改进:使用Raycast中的LayerMask

  1. 创建“cube”层
  2. 将想要被检测的物体放入该层
    layer
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 使用Raycast中的LayerMask,处理多物体场景中的特定物体检测
/// </summary>
public class move : MonoBehaviour
{
    Ray ray;
    RaycastHit hit;
    GameObject obj;
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("检测到点击");
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 100, LayerMask.GetMask("cube")))
            {
                obj = hit.collider.gameObject;
                this.transform.position =obj.transform.position;
            }
        }
    }
}

方法三:EventTrigger 物体动态事件监听

3.1、 3D物体事件监听

  1. 在相机上挂Physics Raycaster组件
    Physics Raycaster组件
  2. 检查是否有EventSystem
    EventSystem
  3. 将脚本挂在被点击的物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 缺点:要挂在所有需要被检测的物体上
/// </summary>
public class mouseDown : MonoBehaviour
{
    private GameObject Player;
    private void Start()
    {
        Player = GameObject.Find("Player");
    }

    public void MyClick()
    {
        Player.transform.position = this.transform.position;
    }
}

  1. 添加组件Event Trigger组件
    Event Trigger组件

3.2、 世界UI世界监听

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity点击物体后,移动到物体所在位置 的相关文章

  • c#获取cpu序列号

  • UE4 解决景深效果闪烁问题

    原因 1 模型的垂直竖线 造成抗锯齿算法对竖线的渲染计算 处于一种不稳定的状态 因此闪烁 解决办法 使用LOD 用贴图去替代线条模型 2 材质的法线贴图 当法线贴图含有垂直竖线的纹理效果 也会造成闪烁 比如这种幕墙材质 解决办法 关闭或动态
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • Unity打包WebGL的优化常用操作?

    1 贴图部分优化 如果贴图格式时2048 在不影响画面效果的情况下 改成1024或者5 12 还可以缩小包体 2 压缩和解压缩问题 WebGL打包的时候分三种压缩情况 gzip 比Brotli文件打 但打包快 http和https都支持 B
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 基于GMap.Net的地图解决方案

    一 地图的加载与显示 关于GMap的介绍与使用可以看我以前的文章 GMap Net开发之在WinForm和WPF中使用GMap Net地图插件 GMap Net是 Net下一个地图控件 可以基于Http协议加载各个公司的地图 如Google
  • 如何设计一个秒杀系统

    什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到 对于电商网站中一些稀缺或者特价商品 电商网站一般会在约定时间点对其进行限量销售 因为这些商品的特殊性 会吸引大量用户前来抢购 并且会在约定的时间点同时在
  • MinGW-W64下载、配置教程

    注意 本文采用的操作系统 Windows7 64位 注 文章原创 配图的知乎水印也是笔者账号 一 下载与配置 使用浏览器访问 MinGW W64 图1 找到图2所示区域 根据需求点击一项 下载压缩包 图2 解压下载的压缩包 内容如图3 图3
  • JAVA练习34-验证回文串

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 题目 验证回文串 1 题目描述 2 思路与代码 2 1 思路 2 2 代码 总结 前言 提示 这里可以添加本文要记录的大概内容 1月29日练习内容 提示 以下
  • Gin的使用

    Gin框架 gin框架路由使用前缀树 路由注册的过程是构造前缀树的过程 路由匹配的过程就是查找前缀树的过程 gin框架的中间件函数和处理函数是以切片形式的调用链条存在的 我们可以顺序调用也可以借助c Next 方法实现嵌套调用 借助c Se
  • BigDecimal比较大小问题

    BigDecimal比较大小 这个类是Java里精确计算的类 下面说一下两个BigDecimal对象大小 相等的判断 1比较对象是否相等 一般的对象用于等于 但是BigDecimal比较特殊 举个例子 BigDecimal a1 new B
  • android 下拉状态栏(SystemUI)常见修改记录

    摘要 下拉状态栏 1 下拉状态栏的亮度条 frameworks base packages SystemUI src com android systemui qs QSPanel javamBrightnessView对应布局文件 qui
  • 爬虫实例8(os模块的用法)

    import requests import os url https ss3 bdstatic com 70cFv8Sh Q1YnxGkpoWK1HF6hhy it u 460770515 1829173594 fm 26 gp 0 jp
  • 什么是数字水印

    经常有文章把数字签名和数字水印 傻傻分不清 那今天就介绍一下数字水印 一 数字水印技术原理 数字水印是一种信息隐藏技术 它利用人体感官的限制 将数字信号 如图像 文字 符号 数字等一切可以作为标记 标识的信息与原始数据 如图像 音频 视频数
  • 替代for循环,让Python代码更pythonic

    通常如下使用场景中会用到 for 循环 在一个序列来提取一些信息 从一个序列生成另一个序列 写 for 已成习惯 幸运的是 Python 已经有很多工具可以帮助你完成这些工作 你只需要转移你的思路 并以不同的角度来思考它 通过避免编写 fo
  • Pycharm更换python解释器

    Pycharm工程如何更换pycharm解析器 Mac Pycharm gt Preferences 然后会出来如下界面 Windows file gt Default Settings
  • leetcode 300. 最长递增子序列

    2023 8 23 本题也是dp算法解决的经典题型 dp i 的含义 数组前i个元素的最长递增子序列长度 不多说 直接上代码 class Solution public int lengthOfLIS vector
  • 为什么Git用SHA做版本控制,而非像SVN用int数字或者是时间戳

    在分布式领域中 做的最出色的莫过于Git 而Git主要强大之处就在于运用sha作为版本控制的算法 而许多分布式架构的项目也都意义效仿 而sha算法为什么如此神奇呢 SHA是什么 百度百科定义是 安全散列算法 英语 Secure Hash A
  • pycharm+gitee安装与配置

    下载安装 1 下载地址 https www jetbrains com pycharm download section windows 选择这个免费版进行安装 2 自定义安装路径 3 根据自己的需求选择项 点击下一步 一步步的安装下去就行
  • please select a valid python interpreter(请选择一个解释器)

    1 更改Pycharm的设置 打开settings CTRL ALT S 或者file gt settings 2 在查询框中输interpreter 进行查询 3 选择界面右边上的配置按钮 右击选择add local 4 选择system
  • Linux服务器成功安装CUDA11.3和cudnn

    说在前面 NVIDIA的显卡驱动与CUDA的版本并不是严格的一一对应关系 CUDA实际上也只是一个工具包 我们可以根据自己的需求进行安装 即可以安装多个CUDA版本 同时CUDNN是一个SDK 专门用于神经网络的加速包 它与CUDA也没有严
  • 巨细!Python爬虫详解

    Python技术 爬虫 又称为网页蜘蛛 网络机器人 在 FOAF 社区中间 更经常的称为网页追逐者 它是一种按照一定的规则 自动地抓取网络信息的程序或者脚本 如果我们把互联网比作一张大的蜘蛛网 那一台计算机上的数据便是蜘蛛网上的一个猎物 而
  • 第十一章 GetAway服务网关详解

    目录 一 服务网关使用背景 二 服务网关的种类和区别 三 Gateway 简介 优点 缺点 Gateway组成 三 快速入门案例 1 创建网关服务 引入 GetAway 依赖 2 创建主类 3 配置GetAway网关服务 4 创建 订单服务
  • PyCharm安装教程,图文教程(超详细)

    作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 PyCharm 一 PyCharm下载安装 二 Python下载安装 三 创建项目
  • Unity点击物体后,移动到物体所在位置

    Unity点击物体后 移动到物体所在位置 方法一 OnMouse检测 需要Collider组件 脚本挂在被点击的物体上 using System Collections Generic using UnityEngine using Uni