unity物体移动至指定位置
物体坐标与物体移动
- 世界坐标与局部坐标之间的转换
- 物体移动至指定位置
- 需求
- 思路
- 注意
世界坐标与局部坐标之间的转换
在Unity中,物体的坐标分为局部坐标和世界坐标。
局部坐标是相对于物体的父对象的坐标系,而世界坐标是相对于场景的整体坐标系。
使用transform.position属性来获取物体在世界坐标系下的坐标。
使用transform.localPosition属性来获取物体在世界坐标系下的坐标。
使用transform.TransformPoint将局部坐标系转换为世界坐标系。
使用transform.InverseTransformPoint世界坐标系转换为局部坐标系。
举个例子
将下面代码挂载到Sphere上
public class Coordinate : MonoBehaviour
{public GameObject SomeThing;public Vector3 SomePoint;void Start(){Debug.Log("世界坐标:" + transform.position);Debug.Log("局部坐标:" + transform.localPosition);Debug.Log("当前坐标:" + SomePoint);Vector3 worldPoint = transform.TransformPoint(SomePoint);Debug.Log("局部坐标转为世界坐标:" + worldPoint);Vector3 localPoint = transform.InverseTransformPoint(worldPoint);Debug.Log("世界坐标转为局部坐标:" + localPoint);}
}
输出结果如下
如果想让物体运动到指定的位置,通常情况下是参考世界坐标系。因为世界坐标系是整个场景的坐标系,而局部坐标系是相对于物体的父对象的坐标系。假设想让物体移动到坐标为(x,y,z)的位置,参照世界坐标与局部坐标的物体运动代码如下:
// 世界坐标下运动
transform.position = new Vector3(x, y, z);
// 局部坐标下运动
transform.localPosition = new Vector3(x, y, z);
如果想要实现多个物体以相同的速度按照顺序移动到不同的位置,可以参考下一节。
物体移动至指定位置
需求
将一个由多个零部件组成的自定义模型导入unity中,希望实现该模型的部分拆卸过程。下面以共有11个拆卸步骤为例
思路
在网上找了很多资料,目前想到的办法有利用协程或动画播放的方法(这里只做了协程的方法,动画的等我学会再加上)
1、首先是自定义的模型的拆卸,因此需要知道哪些零部件需要先拆,哪些后拆。
2、还需要考虑碰撞等干涉情况,因此下面代码中有的零部件出现了多次。
3、将所有需要拆卸的零部件创建一个空父对象,下面这个代码就挂载到空父对象上。
4、利用GameObject.Find()函数,找到每个零部件,并放在一个数组里面,便于后续对每个零部件进行操作。
5、将每个零部件需要移动的指定位置与运动时间,同样放在另外两个数组里面。
6、零部件的移动,我使用的是DOTween插件中的DOLocalMove方法。
DOTween插件解析
注意
下面代码有待完善,如“每一步拆卸步骤所有的时间是不一样的,但速度应该是一样,这个我目前还不知道如何解决,只知道运动的位移相同的零件,其运动速度是一样的”
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class MoveTogether : MonoBehaviour
{//物体数组public GameObject[] objects;//物体名称数组public string[] Names;//目标位置数组public Vector3[] targetPositions;//运动时间数组public float[] moveTime;void Start(){Names = new string[]{ "一移动螺丝", "一移动螺丝", "中间部分", "铁片1螺丝","铁片1","铁片2螺丝","铁片2","铁片3螺丝","铁片3","整体下方", "整体下方" };objects = new GameObject[Names.Length];for (int i = 0; i < Names.Length; i++){objects[i] = GameObject.Find(Names[i]);}targetPositions = new Vector3[] { new Vector3(0f, 0f, -0.5f), //一移动螺丝向下new Vector3(3f, 0f, -0.5f), //一移动螺丝向右new Vector3(0f, 0f, -0.8f), //中间部分向下new Vector3(3f, 0f, 0f), //铁片1螺丝向外new Vector3(3f, 0f, 0f), //铁片1向外new Vector3(0f, -2f, 0f), //铁片2螺丝向外new Vector3(0f, -2f, 0f), //铁片2向外new Vector3(-3f, 0f, 0f), //铁片3螺丝向外new Vector3(-3f, 0f, 0f), //铁片3向外new Vector3(0f, 0f, -0.3f), //整体下方向下new Vector3(3f, 0f, -0.3f) }; //整体下方向右moveTime = new float[] { 1f,3f,2f,2f,2f,2f,2f,2f,2f,2f,3f };StartCoroutine(Spilt_Merge());}IEnumerator Spilt_Merge(){//StepA.transform.DOLocalMove(targetStepA1, moveSpeed).SetEase(Ease.Linear);for (int i = 0; i < objects.Length; i++){if (i > 0){yield return objects[i - 1].transform.DOLocalMove(targetPositions[i - 1], moveTime[i - 1]).WaitForCompletion();}yield return objects[i].transform.DOLocalMove(targetPositions[i], moveTime[i]).WaitForCompletion();} }
}
相关文章:

