Unity物体移动的几种方式

这篇具有很好参考价值的文章主要介绍了Unity物体移动的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要是Vector3的内置函数以及CharacterController的Move

还有一个固定的每帧进行移动的操作文章来源地址https://www.toymoban.com/news/detail-664041.html

using UnityEngine;

public class MoveTest : MonoBehaviour
{
    //移动的目标
    private Transform _targetTrans = null;
    //移动的速度
    private float _moveSpeed = 0.1f;
    //移动到的目标位置
    private Vector3 _endPos = new Vector3(9, 0, 0);
    //是否移动结束
    private bool _isMoveEnd = false;
    private Vector3 _curSpeed;
    private CharacterController _ccCtrl = null;
    private Vector3 _updateMove = new Vector3(0.1f, 0, 0);
    //定义个结束的回调
    private delegate void MoveFinishedCallBack();
    private event MoveFinishedCallBack MoveFinishedEvent;

    void Start()
    {
        //查找出要移动的目标物体
        _targetTrans = transform.Find("Sphere");
        if (_targetTrans != null)
        {
            _ccCtrl = _targetTrans.GetComponent<CharacterController>();
            if (_ccCtrl == null)
            {
                _ccCtrl = _targetTrans.gameObject.AddComponent<CharacterController>();
            }
        }
        MoveFinishedEvent += OnMoveFinished;
    }

    void Update()
    {
        if (_targetTrans != null)
        {
            //1. 使用Translate进行移动
            //使用向量的长度来确定是否移动完成
            //if (_endPos.magnitude >= _targetTrans.position.magnitude && !_isMoveEnd)
            //{
            //    //沿X轴正向进行移动
            //    _targetTrans.Translate(Vector3.right * _moveSpeed);
            //}

            //2. 使用Lerp插值进行移动 [就是在两个位置之前,每次增加剩余距离的百分比]
            //  2.1 先快后慢的运动,因为每次插值之后,剩余的距离在变小
            //_targetTrans.position = Vector3.Lerp(_targetTrans.position, _endPos, 0.05f);
            //  2.2 匀速的移动  用移动的距离差来和时间相乘
            //float distance = 1 / ((_targetTrans.position - _endPos).magnitude);
            //_targetTrans.position = Vector3.Lerp(_targetTrans.position, _endPos, distance * 0.05f);

            //3. SmoothDamp平滑移动 [当前位置,目标位置,移动速度,移动时长]  有点类似于插值,但是是比较平滑的移动
            //_targetTrans.position = Vector3.SmoothDamp(_targetTrans.position, _endPos, ref _curSpeed, 1.0f);

            //4. 使用CharacterController进行移动 【参数就是每帧移动的距离】
            //_ccCtrl.Move(Vector3.right * 2 * Time.deltaTime);

            //5. 直接按每帧进行移动固定的位置
            if (_endPos.magnitude >= _targetTrans.position.magnitude && !_isMoveEnd)
            {
                _targetTrans.position += _updateMove;
            }

            //移动结束的判断
            if (!_isMoveEnd && _targetTrans.position.magnitude >= _endPos.magnitude)
            {
                _isMoveEnd = true;
                if (MoveFinishedEvent != null)
                {
                    MoveFinishedEvent();
                }
            }
        }
    }

    private void OnMoveFinished() 
    {
        Debug.Log("移动完成了,隐藏移动节点!");
        _targetTrans.gameObject.SetActive(false);
    }
}

到了这里,关于Unity物体移动的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理

    目录 Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、简单实现步骤 五、关键代码 附录: 一、不同平台使用宏区分路径加载 二、Unity3D中的资源路径 三、Unity3D各平台路径(包括手

    2024年01月19日
    浏览(54)
  • Unity面向新手,如何使物体移动,让物体自由的动起来。几种移动方案讲解

    在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验。而Unity中有多种移动方法,使用Transform,使用刚体Rigidbody,使用CharacterController,使用NavMesh导航系统等等等等。当然,对于新手来

    2024年02月08日
    浏览(36)
  • Unity——数据存储的几种方式

    PlayerPrefs适合用于 存储简单的键值对数据 存储的数据会在游戏关闭后依然保持,并且可以在不同场景之间共享,适合用于需要在游戏不同场景之间传递和保持的数据。 它利用key-value的方式将数据保存到本地,跟字典类似。然后通过代码进行保存、读取、更新操作。值得注意

    2024年02月03日
    浏览(32)
  • UNITY--读取Excel的几种方式

    目录 一.DLL插件读取 1.1.Excel存放位置 1.2.使用示例 1.3.Excel格式  1.4.输出显示  1.5.所需插件 二.Excel转成Asset文件,再进行读取 2.1Excel文件存放位置 2.2 编辑模式生成Asset文件,并保存到指定位置  2.3创建ExcelRead脚本,读取Excel内容 2.4 创建数据存储脚本 2.5  编辑器生成Asset 与属

    2024年01月20日
    浏览(40)
  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(34)
  • Unity按钮事件的几种绑定方式

    许久没有写C#代码了,对于一些东西自己给整忘了,在此记录下,方便以后自己查阅 获取到按钮组件,我是将代码挂载在其父节点上。 在代码中获取此按钮,并对他就进行绑定。一般都是使用的这类情况。 在脚本中写一个public函数,作为按钮的监听函数,在按钮的Inspector面

    2024年02月11日
    浏览(34)
  • Unity中获取游戏对象的几种方式

    在学习如何获取物体和组件时先明白说明什么是物体,组件和对象。 物体:unity中在层级显示的东西都可以叫做物体 组件:unity中提供了大量已经写好的组件,比如刚体,碰撞体等,自己 编写的脚本也是一种组件类 对象:挂载到物体上的脚本是一个实例化的组件,也就是一

    2024年01月17日
    浏览(24)
  • Unity中常用的几种读取本地文件方式

    使用的命名空间如下 using LitJson; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; using UnityEngine.Networking; 1、通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件 View Code 2、通过UnityWebRequest和StreamReader读取本地StreamingAssets文件夹中的Json文件 View Code  3、通

    2024年02月04日
    浏览(33)
  • Unity笔记:数据持久化的几种方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 数据库(如Sqlite) PlayerPrefs 存储的数据是 全局共享 的,它们存储在用户设备的本地存储中,并且可以被应用程序的所有部分访问。这意味着,无论在哪个场景、哪个脚本中,只要是同一个应用程序中的代码,都可以读取和修改 Playe

    2024年02月19日
    浏览(31)
  • Unity 常用的几种存档读档方式

    一、PlayerPrefs:数据持久化方案 常见的方法如下:  参考功能及代码: 通过单选框是否被勾选上,从而来决定是否播放背景音乐,代码如下: 二、二进制存储(字节流存储) 序列化:新建或打开一个二进制文件,通过二进制格式器将对象写入该二进制文件。 反序列化:打开

    2023年04月08日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包