• 控制游戏人物移动的细节到底有多少?


    在这里插入图片描述


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

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

    👨‍💻 本文由 秩沅 原创

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

    🅰️推荐文章


    【Unityc#专题篇】之c#系统化大礼包】

    【unity数据持久化】数据管理类_PlayerPrfs

    【unity本站最全系列】unity常用API大全一篇文章足以
    在这里插入图片描述

    ①移动的速度无法加以匀速控制

    那我们就用Time.delaTime
    图片:
    Alt

    ②左右的转向动画无法和左右按键相同

    那我们就用Input监听按钮来实现
    Alt
    animi.CrossFade()方法重载参数越小,动画过渡越快,当然也要取消Has Exit time 的勾选
    Alt

    ③动画无法和人物相应的方向所匹配

    那我们先判断游戏人物的朝向,gameObject.transform.localScale.x
    Alt

    上代码

    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    //--------------------------------
    //--------创建人:秩沅-----------
    //--------功能作用:实现游戏对象移动和相应动画的切换  ----------
    //---------------------------------
    
    public class Move: MonoBehaviour
    {
        float a,b,S;
        Animator anim;
    
        // Start is called before the first frame update
        void Start()
        {
            anim = GetComponent<Animator>();
        }
    
        // Update is called once per frame
        void Update()
        {
            S = Input.GetAxisRaw("Horizontal");
            a += S * Time.deltaTime;
            b = gameObject.transform.localPosition.y;
            gameObject.transform.localPosition = new Vector2(a, b);
            //行走动画的切换,右方
            if (Input.GetKeyDown(KeyCode.D))
            {
                //当按键的方向和它的朝向不一致的时候,即可变向
                if (gameObject.transform.localScale.x < 0)
                {
                    float c, d;
                    c = -gameObject.transform.localScale.x;
                    d = gameObject.transform.localScale.y;
                    gameObject.transform.localScale = new Vector2(c, d);
                }
                anim.CrossFade("Walk",0.00000001f);
            }
            else if(Input.GetKeyUp(KeyCode.D))
            {
                anim.CrossFade("Idel", 0.00000001f);
            }
            //行走动画的切换,左方
            if (Input.GetKeyDown(KeyCode.A))
            {
                if (gameObject.transform.localScale.x > 0)
                {
                    float c, d;
                    c = -gameObject.transform.localScale.x;
                    d = gameObject.transform.localScale.y;
                    gameObject.transform.localScale = new Vector2(c, d);
                }
                anim.CrossFade("Walk", 0.00000001f);
            }
            else if (Input.GetKeyUp(KeyCode.A))
            {
                anim.CrossFade("Idel", 0.00000001f);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    👍每天一学


    👨‍💻十大常见的生命函数


    👨‍💻Reset()://重置函数,


    调用情况和时间:
    编译器不运行的情况下 和 使用脚本组件Reset功能的时候, 挂脚本的时候

    调用次数: 1次


    👨‍💻 Awake(); //苏醒函数


    调用情况和时间:

    1.点击运行的时候

    2.组件从失灵到激活的时候,但只调用一次

    3.Instantiate方法调用的时候

    调用次数: 1次


    👨‍💻OnEnable(); //组件调用函数


    调用情况和时间: 组件从失灵到激活的时候,可多次实现

    调用次数:只要组件有失灵到激活的状态就可调用 ,


    👨‍💻Strat():


    调用情况和时间: 当游戏物体被激活,或者脚本组件被激活时调用 , (点击运行的时候也是会被激活)

    调用次数: 1次


    👨‍💻FixedUpdate(每帧)


    一般用作物理更新

    调用情况和时间: FixedUpdate一般适用在相关物理引擎中。它的频 率是0.02秒,是固定的。

    调用次数: 大概每秒50次左右、

    FixedUpdate & Update & LateUpdate的 区别详解


    👨‍💻UpData(每帧) ;


    一般用作游戏逻辑更新 update取决于电脑显卡的性能,好的话,快,不行的话就慢,所以相比Fixed Update它具有随机性。

    调用情况和时间: 在以上生命周期函数之后,每帧调用一次

    调用次数: 大概每秒60次左右

    变量赋值生效顺序:

    变量声明直接赋值 > 检视面板赋值 > Awake > Enable > 外部赋值 > Start


    👨‍💻LateUpate(每帧):


    一般用作相机更新 它的执行顺序在update的后面,一般适用于相机的跟随,物体运动在update中,相机跟随在LateUpdate,这样会减少误差,避免出现不必要的瑕疵。

    调用情况和时间: 在Update调用之后,并且也是每秒60帧左右(适用于物体移动后的视角跟随)

    调用次数: 大概每秒60次左右


    👨‍💻OnGUI(每帧)


    • 它一般与界面化,渲染,UI等有关,实时执行,比如想在幕布上弄个按钮button

    👨‍💻OnDisable():


    调用情况和时间: 和OnEnable差不多,但是Disable是组件从完好到失活的状态, (相当于关闭组件的时候)

    调用次数: 组件从激活到失灵的时候调用(二者前提是在游戏运行的时候)


    👨‍💻OnApplicationQuit()


    调用情况和时间: 当所有游戏物体退出时调用,适用于打包的时候

    调用次数: 满足以上情况便调用


    👨‍💻OnDestroy();


    调用情况和时间: 适用于物体的销毁,删除,以及游戏的停止退出时

    调用次数: 满足以上情况便调用

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

  • 相关阅读:
    Compose进度条
    使用Python进行健身手表数据分析
    QT Day2
    vue2中,使用sortablejs组件和vuedraggable实现拖拽排序功能
    软件开发人员的三条职业路径
    Redhat(3)-Bash-Shell-正则表达式
    C#在.NET Windows窗体应用中使用LINQtoSQL
    cwe_checker初识别
    ShardingSphere数据分片
    写论文时,不知道如何检验正态分布?
  • 原文地址:https://blog.csdn.net/m0_64128218/article/details/127838483