unity物体移动至指定位置
物体坐标与物体移动 世界坐标与局部坐标之间的转换物体移动至指定位置需求思路注意 世界坐标与局部坐标之间的转换 在Unity中,物体的坐标分为局部坐标和世界坐标。 局部坐标是相对于物体的父对象的坐标系,而世界坐标是相对于场景的整体坐标系。 使用tr…...

详解C#-static void Main(string[] args)
目录 简介: 举例: 输出结果:编辑 总结: 简介: 在C#中static void Main(string[] args)这个句话有什么作用,分别代表什么意思!! 这句话是入口函数的声明,指定了C#程序的入口点,并定义了一个名为”Mai…...

中大许少辉博士《乡村振兴战略下传统村落文化旅游设计》中国建筑工业出版社八一付梓。
中大许少辉博士《乡村振兴战略下传统村落文化旅游设计》中国建筑工业出版社八一付梓。...

Matplotlib数据可视化(五)
目录 1.绘制折线图 2.绘制散点图 3.绘制直方图 4.绘制饼图 5.绘制箱线图 1.绘制折线图 import matplotlib.pyplot as plt import numpy as np %matplotlib inline x np.arange(9) y np.sin(x) z np.cos(x) # marker数据点样式,linewidth线宽,li…...

Python爬虫——requests_post请求
import requests import jsonurl https://fanyi.baidu.com/sugheaders {User-Agent: ,Cookie: }data {kw: hello }response requests.post(url, data, headersheaders)content response.textobj json.loads(content.encode(utf-8)) print(obj)总结: post请求…...

excel 下载方法封装
1.首先需要拿到后端返回的URL下载地址 2.写个下载方法 // url 接口返回的下载地址。例如:https://cancer-research.oss-cn-beijing.aliyuncs.com/yuance-platform-permission/校内共享数据导入模板.xlsx // name 文件名称 例如: 校内共享数据导入模板 /…...

