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

【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.kler.cn/a/273046.html

相关文章:

  • Redis- 内核的分配内存限制的警告“WARNING Memory overcommit must be enabled!”
  • CSS中常见的两列布局、三列布局、百分比和多行多列布局!
  • 【折腾一上午】Java POI 导出 Excel 自适应列宽行高
  • Lucene分析器的详细使用(5)
  • SQL拦截(二)InnerInterceptor
  • 微服务系列二:跨微服务请求优化,注册中心+OpenFeign
  • Linux:搭建ntp服务器
  • Python面试笔记
  • Vue.js+SpringBoot开发食品生产管理系统
  • 【GPT-SOVITS-02】GPT模块解析
  • Android APP启动优化
  • 18个惊艳的可视化大屏(第26辑):航空与运输业
  • 基于单片机的老人防丢系统设计
  • python 基础知识点(蓝桥杯python科目个人复习计划65)
  • yocto系列之针对从git仓库获取源代码编写recipe
  • 2024蓝桥杯每日一题(DFS)
  • 2024.2.28 校招 实习 内推 面经
  • 2024/3/14打卡棋子(14届蓝桥杯)——差分
  • 【Godot4.2】任意多边形或折线围绕任意点旋转
  • 【LAMMPS学习】二、LAMMPS安装(3)通过Conda/tarball/git安装LAMMPS
  • Git 仓库瘦身与 LFS 大文件存储
  • 面试 Java 并发编程八股文十问十答第十期
  • leetcode116填充每个节点的下一个右侧节点指针
  • 证书转换 .cer .pfx 证书转换成 .pem证书
  • mysql笔记:15. 事务和锁
  • IT系统可观测性