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

这篇具有很好参考价值的文章主要介绍了【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎


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

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

👨‍💻 本文由 秩沅 原创

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


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

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

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

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

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



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


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



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


【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

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

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

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


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

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

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

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


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

  • 纯碎位置的实时更新:

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

 void LateUpdate()
    {
        offset = cube.position - transform.position;
        transform.position +=offset;
           
    }
  • 使用Translate的实时更新–TransLate是物体朝某一个方向的移动
    这时不适合于镜头的移动,只适合物体的移动,也就是说适合放在FixedUpdate里面,不适合放在LateUpdate里面,原因如下
    【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

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

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


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


【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

也就是键盘进行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 ;
    }

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

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


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


【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎


    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);
    }

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎


👨‍💻7.刚体力的瞬移


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

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解),【0到1】Unity脚本游戏开发宝典,# unity实战基础,UnityALL_In,unity,游戏引擎

 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

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

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


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-792575.html

到了这里,关于【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity】如何优雅地移动物体-8个方法

    在游戏开发中,如何移动物体?是我们需要思考的事情。 Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。 那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。 仓库地址 如何优雅

    2023年04月09日
    浏览(42)
  • Unity 通过键盘鼠标控制物体移动、旋转、缩放的方法

    在Unity中,使用键盘ADWS键控制物体移动,通过鼠标左键控制物体旋转,鼠标中键控制物体缩放是再常见不过的方法。 方法如下:  效果如下:Unity 通过键盘鼠标控制物体移动、旋转、缩放_哔哩哔哩_bilibili

    2024年02月03日
    浏览(51)
  • [Unity] 使用Mathf函数实现平滑移动物体的7种方法

     Unity中要利用Mathf中的函数实现物体的平滑运动,有以下7种方法: Mathf.SmoothDamp、Mathf.Lerp、Mathf.SmoothStep三个方法非常相似,分别使用三个方法移动同一个物体的效果如图所示: 可以看出,三者均是先快后慢,但SmoothDamp方法会有一些卡顿;SmoothStep与Lerp比较起来,Mathf.Smooth

    2024年02月12日
    浏览(52)
  • 【笔记】Unity2D角色和物体移动的几种方法

    在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记 变量声明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移动速度var speed=2; ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。 #键盘输入,这里举一个只x轴上移动的例子,y轴同

    2023年04月08日
    浏览(58)
  • Unity之用代码移动物体(平滑移动)

    因为移动的起点和终点都是不确定,所以这里用代码进行实现而不是动画(试过动画,但是发现无法成功添加clip) 物体移动常用的有两个方法,一个是Mathf.MoveTowards,一个是Mathf.Lerp,他们都用于值的平滑过渡 Mathf.MoveTowards          current:起点位置         target:目

    2024年02月07日
    浏览(41)
  • Unity点击物体后,移动到物体所在位置

    脚本挂在被点击的物体上 脚本挂在角色控制器上 改进:使用Raycast中的LayerMask 创建“cube”层 将想要被检测的物体放入该层 3.1、 3D物体事件监听 在相机上挂Physics Raycaster组件 检查是否有EventSystem 将脚本挂在被点击的物体上 添加组件Event Trigger组件 3.2、 世界UI世界监听

    2024年02月07日
    浏览(52)
  • 【Unity】摄像机跟随鼠标移动以物体为中心旋转 物体根据视线方向移动

    描述 实现摄像机根据鼠标移动跟随物体旋转,以摄像机前物体为中心,摄像机围绕物体旋转,并使摄像机时刻指向物体 实现效果 Unity 组件设置 Camera 组件设置 Body 组件设置 实现代码 CameraRotateMove.cs 摄像机跟随和旋转 move_better.cs 物体根据按键移动

    2024年02月08日
    浏览(91)
  • Unity中的物体移动

    局部坐标系(Transform.localPosition)是指当前物体相对于父物体的位置,会受到父物体的影响。 世界坐标系(Transform.Position)是指当前物体在世界空间坐标系中的位置,不受父物体影响。 若该物体有父类,则二者的关系为:该物体的世界坐标=该物体父类的世界坐标+该物体的局

    2024年02月03日
    浏览(56)
  • Unity 控制物体移动

    目录 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController以及碰撞检测 一、相关代码展示 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController 以及碰撞检测 注:使用时首先要给物体添加CharacterC

    2024年02月13日
    浏览(48)
  • unity物体移动至指定位置

    在Unity中,物体的坐标分为 局部坐标 和 世界坐标 。 局部坐标是相对于物体的父对象的坐标系,而世界坐标是相对于场景的整体坐标系。 举个例子 将下面代码挂载到Sphere上 输出结果如下 如果想让物体运动到指定的位置,通常情况下是参考世界坐标系。因为世界坐标系是整

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包