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

这篇具有很好参考价值的文章主要介绍了Unity点击物体后,移动到物体所在位置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文章来源地址https://www.toymoban.com/news/detail-472222.html

  1. 创建“cube”层
  2. 将想要被检测的物体放入该层
    Unity点击物体后,移动到物体所在位置
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组件
    Unity点击物体后,移动到物体所在位置
  2. 检查是否有EventSystem
    Unity点击物体后,移动到物体所在位置
  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组件
    Unity点击物体后,移动到物体所在位置

3.2、 世界UI世界监听

到了这里,关于Unity点击物体后,移动到物体所在位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动

    2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动 如果我们没有将鼠标点击位置转换为世界坐标系中的位置,而是直接将屏幕坐标系中的位置作为角色移动的目标位置,那么可能会发生以下两种情况: 角色会偏离目标位置 由于屏幕坐标系中的位置和世界坐标系中的位

    2024年02月06日
    浏览(77)
  • 秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)

    目录 预备知识 键盘控制物体移动事件 鼠标点击控制物体移动事件 鼠标移动的同时画彩色小球 预备知识 pygame的基本函数介绍 1.初始化函数,pygame的必备  pygame.init()   2.设置屏幕的大小 pygame.display.set_mode(size) //(长,宽) 3. 程序的命名 pygame.display.set_caption(\\\"string\\\") 4.屏幕的颜

    2023年04月08日
    浏览(45)
  • 【虚幻引擎】UE4/UE5鼠标点击事件实现物体移动

     在UE4/UE5中,引擎有它自己的一套框架体系,虚幻就是基于这一个框架体系来实现的。其中就有PlayerController(玩家控制器),玩家控制器中就有对鼠标的一系列设置,包括显示鼠标,允许点击事件等。  1.创建PlayerController,命名为MyPlayerController 2.打开MyPlayerController,勾选参数

    2024年02月10日
    浏览(105)
  • unity点击3D物体

    目录 一.OnMouse 二.射线检测(首先物体要有Collider 然后挂载脚本) 三.游戏物体 EventTrigger 物体动态事件监听 3.1 静态添加事件触发  3.2 动态添加事件触发  四.通过事件,实现接口IPointerClickHandler 添加一个脚本组件到你的3D物体上,这个脚本将处理点击事件并返回物体信息。例

    2024年02月07日
    浏览(43)
  • unity 点击3D物体

    1. 在场景中添加事件系统 2. 为主相机添加射线检测 3. 为物体挂载以下脚本,物体必须带碰撞体

    2024年02月06日
    浏览(33)
  • Unity之用代码移动物体(平滑移动)

    因为移动的起点和终点都是不确定,所以这里用代码进行实现而不是动画(试过动画,但是发现无法成功添加clip) 物体移动常用的有两个方法,一个是Mathf.MoveTowards,一个是Mathf.Lerp,他们都用于值的平滑过渡 Mathf.MoveTowards          current:起点位置         target:目

    2024年02月07日
    浏览(39)
  • unity点击场景内物体进行交互

    提示:本文展示点击事件,另有其他自行研究 前言 一、原理 二、使用步骤 1.使用前提 2.使用脚本 总结 很多情况下我们需要对场景内的物体进行交互,今天我们采用射线检测的方法进行点击。 例如:点击场景内的Cube 进行开始旋转 提示:以下是本篇文章正文内容,下面案例

    2024年02月11日
    浏览(63)
  • Threejs进阶之十:让模型移动到鼠标点击的指定位置

    上一节中我们实现了物体沿指定轨迹移动的动画效果,这一节我们来实现让模型移动到鼠标点击的制定位置的动画效果。 先看下实现后的最终效果 要实现上面的动画效果,我们需要通过以下步骤来实现 我们需要监听鼠标的点击事件,获取鼠标点击点相对浏览器可视区域左上

    2024年02月09日
    浏览(53)
  • unity手指、鼠标滑动实现物体360度旋转、点击按钮实现物体旋转

    先创建一个ObjectRotation 脚本 之后将该脚本拖动到需要转动的object上 因为如果每次都真机模拟回很麻烦,所以我加入了让鼠标代替手指滑动的脚本来代替手指输入 同样的也是先创建一个MouseRow 脚本 最后我还需要某笔画沿着坐标旋转,代码如下: 里面有我的其他参数,如果读

    2024年02月11日
    浏览(64)
  • 【Unity】摄像机跟随鼠标移动以物体为中心旋转 物体根据视线方向移动

    描述 实现摄像机根据鼠标移动跟随物体旋转,以摄像机前物体为中心,摄像机围绕物体旋转,并使摄像机时刻指向物体 实现效果 Unity 组件设置 Camera 组件设置 Body 组件设置 实现代码 CameraRotateMove.cs 摄像机跟随和旋转 move_better.cs 物体根据按键移动

    2024年02月08日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包