按日,周,月,季,年统计;获取对应的时间段
按日,周,月,季,年统计;获取对应的时间段 1.周实体类:WeekEntity.java package com.test.common.entity;import java.time.LocalDate;public class WeekEntity {private String day;/*** 开始日期**/privat…...

【eNSP】交换机(vlan和vlan间通信)
【eNSP】交换机(vlan和vlan间通信) 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器:它的作用可以简单的理解为将一些机器…...

2011年下半年 软件设计师 上午试卷2
博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...

Linux中安装MySQL8版本,安装MySQL步骤,MySQL8离线安装
Linux中安装MySQL8版本的步骤如下: 1.检查下libaio.so.1的位置 [roottdx ]# whereis libaio.so.1 libaio.so: /usr/lib64/libaio.so.1 如果没有找到该文件 (1).在线安装 [roottdx ]# yum install -y libaio (2).离线安装: 上传之后执行命令安装&#…...

MES生产管理系统如何与ERP系统集成
MES生产管理系统和ERP企业管理系统是制造企业信息化的重要组成部分,它们在生产管理、资源计划和业务流程等方面发挥着重要作用。实现MES与ERP系统的集成,可以更好地优化企业生产流程,提高生产效率和降低成本。本文将探讨MES管理系统解决方案如…...

Kafka如何保证消息⼀定能被消费
Kafka 通过多种机制来保证消息一定能被消费,从而实现数据的可靠性和持久性。 以下是一些常见的方法和策略来提高消息的可靠性: 复制机制: Kafka 使用了分区和副本的概念。每个分区可以有多个副本,分布在不同的 Broker 上。当消息…...

[USACO1.5] 八皇后 Checker Challenge
题目描述 一个如下的 6 x 6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列 2 4 6 1 3 5 来描述,第…...

【Mysql】MVCC版本机制的多并发
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...

Vue--》打造个性化医疗服务的医院预约系统(六)
今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关…...

Unity ARFoundation 配置工程 (Android)
注意: 1、AR Core是Google的产品,因为谷歌制裁华为,所以 有些 华为机可能不支持AR Core的软件; 2、手机在设置里搜索Google Play,看看是否已经安装上了,如果没有装此服务,去商城里搜索Google Pl…...

【广州虚拟现实开发】VR智能中控系统进一步提高VR教学管理水平
随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进了人们的生活。在教育领域,VR技术也得到了广泛的应用,尤其是在教学终端中控系统方面。那么,广州华锐互动开发的VR智能中控系统对学校有何益处呢? 首先,VR智…...

关于WordPress 的时间倒计时
点击跳转...

极光笔记 | 如何为您的业务开发和训练一个AI-BOT
生成式AI(Generative AI)是当今科技领域的前沿技术之一。随着数据量的不断增加和计算能力的不断提升,AI技术在企业和个人生活中的应用越来越广泛。AI-BOT(以下简称BOT)是生成式AI技术的其中一种重要的应用形式…...

如何给ELK日志加上索引
问题记录 1、遇到长流程的时候,日志记录是非常重要的。如何排查日志,可以在MDC中去put对应的值,这样就等于对你关心的关键字段加上了索引,在elk中可以通过该索引就能 容易排查到问题 logback的设置 可以参照: 【总体…...

elementUI遇到的问题记录
一、 组件:el-table 问题:使用动态数据创建多级表头后,刷新页面时,table行会串行,某些列丢失,图片列未显示图片 解决方案:给el-table增加key <el-table :key"${Matn.random()}${ite…...

计算机竞赛 协同过滤电影推荐系统
文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …...

网络综合布线实训室建设方案
一、网络综合布线系统概述 网络综合布线系统是为了满足数据通信需求而设计和建立的一套基础设施。它提供了数据传输、信号传输和电力供应的基础结构,支持各种网络设备和终端设备之间的连接。 网络综合布线系统通常包括以下组成部分: 1) 数据…...

【山河送书第七期】:《强化学习:原理与Python实战》揭秘大模型核心技术RLHF!
《强化学习:原理与Python实战》揭秘大模型核心技术RLHF! 一图书简介二RLHF是什么?三RLHF适用于哪些任务?四RLHF和其他构造奖励模型的方法相比有何优劣?五什么样的人类反馈才是好反馈?六如何减小人类反馈带来…...

LeetCode 400. 第 N 位数字——JAVA
题目描述: 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n 3 输出:3示例 2: 输入:n 11 输出࿱…...

解决生成式AI落地之困,亚马逊云科技提供完整解决方案
生成式AI技术无疑是当前最大的时代想象力之一。 资本、创业者、普通人都在涌入生成式AI里去一探究竟:“百模大战”连夜打响,融资规模连创新高,各种消费类产品概念不断涌现……根据Bloomberg Intelligence 的报告,2022年生成式AI 市…...

【5款登录验证校验】基于jquery实现的5款登录验证码组件(附完整源码)
文章目录 写在前面涉及知识点1、随机字母验证码1.1 效果1.2 实现源码 2、数字运算验证码2.1 效果2.2 实现源码 3、滑块验证码3.1 效果3.2 实现源码 4、图片补全验证码4.1 效果4.2 实现源码 5、顺序点选验证码5.1 效果5.2 实现源码 6、源码分享6.1 百度网盘6.2 123网盘6.3 邮箱留…...

数据结构的树存储结构
数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …...

linux--epoll
epoll 参考文献 https://www.cnblogs.com/lojunren/p/3856290.html https://www.51cto.com/article/717096.html linux下的I/O复用epoll详解 要深刻理解epoll,首先得了解epoll的三大关键要素:mmap、红黑树、链表。 IO多路复用 首先需要了解什么是IO多…...

async和await
一,基本使用 其实就是之前学过的异步函数,异步编程在函数前写一个ansyc,就转化为异步函数,返回的是一个promise对象,于是就可以使用await关键字,可以把异步函数写成同步函数的形式,极大地提高代…...