unity中物体移动的几种方式

2023-11-14

1. 简介

    在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。

2. 通过Transform组件移动物体

    Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。


2.1 Transform.Translate

       该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤。但是该方式游戏物体发生碰撞的条件有些不同,使用时请注意

       public function Translate(translation: Vector3, relativeTo: Space = Space.Self): void;

2.2 Vector3.Lerp, Vector3.Slerp, Vector3.MoveTowards

      Vector3 既可以表示三维空间中的一个点,也可以表示一个向量。这三个方法均为插值方法, Lerp为线性插值,Slerp为球形插值, MoveTowards在Lerp的基础上增加了限制最大速度功能。 当需要从指定A点移动到B点时,可以考虑时候这些方法。

2.3 Vector3.SmoothDamp

      该方法是可以平滑的从A逐渐移动到B点,并且可以控制速度,最常见的用法是相机跟随目标。

2.4 Transform.position

       有时重新赋值position能更快实现我们的目标。

3. 通过Rigidbody组件移动物体

    Rigidbody组件用于模拟物体的物理状态,比如物体受重力影响,物体被碰撞后的击飞等等。

    注意:关于Rigidbody的调用均应放在FixedUpdate方法中,该方法会在每一次执行物理模拟前被调用。

3.1 Rigidbody.velocity

     设置刚体速度可以让物体运动并且忽略静摩擦力,这会让物体快速从静止状态进入运动状态。

3.2 Rigidbody.AddForce

      给刚体添加一个方向的力,这种方式适合模拟物体在外力的作用下的运动状态。

3.3 Rigidbody.MovePosition

      刚体受到物理约束的情况下,移动到指定点。

4. 通过CharacterController组件移动物体

     CharacterController用于控制第一人称或第三人称角色的运动,使用这种方式可以模拟人的一些行为,比如限制角色爬坡的最大斜度,步伐的高度等。

4.1 CharacterController.SimpleMove

     用于模拟简单运动,并且自动应用重力,返回值表示角色当前是否着地。

4.2 CharacterController.Move

     模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。


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

unity中物体移动的几种方式 的相关文章

  • JAVA:@Builder注解深层特性(笔记)

    JAVA 记录 Builder的特性 Builder原理 在构造方法A上引用时 相当于建造一个构造器G 构造器G只可以构造A方法参数列表里的字段 在类上引用时 相当于给这个类一个全参构造方法 然后给这个全参构造方法加上 Builder注解

