【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

news2024/11/27 1:15:18

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity每日一记


⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API

⭐相关文章:关于游戏剧情模式中用到的基础简单API

⭐相关文章:控制游戏人物移动的细节到底有多少?

⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)


文章目录

  • ⭐基于Unity中物体移动相关方法和API集锦⭐
    • 👨‍💻0.SmoothDamp先快后慢的移动
    • 👨‍💻1.MoveTowards匀速步频实现两点间的移动
    • 👨‍💻2.Lerp()差值实现镜头跟随移动
    • 👨‍💻3,实时更新位置的差值进行镜头的同步移动
    • 👨‍💻4.监听键盘进行实时位置更新
      • 妙用:监控键盘的移动---悬浮移动,上下有摆动
    • 👨‍💻5.translate与实时监听相配套
    • 👨‍💻6.刚体力进行牵引移动
    • 👨‍💻7.刚体力的瞬移
    • 👨‍💻8.通过控制Rigibody的速度来进行移动控制
    • 👨‍💻9.通过控制Rigibody的MovePosition来进行移动控制


⭐基于Unity中物体移动相关方法和API集锦⭐


👨‍💻0.SmoothDamp先快后慢的移动



👨‍💻1.MoveTowards匀速步频实现两点间的移动


在这里插入图片描述

这里的重点是匀速,实现两点间的移动

void FixedUpdate()
    {
        gameObject.transform .position =Vector3.MoveTowards(car.transform.position ,storn.transform.position,0.5f);
    }

👨‍💻2.Lerp()差值实现镜头跟随移动


  • 利用线性差值进行镜头的慢迁移

请添加图片描述

 void LateUpdate()
    {
   transform.position = Vector3.Lerp(transform.position, cube.position, Time.deltaTime);
  }

👨‍💻3,实时更新位置的差值进行镜头的同步移动


其实最简单的方法就直接把相机作为组件挂载上去即可

  • 纯碎位置的实时更新:

请添加图片描述

 void LateUpdate()
    {
        offset = cube.position - transform.position;
        transform.position +=offset;
           
    }
  • 使用Translate的实时更新–TransLate是物体朝某一个方向的移动
    这时不适合于镜头的移动,只适合物体的移动,也就是说适合放在FixedUpdate里面,不适合放在LateUpdate里面,原因如下
    请添加图片描述

此时的镜头的抖动效果并不是地形的原因,而是每帧时位置累加的原因
但是放在FixedUpdate里面就不会出现该情况

所以实现镜头的同步跟随纯粹的位置实时即可,或者直接将相机组件作为移动物体的子组件,保持固定位置


👨‍💻4.监听键盘进行实时位置更新


在这里插入图片描述

也就是键盘进行wsad移动

 void FixedUpdate()
    {
        
        a = gameObject.transform.position.x+Input.GetAxis("Horizontal");
        b = gameObject.transform.position.y;
        c = gameObject.transform.position.z + Input.GetAxis("Vertical"); 
        //此时z轴一直是固定值,c作为y轴的参数后,移动距离只能在[-1,1]之间变化
        move = new Vector3(a,b,c);
        gameObject.transform.position = move ;
    }

妙用:监控键盘的移动—悬浮移动,上下有摆动


  void FixedUpdate()
    {
        
        a = transform.position.x+Input.GetAxis("Horizontal");
        c = transform.position.z + Input.GetAxis("Vertical"); 
        //此时z轴一直是固定值,c作为y轴的参数后,移动距离只能在[-1,1]之间变化
        move = new Vector3(a,c,b);
        transform.position = move ;
    }

在这里插入图片描述

重点在于z轴在固定区域进行上下移动,原因为c的参数是固定的因为z轴未作变化,所以y轴一直都是在不变的z轴位置上进行键盘监听,而范围刚好是是[-1,1]


👨‍💻5.translate与实时监听相配套


在这里插入图片描述


    private void Update()
    {
        //坦克的移动 = 大小*方向
        transform.Translate(Input.GetAxis("Vertical") *Vector3.forward*moveSpeed *Time.deltaTime );
        //坦克的旋转 = 大小*轴向
        transform.Rotate(Input.GetAxis("Horizontal") *Vector3.up *RotateSpeed *Time .deltaTime );
        //头部炮管的旋转 = 大小*轴向
        Head.transform.Rotate(Input.GetAxis ("Mouse X") *Vector3.up*HeadSpeed*Time .deltaTime );
        //左键发射炮弹
        if(Input.GetMouseButtonDown(0))
        {
            Fire();
        }
    }

    public override void Fire() 
    {
        throw new System.NotImplementedException();
    }
}


