【Unity】Transform、Rigidbody、CharacterController移动

前言

在使用Unity开发的时候,移动是最最基础的一个需求,我来给大家简单的讲一下Unity中的几种常见的移动方法。

1.Transform移动

Transform移动就是修改物体的position
①修改位置
这里要注意:坐标分为世界坐标和本地坐标

   //将物体的世界坐标修改为(1,1,1)transform.position = new Vector3(1, 1, 1);//将物体的本地坐标修改为(2,2,2)transform.localPosition = new Vector3(2, 2, 2);

②使用Translate()函数

    private void Update(){//以恒定的速度向x方向移动transform.Translate(2.0f* Time.deltaTime, 0, 0);}

Time.deltatime 是两帧之间的间隔。因为设备无法保证稳定的帧率,物体移动速度就会因帧率出现不同。所以要加Time.deltatime 确保每秒移动同样的距离

2.Rigidbody刚体移动

Rigidbody赋予了游戏对象一些运动学上的属性,模拟真实世界的运动,包括 质量、阻力、重力、 碰撞检测、 速度、受力、爆炸力等
刚体移动首先要添加Rigidbody组件。
在这里插入图片描述Rigidbody属性
Mass: 物体的质量
Drag: 物体受到的空气阻力大小
Angular Drag: 物体旋转时,受到的旋转阻力大小
Use Gravity: 如果启用,物体将受到重力的影响
Is Kinematic: 如果启用,物体将不会由物理引擎驱动,只能由 Transform 组件操作
Interpolate: 物体运动位置的插值器
Collision Detection: 碰撞检测类型,当看到物体由于运动太快而穿墙时,可以增强碰撞检测频率
Constraints: 对刚体运动和旋转的限制,限制物体运动时在某个坐标轴上的分量保持不变

①使用velocity

	public Rigidbody mRigidbody;void FixedUpdate(){mRigidbody.velocity = new Vector3(100 * Time.fixedDeltaTime, 0, 0);}

②使用AddForce

 	public Rigidbody mRigidbody;void Update(){mRigidbody.AddForce(100 * Time.fixedDeltaTime, 0, 0);}

③使用MovePosition

   public Rigidbody mRigidbody;void Update(){mRigidbody.MovePosition(transform.position + Vector3.forward * 0.2f);}

3.CharacterController移动

刚体移动首先要添加CharacterController组件。
在这里插入图片描述代码示例:

	public float m_Speed = 5;public CharacterController controller;void Start(){controller = this.gameObject.GetComponent<CharacterController>();}void Update(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");Vector3 dir = new Vector3(h * m_Speed, 0, v * m_Speed);controller.SimpleMove(dir);}

CharacterController有用两种移动实现方式,SimpleMove和Move。
① SimpleMove

  • 不受Y轴速度影响,自带重力效果,无法实现跳跃功能
  • 返回值为Bool,当角色接触地面返回True,反之为False。
  • SimpleMove方法用于角色简单的平面移动,它自动处理了角色与地面的碰撞检测和摩擦,但它不支持跳跃等垂直方向的动作

② Move

  • 无重力效果,自行实现重力,可做跳跃功能
  • 返回值为角色与物体碰撞的信息

4.总结

Transform:不带重力和碰撞,移动不受物理引擎控制。非单机的游戏基本都是使用Transform移动,因为位置都是服务器发送过来,然后客户端同步。

Rigidbody:适用于实现真实的物理行为,可以模拟重力、惯性等效果。

CharacterController:适用于控制角色的移动和碰撞检测,但不受物理引擎的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539229.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端给前端导出 数据excal表

pom <!-- 读取文档 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><…

机器学习-0X-神经网络

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中神经网络算法。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化接口实现 参考 机器学习定义 关于机…

【JavaScript 漫游】【036】CORS 通信总结

文章简介 CORS 是一个 W3C 标准&#xff0c;全称是“跨域资源共享”&#xff08;Cross-origin resource sharing&#xff09;。它允许浏览器向跨域的服务器&#xff0c;发出 XMLHttpRequest 请求&#xff0c;从而克服了 AJAX 只能同源使用的限制。 本篇文章为【JavaScript 漫…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

Opencascade基础教程(9):切换视图

1、切换视图 1、1 增加视图切换按钮&#xff0c;并添加消息响应函数。 void COCCDemoView::OnButtonFrontview() {//前视图m_View->SetProj(V3d_Yneg);m_View->FitAll(); }void COCCDemoView::OnButtonRearview() {//后视图m_View->SetProj(V3d_Ypos);m_View->Fit…

<JavaEE> 了解网络层协议 -- IP协议

目录 初识IP协议 什么是IP协议&#xff1f; IP协议中的基础概念 IP协议格式 图示 4bit版本号&#xff08;version&#xff09; 4bit头部长度&#xff08;headerlength&#xff09; 8bit服务类型&#xff08;TypeOfService&#xff09; 16bit总长度&#xff08;total l…

数据仓库原理(二)

目录 四、数据仓库的概念模型&#xff08;一&#xff09;多维数据模型&#xff08;二&#xff09;维度与粒度 五、数据仓库的逻辑模型&#xff08;一&#xff09;多维模型&#xff08;二&#xff09;星形模型&#xff08;三&#xff09;雪花模型 六、数据仓库的物理模型&#x…

吴恩达深度学习笔记:神经网络的编程基础2.9-2.14

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.9 逻辑回归中的梯度下降&#xff08;Logistic Regression Gradient Descent&#xff09; 第一门课&#xff…

RabbitMQ 模拟实现【五】:网络通信设计

文章目录 网络通信设计基于 TCP 自定义应用层协议channel参数服务器实现客户端实现 网络通信设计 基于 TCP 自定义应用层协议 Type 希望客户端能远程调用服务器的核心API&#xff0c;type就是描述调用哪一个API的Length 表示接下来的Payload的长度Payload 是真正需要用到的数据…

人工智能|机器学习——CURE聚类算法(层次聚类)

1.CURE聚类概述 绝大多数聚类算法或者擅长处理球形和相似大小的聚类&#xff0e;或者在存在孤立点时变得比较脆弱。CURE采用了一种新颖的层次聚类算法&#xff0e;该算法选择基于质心和基于代表对象方法之间的中间策略。它不同于单个质心或对象来代表一个类&#xff0c;而是选择…

【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】

错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化&#xff0c;随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID&#xff0c;用于BLDC速度控制 仿真平台为&#xff1a;MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例&#xff1a;