当前位置: 首页 > news >正文

Unity 鼠标拖拽3D物体跟随移动的方法

之前我们研究过UI拖拽跟随鼠标移动的方法:https://blog.csdn.net/mr_five55/article/details/135562325

但是该方法不适合3D场景。

假如我们要通过鼠标拖拽3D物体移动,那么可以使用以下控制方法:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DragObject : MonoBehaviour
{private Vector3 offset;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}// 3D场景移动物体private void OnMouseDown(){// 由于物体为3维世界坐标,鼠标的坐标是2维屏幕坐标,所以需要进行相关坐标转换,此处涉及3个步骤// 1、先把物体的世界坐标转换成3维屏幕坐标,再获取物体的三维屏幕坐标的Z轴坐标:Camera.main.WorldToScreenPoint(transform.position).z// 2、把鼠标的2维坐标转换成3维世界坐标// 3、当前物体位置减去鼠标3维世界坐标,获取它们之间的距离offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(transform.position).z));}private void OnMouseDrag(){// 把物体与鼠标的距离加上鼠标坐标并赋予物体即让物体移动到坐标位置Vector3 newPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(transform.position).z)) + offset;transform.position = newPosition;}
}

效果杠杠的哦。

Unity 鼠标拖拽3D物体跟随移动的方法

http://www.lryc.cn/news/324253.html

相关文章:

  • 数据分析-Pandas分类数据的类别排序和顺序
  • 利用 Claude 3 on Amazon Bedrock 和 Streamlit 的“终极组合”,开发智能对话体验
  • Golang基础 Label标签与goto跳转
  • 二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】
  • 活用C语言之宏定义应用大全
  • 【源码】I.MX6ULL移植OpenCV
  • pytorch深度学习——dataset(附数据集下载)
  • springboot+vue考试管理系统
  • 自动驾驶建图--道路边缘生成方案探讨
  • 图片编辑器中实现文件上传的三种方式和二进制流及文件头校验文件类型
  • 深度学习,CRNN+CTC和Attention OCR你更青睐哪一种?
  • 飞桨AI应用@riscv OpenKylin
  • 在MongoDB建模1对N关系的基本方法
  • C++基础之运算符重载(十一)
  • 初始Java篇(JavaSE基础语法)(2)(逻辑控制)
  • 家用路由器和企业路由器的区别?
  • Gin简介(Go web基础知识)
  • HBase的Bulk Load流程
  • vue中图片替换 遇到问题
  • Android 观察者模式
  • 阿里云部署MySQL、Redis、RocketMQ、Nacos集群
  • day05-店铺营业状态设置
  • 哈希表(c++)
  • C#基础-标识符命名规则
  • Zabbix Web界面中文汉化
  • esp32CAM环境搭建(arduino+MicroPython+thonny+固件)
  • Spring Boot从入门到实战
  • Spring Boot(七十一):整合RateLimiter实现接口限流
  • 通过jsDelivr实现Github的图床CDN加速
  • Kafka系列之:Connect 中的错误报告