👨‍💻6.刚体力进行牵引移动


前提是牵引力要大于物体的质量

 void Update()
    {
        cc.AddForce(0 ,0 ,10f);
    }

请添加图片描述


👨‍💻7.刚体力的瞬移


将物体瞬间移动到指定位置的坐标,所以前提得获取指定位置得坐标

在这里插入图片描述

 private void FixedUpdate()
    {
     xx.MovePosition(Vector2 (1,0) );
    }

👨‍💻8.通过控制Rigibody的速度来进行移动控制


[SerializeField] private float moveSpeed_X;
[SerializeField] private float moveSpeed_Y;
private Rigidbody2D rigidbody2D;
private void Start()
{
    //获取挂载脚本的物体的刚体组件
    rigidbody2D = GetComponent<Rigidbody2D>();
}
private void Update()
{
    //水平方向
    float horizontal = Input.GetAxis("Horizontal");
    //竖直方向
    float vertical = Input.GetAxis("Vertical");
    rigidbody2D.velocity=new Vector2 (horizontal*moveSpeed_X*Time.deltaTime, vertical* moveSpeed_Y * Time.deltaTime);
    //也可以只改变x或y的值
    rigidbody2D.velocity = new Vector2(horizontal * moveSpeed_X * Time.deltaTime, rigidbody2D.velocity.y);
    rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, vertical * moveSpeed_Y * Time.deltaTime);
}


👨‍💻9.通过控制Rigibody的MovePosition来进行移动控制


    private float vertical;
    private float horizontal;

    private Rigidbody rigidbody;  //玩家的刚体组件
    private Vector3 moveDerictor; //移动的方向
    public  float  velocity = 1f;     //移动的速度

    private void Awake()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        vertical   =  Input.GetAxis("Vertical") ;
        horizontal =  Input.GetAxis("Horizontal") ;

        if(Input.GetAxis("Vertical")!= 0 || Input.GetAxis("Horizontal")!= 0)
        {
            moveDerictor = new Vector3(horizontal, 0, vertical);
            moveDerictor = moveDerictor.normalized;   //将方向变成单位向量
            rigidbody.MovePosition( transform .position + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
        }
    }


⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API

⭐相关文章:关于游戏剧情模式中用到的基础简单API

⭐相关文章:控制游戏人物移动的细节到底有多少?

⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于python解析mf4中二维信号数据的注意事项

python解析mf4中的信号数据一般用np.ndarray存储&#xff0c;但是mf4中的一个信号有时不一定是一维数据&#xff0c;有时会是一个二维的&#xff0c;没错&#xff0c;就是一个信号数据就是二维的&#xff0c;这时候&#xff0c;np数组的每个元素也是一个数组&#xff0c;这个时…

Docker support for NVIDIA GPU Accelerated Computing on WSL 2

Docker support for NVIDIA GPU Accelerated Computing on WSL 2 0. 背景1. 安装 Docker Desktop2. 配置 Docker Desktop3. WLS Ubuntu 配置4. 安装 Docker-ce5. 安装 NVIDIA Container Toolkit6. 配置 Docker7. 运行一个 Sample Workload 0. 背景 今天尝试一下 NVIDIA GPU 在…

服装店收银系统不只是收银 还需要线上商城和线上批发

一个综合性的服装店收银系统可以结合线上商城和线上批发功能&#xff0c;提供以下特点和优势&#xff1a; 线上商城&#xff1a;将服装店的商品信息同步到线上商城平台&#xff0c;让顾客可以通过网站或移动应用程序浏览和购买商品。线上商城可以实现在线支付、订单跟踪、售后服…

Redis的集群模式:主从 哨兵 分片集群

基于Redis集群解决单机Redis存在的问题&#xff0c;在之前学Redis一直都是单节点部署 单机或单节点Redis存在的四大问题&#xff1a; 数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 > 利用Redis数据持久化的功能将数据写入磁盘并发能力问题…

机器学习的分类与经典算法

机器学习算法按照学习方式分类&#xff0c;可以分为有监督学习&#xff08;Supervised Learning&#xff09;、无监督学习&#xff08;Unsupervised Learning&#xff09;、半监督学习&#xff08;Semi-supervised Learning&#xff09;、强化学习&#xff08;Reinforcement Le…

【LMM 004】LLaVA-RLHF:用事实增强的 RLHF 对齐大型多模态模型

论文标题&#xff1a;Aligning Large Multimodal Models with Factually Augmented RLHF 论文作者&#xff1a;Zhiqing Sun, Sheng Shen, Shengcao Cao, Haotian Liu, Chunyuan Li, Yikang Shen, Chuang Gan, Liang-Yan Gui, Yu-Xiong Wang, Yiming Yang, Kurt Keutzer, Trevor…