随机推荐

  • Docker Compose 配置文件 docker-compose.yml 详解

    Docker Compose配置文件是Docker Compose的核心 用于定义服务 网络和数据卷 格式为YAML 默认路径为 docker compose yml 可以使用 yml或 yaml扩展名 目前Compose配置文件格式的最新
  • Conformal lec learning7: abort points

    在conformal lec 检查等价性的过程中 遇到abort points 是比较头疼的 可以通过以下方式避免
  • 使用split.js库实现网页布局分割

    前言 在开发网页应用程序时 经常需要将页面的布局分割成多个区域 使得用户可以同时查看不同的内容 split js是一个简单易用的JavaScript库 可以帮助我们实现灵活的网页布局分割 以及可拖动和调整大小的分割器 引入split js库
  • Java与Scala的转换

    一 java Map 转为 scala collection immutable Map public static
  • PyQt5,PyQt-tools安装与Qt designer,pyuic,qrcToPy的配置

    一 PyQt5 PyQt tools的安装 PyQt5的安装 可以在pycharm里安装PyQt5 PyQt tools和PyQt Designer库 或者在命令行里用pip命令安装 安装完成测试一下 from PyQt5 Qt impor
  • 坚持了139天,剪辑视频拿到12w,手把手教会你如何去操作

    如果你能熬得了夜 吃得了苦 大家也可以来跟我一起做视频剪辑 把我的方法拿去认真操作 相信你也可以做到 也想要通过做自媒体赚取一份收入 却没有方向的小伙伴们可以给大周点赞并扣 8 大周会把整理好的新手指南分享给你们 接下来就分享具体的操作方法
  • sql查看和更新某个表的某个字段

    学了一点sql新知识 给某个表的某个字段添加一个新的值 查看表里某个字段的值 SELECT FROM TableFields WHERE TableFieldID 表名 字段名 更新字段的存储 UPDATE TableFields SET
  • upf+vcs仿真

    要做upf vcs的联合仿真的话 首先需要写好upf文件 其中有两个方面 1 需要修改makefile 1 tb文件改为 sv模式 2 在makefile中注意修改了 sv需要在加上 sverilog 3 加上 vcs upf lt 路径
  • FIND_IN_SET

    FIND IN SET str strlist str 要查询的字符串 strlist 字段名 参数以 分隔 如 1 2 6 8 查询字段 strlist 中包含 str 的结果 返回结果为null或记录 假如字符串str在由N个子链组成的
  • 【NLP】3 种强大的长文本摘要方法和实例

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Python 全栈系列220 Tornado的服务搭建

    说明 想法变的真快 本来是没打算用Tornado的 主要是想节约时间 但是现在看来不用还是不行 目前用gevent flask部署的时候 启动多核的worker似乎存在问题 另外 有很多内部基础的数据服务 其实并不需要flask的各种组件
  • stata解决内生性问题--样本选择

    目录 简单介绍 1 内生性 2 为什么要解决内生性问题 3 内生性问题产生的原因 4 例子 代码 简洁版 代码 详细分析版 结果 简单介绍 1 内生性 x与误差项有相关关系 2 为什么要解决内生性问题 内生性会破坏参数估计的 一致性 参数估
  • 沁恒ch32V208处理器开发(四)串口通信

    目录 串口资源 资源配置 同步模式 单线半双工模式 中断 DMA 串口的初始化 串口通信的实现 串口资源 资源配置 CH32V208 系列 是基于 RISC V 指令架构设计的 32 位 RISC 内核 MCU 根据封装的不同 可用的USA
  • 永磁同步电机的矢量控制策略(十四)一一一位置环的仿真

    14 永磁同步电机的矢量控制策略 十四 14 1 永磁同步电机的三闭环矢量控制 之前的博客文章中所述的双闭环矢量控制系统 电流环属于内环 其作用是使电机电流跟随给定电流 速度环输出 的变化 对系统响应的快速性与准确性有着重要影响 转速环属于
  • git提交代码报 vue-cli-service lint found some errors. Please fix them and try committing again

    原因 问过度娘在提交代码的时候 它会在提交代码前运行做代码风格检查 如果代码不符合相应规则 则报错 解决 直接把pre commit文件删除 进入项目 git文件夹 hooks 删除 如何你的项目文件夹下没有找到 git文件夹 检查一下看看
  • java sheet 设置名称_Java 实现 给Excel模板赋值(直接打开表格赋值或者用自定义了名称的单元格(一块区域)赋值)...

    1 需求 直接打开表格填充数据到模板后的效果可能出现表格重叠的问题 用自定义名称填充数据到模板后表格互不影响 Excel自身有一个 定义名称 的功能 1 可以给任意的单元格定义一个名称 比如定义某个单元格的名称为 testA1 如何给这个名
  • IO复用进化史

    IO复用的历史和多进程一样长 Linux很早就提供了select系统调用 可以在一个进程内维护1024个连接 后来加入poll系统调用 poll做了一系列改进后解决了1024个连接的限制问题 可以维持任意数量的连接 但是select和pol
  • QT信槽编程,QObject::connect: Cannot connect (null)报错的两种成因

    connect ui btnHelp SIGNAL clicked this SLOT OnBtnHelp connect ui btnHelp SIGNAL toggled bool this SLOT OnBtnHelpChanged
  • Python的10个常用代码简写技术

    今天我给大家整理了一份10个程序员常用的代码简写技术 看懂一种是入门 全懂就是大神 你能知道几个呢 1 三元操作符 当想写if else语句时 使用三元操作符来代替 const x 20 let answer if x gt 10 简写 c
  • unity中物体移动的几种方式

    1 简介 在unity3d中 有多种方式可以改变物体的坐标 实现移动的目的 其本质是每帧修改物体的position 2 通过Transform组件移动物体 Transform 组件用于描述物体在空间中的状态 它包括 位置 position