树莓派4B-Python使用PyCharm的SSH协议在电脑上远程编辑程序

目录 前言一、pycharm的选择二、添加SSH的解释器使用总结 前言 树莓派的性能始终有限&#xff0c;不好安装与使用高级一点的程序编辑器&#xff0c;如果只用thonny的话&#xff0c;本人用得不习惯&#xff0c;还不如PyCharm&#xff0c;所以想着能不能用电脑中的pycharm来编写…

软件测试面试总结,备战金三银四

测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。 兼容的类型&#xff0c;如果细分的话&#x…

【现代信息检索】国科大何苯老师现代信息检索课程作业 —— 第三次作业

1 docID判断 1判断 2100200311411510610710810901100111111211 表 1 评判情况 表 1 1 1 中是两个判定人员基于某个信息需求对 12 12 12 个文档进行相关性判定的结果&#xff08;0 不相关&#xff0c;1 相关&#xff09;。假定我们开发了一个 IR 系统&#xff0c;针对该…

【C语言】大小端字节序详解

文章目录 前言引入大小端字节序大小端字节序的定义为什么会出现大小端之分示例&#xff1a;设计一个小程序来判断当前机器的字节序改进写法&#xff08;利用联合体成员共用同一块内存空间的特点&#xff09; 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&…

假两件风衣外套,你喜欢吗?

这款假两件设计的连帽风衣外套,,姐妹们喜欢吗? 宽松版型对身材包容性很强&#xff0c;韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳&#xff0c;想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节&#xff0c;防风保暖 这件风衣也很好搭配&a…

【C++】命名空间、输入输出、缺省参数和函数重载详解

文章目录 前言命名空间命名空间的定义命名空间的使用 C输入输出缺省参数缺省参数定义缺省参数分类 函数重载函数重载的概念函数名修饰规则extern "C"的使用 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; C 是一门强大而灵活的编程语言…

linux释放交换空间-Swap

确保剩余内存比swap内存空间大&#xff0c;再执行以下操作&#xff0c;否则会宕机&#xff01; 查看swap分区 swapon -s 会查看到你的swap分区位置 停止swap分区 停止swap分区是将swap内存释放到实际内存中 swapoff /dev/dm-1开启swap分区 swap分区内存成功释放到实际内…

ant-design-vue的form表单全局禁用不生效

文章目录 一、问题二、解决2.1、4.0之前的版本2.2、4.0开始的版本 三、最后 一、问题 ​ 实际使用ant-design-vue在开发表单的时候或许会遇到编辑与查看的需求&#xff0c;但是查看的时候表单不允许编辑&#xff0c;ant-design-vue的官方是没有像element一样提供全局disabled属…

message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogra

第一步&#xff1a;修改 project.config.json 文件 "packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./miniprogram/"}], "packNpmManually": true 第二步&#xff1a;…

Linux--批量自动装机

实验环境 随着某公司业务不断发展&#xff0c;服务器主机的数量也迅速增长&#xff0c;对于功能变更或新采购的服务器&#xff0c; 需要重新安装CentOS7操作系统&#xff0c;为了提高服务器装机效率&#xff0c;要求基于PXE网络实现全自动无人值 守批量安装。 需求描述 > 服…

[蓝桥 2023] 位乘积计数

问题描述 给定两个正整数 n 和 m&#xff0c;请你计算出&#xff0c;从 1到 n 的所有整数中&#xff0c;满足每一位上的数字乘积小于等于 m 的数字的个数。 例如&#xff0c;当 n12&#xff0c;m3 时&#xff0c;满足条件的数字有 1,2,3,10,11,12 共 6 个。 输入格式 输出格…

TCP中的三次握手和四次挥手

TCP中的连接和断开可以说是在面试中经常被问到的问题之一&#xff0c;正好有空就总结一下&#xff0c;首先回顾一下TCP的相关知识点 1. TCP的基础知识 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。面向连接的&#xff0c;指的就是在两个进程发送数据…

Pandas教程(四)—— 分层索引及数据联合

1.分层索引 分层索引就是在一个轴上拥有多个&#xff08;两个及以上&#xff09;索引级别&#xff0c;能以低维度形式处理高维度数据。 行索引有两层 1.1 分层索引的创建 1.1.1 方式一&#xff1a;直接设置 1&#xff09;在创建series、dataframe或读取文件时时&#xff0c;行…

《深入理解JAVA虚拟机笔记》垃圾回收器

JVM 判定 Java 对象是否为垃圾的方法 引用计数算法 很多教科书判断对象是否存活的算法是这样的: 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为…