【Unity学习笔记】Animation、Input类

2023-11-11

Animation

Animation View

•通过动画视图可以直接创建和修改动画片段(Animation Clips)。
•显示动画视图:Window—Animation。

创建动画片段

•为物体添加Animation组件。
•在动画视图中创建片段。
在这里插入图片描述

录制动画片段

•录制步骤:

  1. 点击录制按钮,开始录制动画。
  2. 添加关键帧Add Property,选择组件类型。
  3. 选择关键帧,调整时间点。
  4. 在Scene 或Inspector 面板设置属性。
  5. 点击录制按钮,结束录制动画。
    •任何组件以及材质的属性都可进行动画处理,即使是自定 义脚本组件的公共变量。
时间线

在这里插入图片描述

Animation 组件属性

•动画Animation:当前动画。
•动画列表Animations:可以从脚本访问的动画列表。
•自动播放Play Automatically:启动游戏时自动播放的动画。

动画片段属性

•包裹模式Wrap Mode:动画结束后的处理方式。
–默认Default,使用动画剪辑中的处理方法;
–播放一次Once,播放到头后停止;
–循环播放Loop,播放到头后再重头播放;
–乒乓播放PingPong,播放到头后再反向播放;
–固定永久Clamp Forever,播放到头后永远播放最后一 帧;

常用API函数

•bool isPlay=animation.isPlaying;
•bool isPlay=animation.IsPlaying(“动画名”);
•animation.Play(“动画名”); //正常播放
•animation.PlayQueued(“动画名”); //在前一个动画播放完成之后直接播放下一个动画
•animation.CrossFade(“动画名”); //在一定时间内淡入名称为name的动画并淡出其他动画
•animation[“动画名”].speed = 5; //speed=-1 时 倒序播放
•animation[“动画名”].wrapMode
= WrapMode.PingPong;
•animation[“动画名”].length;//当前动画总长度
•animation[“动画名”].time; //当前动画播放到第几帧

练习:录制门开关动画
public class AnimationScript : MonoBehaviour
{
    public bool doorState=false;
    private Animation anim;
    public string animName = "AnimationDemo1";//以后万一animation改名了只改这里就行了
    private void Start()
    {
        anim = GetComponent<Animation>();
    }
    //点击当前物体时执行
    private void OnMouseDown()
    {
        if(doorState)
        {
            //开门操作0---》1
            //关门操作 反着播
            if(anim.isPlaying==false)
               //从最后开始
               anim[animName].time = anim[animName].length;
            //倒序播放
            anim[animName].speed = -1;
        }
        else
        {
            anim[animName].speed = 1;
        }
        anim.Play();
        doorState = !doorState;
    }
}

Input类

什么是Input 类
•包装了输入功能的类,可以读取输入管理器中设置的按键, 以及访问移动设备的多点触控或加速感应数据。
建议在Update中监测用户的输入。

鼠标输入

•当指定的鼠标按钮被按下时返回true
(一直按下一直返回true)
bool result=Input.GetMouseButton(0);
•在用户按下指定鼠标按键的第一帧返回true
(一直按下只在第一帧返回true)
bool result= Input. GetMouseButtonDown(0);
•在用户释放指定鼠标按键的第一帧返回true
bool result= Input. GetMouseButtonUp(0);
•按钮值设定:
0对应左键,1对应右键,2对应中键。

获取键盘输入

•当通过名称指定的按键被用户按住时返回true
bool result=Input.GetKey(KeyCode.A);
•当用户按下指定名称按键时的那一帧返回true
bool result=Input. GetKeyDown(KeyCode.A);
•在用户释放给定名称按键的那一帧返回true
bool result=Input. GetKeyUp(KeyCode.A);

练习

按下B的状态下按W

void Update(){
if (Input.GetKey(KeyCode.B) && Input.GetKey(KeyCodeDown.W))//这样可以只监测1次
            Debug.Log("Jump");
}
 

狙击枪功能实现
通过鼠标右键,实现摄像机镜头缩放

1、如何渐变:放到update()里
2、缩放匀减速渐变:Mathf.Lerp(起点,终点,变换比例)
3、缩放等级变化
//两个等级来回切换(缩放等级不变)

  void Update1()
    {
        if (Input.GetMouseButtonDown(1))
        {
            isFar = !isFar;
          // Far();
        }
        if (isFar)
        {
            //拉远 由20--》60
            //由快到慢,无限接近终点(不可能等于终点)
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 60, 0.1f);
            if (Mathf.Abs(cam.fieldOfView - 60) < 0.01)
                cam.fieldOfView = 60;
        }
        else//拉近 由60--》20
        {
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 20, 0.1f);
            if (Mathf.Abs(cam.fieldOfView - 20) < 0.01)
                cam.fieldOfView = 20;
        }  
    }

//多等级来回切换(缩放等级随需求变化)

public float[] zoomLevel;//在不确定数组长度的情况下可以不用new,改变时可在面板直接改
    public int index=-1;
void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
             //index=index>=zoomLevel.Length-1?0:index;
            index = (index + 1) % zoomLevel.Length;
            cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoomLevel[index], 0.1f);
            if (Mathf.Abs(zoomLevel[index] - 60) < 0.01)
                zoomLevel[index] = 60;
        }      
    }

InputManager

什么是InputManager?
•即输入管理器Edit—Project Settings—Input
•使用脚本通过虚拟轴名称获取自定义键的输入。
•玩家可以在游戏启动时根据个人喜好对虚拟轴进行修改。

知识点

1、虚拟按钮有多少个可以自己修改
2、1个虚拟按钮可以绑定四个真实按键

参数

在这里插入图片描述

Descriptive Name
游戏加载界面中,正向按键的详细描述。
•Descriptive Negative Name:
游戏加载界面中,反向按键的详细描述。
Negative Button:该按钮会给轴发送一个负值。
Positive Button:该按钮会给轴发送一个正值。
Alt Negative Button:给轴发送负值的另一个按钮。
Alt Positive Button:给轴发送正值的另一个按钮。
•Gravity:()输入复位的速度,仅用于类型为键/鼠标的按键。
•*Dead:任何小于该值的输入值(不论正负值)都会被视为0, 用于摇杆。
•Sensitivity:(即,摁下的速度)灵敏度,对于键盘输入,该值越大则响应时间 越快,该值越小则越平滑。对于鼠标输入,设置该值会对鼠 标的实际移动距离按比例缩放。
•Snap:如果启用该设置,当轴收到反向的输入信号时,轴 的数值会立即置为0,否则会缓慢的应用反向信号值。仅用 于键/鼠标输入。
•Invert:启用该参数可以让正向按钮发送负值,反向按钮发送正值。

Type类型
–键/鼠标(Key / Mouse) ,
–鼠标移动和滚轮(Mouse Movement),
–摇杆(Joystick Axis) 。
Axis:设备的输入轴(摇杆,鼠标,手柄等)
•*Joy Num:设置使用哪个摇杆。默认是接收所有摇杆的输入。仅用于输入轴和非按键

常用虚拟摁扭

horizonal 默认右为正
Vertical 默认上为正
Jump 摁下Space为正
MouseX 获取鼠标左右移动的方向、速度 大于往右且速度越大。
Mouse ScrollWhell 获取滑动的鼠标滚轮

API 获取虚拟轴

•boolresult=Input. GetButton(“虚拟轴名”);
•boolresult=Input. GetButtonDown(“虚拟轴名”);
•boolresult=Input. GetButtonUp(“虚拟轴名”);
*//以上三个只能判断:该虚拟摁扭是否被摁下

//下面两个可以判断摁下虚拟按钮的是哪一方向*
•float value=Input.GetAxis(“虚拟轴名”);
//返回-1。。。-0.9XX。。-0.8XXX。。。0.。。0.1XX。。。
•float value=Input.GetAxisRaw(“虚拟轴名”);
//只返回-1、0、1

练习 控制摄像机、游戏对象

•1. 鼠标垂直移动使摄像机上下旋转,
鼠标水平移动使摄像机左右旋转。
•2. 键盘垂直输入使飞机前后移动,
键盘水平输入使飞机左右移动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity学习笔记】Animation、Input类 的相关文章

  • MMD相关制作

    1 导入可转换mmd和vmd 动作数据 的插件 导入后unity中为 2 导入模型和vmd和音频 3 在unity中点击模型右边弹出的协议全打勾并应用 4 其中的mmd动作数据转换成功 点击人物把rig下第一个选择Huamoid点击应用 再
  • MRTK-Unity简单入门

    前期工作 1 切换生成平台 UWP 2 Microsoft Mixed Reality Feature Tool导入和配置资源 Mixed Reality Toolkit Foundation 混合现实工具包基础 包是唯一的包 必须将它导入
  • Unity ILRuntime Debugger使用及常见问题

    目录 前言 1 安装 2 使用 3 常见问题 前言 ILRuntime支持在VS中断点调试 下面说一下ILRuntime Debugger的使用及常见问题 1 安装 需要下载对应版本的ILRuntime Debugger VS插件 我是在U
  • 【Unity】第三人称射击游戏开发过程之瞄准状态设计(TPS.S.P1)

    Unity 第三人称射击游戏开发过程之瞄准状态设计 TPS S P1 设计整体的结构与模式 瞄准状态的设计 瞄准相机 瞄准状态 瞄准时的鼠标移动速度限制 瞄准点的处理 角色在瞄准状态下的旋转 瞄准时的移动速度限制 总结 代码 这篇文章开始
  • Unity Shader 学习 004-Shader 调试 平台差异性 第三方调试工具

    文章目录 学习时间 学习产出 1 调试Shader 1 1 我们打开FrameDebug窗口 1 2 通过FrameDebug窗口查看我们shader渲染目标的状态 2 平台差异性 2 1 抗锯齿 2 2 DX平台定义变量更严格 3 第三方
  • Unity 动态修改宏定义

    宏定义可以方便的区分出不同情况下使用的代码 比较经典的就是 UNITY EDITOR 这类 if UNITY EDITOR Debug Log 当前是编辑器环境 else Debug Log 当前不是编辑器环境 endif 开发者同样可以自
  • Unity 回合制战斗系统(中级篇)

    项目文件找出来了 老版本的脚本有报错 我在新版2019 4 21f1c1下解决了报错 战斗场景可以正常跑的 需要的同学点下面地址下载 关注就行啦不用积分 祝大家都早日学成 项目包下载 上一篇文章里实现了较为初级的回合制战斗系统 仅限与1v1
  • MVC模式下的untiy

    所有类的基类 例如 Object类是所有类的基类 其他任何类型都直接或间接派生自object 你自定义一个类型 那么它自动隐式继承object 迭代的定义 迭代是重复反馈过程的活动 其目的通常是为了逼近所需目标或结果 每一次对过程的重复称为
  • Unity初学者对物体移动的总结

    Unity小白笔记文章 请大家多多指教 关于Unity3D控制物体移动的常用方法 首先控制物体移动即控制物体的空间坐标变化 在这里首先我们要知道Input输入事件 一般大家先想到的都是按一个按键去控制物体移动 Unity里也给我们提供了这种
  • unity学习之怪物名称血条

    欢迎来到unity学习 unity培训 unity企业培训教育专区 这里有很多U3D资源 U3D培训视频 我们致力于打造业内unity3d培训 学习第一品牌 人物的名称与血条的绘制方法很简单 但是我们需要解决的问题是如何在3D世界中寻找合适
  • Unity实现UI在屏幕边缘跟随并指向视野外敌人

    最终效果 实现 心急的小伙伴可以直接跳到文章末尾查看最终代码 如果有问题再来看下思路 首先我们需要确定实现思路 我想到的方案是将玩家和敌人的世界坐标转换为UI坐标 然后求玩家和敌人坐标的线段与Canvas边界的交点即为箭头坐标 下面是求出交
  • UnityAnimator游戏运行后动画不播放

    问题 动画预览正常 运行后观察Animator正常执行动画 但是场景中没有播放动画 解决方法 将Animator的CullingMode改为AlwaysAnimate
  • unity打开除主菜单其他地方黑屏或白屏与unityHub安装unity简介

    unity打开除主菜单其他地方黑屏或白屏 新安装完成unity后 解决与原因 缘由 新安装完成unity后 打开unity进入项目后 只显示出主菜单栏 其他为白屏或黑屏 如下图 解决与原因 具体原因没仔细去查百度了一下 可以是时区的设置问题
  • unity物体四种移动方法总结

    目录 一 通过修改位置来实现移动 二 通过物理系统实现位移 三 通过输入控制物体移动 一 通过修改位置来实现移动 利用修改Transform组件的position的两种常用方法 1 使用Translate 函数 2 直接指定新的位置 将上述
  • NGUI的学习

    一 导入和创建UIROOT 1 导入Ngui 导入哪个都可以 推荐第一个 2点击NGUI Options Reset prefabs ToolBar 插入背景prefab创建了UIROOT和摄像机及背景 二 UI Label 的使用 1 选
  • Vuforia的各种Target的简单介绍(包括地面识别)

    Vuforia的各种Target的简单介绍 包括地面识别 前言 Vuforia的两种识别分类 1 需要特定目标的识别 2 不需要特定目标的识别 上边两种的优缺点 基于优缺点进行的阿应用场景推荐 需要目标的类型 上传你的目标到服务器 不需要目
  • Unity处决动画实现思路

    前言 不只是处决动画 只要是需要多个动画目标配合的都可以参考下面的思路 方案一 去除掉动画的位移部分 xz 在合适的时机移动到固定的位置双方同时播放动画 比如实现下图中狼和鹿的捕猎动画 我的做法是在要开始播放处决动画之前先让狼位移到固定位置
  • Unity 使用LineRenderer连接2个物体

    1 在Hierarchy面板中创建2个GameObject A和B 这就是希望连接的2个物体 2 同理创建1个EmptyObject C 挂上LineRenderer组件 记得给Materials赋值 3 创建1个新的C 脚本LineMan
  • Unity 3D input.GetAxis用法

    input GetAxis 用法 GetAxis Mouse X GetAxis Mouse Y GetAxis Mouse ScrollWheel GetAxis Vertical GetAxis Horizontal GetAxis 是
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触

随机推荐

  • 【Python学习笔记2】Python网络爬虫的异常处理

    本文信息主要来源于韦玮老师的 精通python网络爬虫 仅作为个人学习笔记 通过python库函数urllib request去爬取网页时 遇到的异常主要时URL类和网页类的错误 python已提供URLError类和HTTPError类来
  • Ado.Net总结

    ADO NET总结 ADO NET 是在 NET 平台上访问数据库的组件 它是以 ODBC Open Database Connectivity 技术的方式来访问数据库的一种技术 ADO NET常用命名空间 命名空间 数据提供程序 Syst
  • 多输入多输出

    多输入多输出 MATLAB实现GRU门控循环单元多输入多输出 目录 多输入多输出 MATLAB实现GRU门控循环单元多输入多输出 预测效果 基本介绍 程序设计 往期精彩 参考资料 预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入
  • spark SQL配置连接Hive Metastore 3.1.2

    Hive Metastore作为元数据管理中心 支持多种计算引擎的读取操作 例如Flink Presto Spark等 本文讲述通过spark SQL配置连接Hive Metastore 并以3 1 2版本为例 通过Spark连接Hive
  • HTML <progress> 标签

    实例 正在进行的下载
  • kali 破解压缩包密码

    一 提取加密压缩包的哈希值 zip2john 文件名 gt hash txt zip2john 文件名 能提取出文件的哈希值 然后我们通过重定向 将它写入一个文档中 二 利用工具对提取到的哈希值进行破解 john hash txt 然后就能
  • windows11安装微软商店里的ubuntu报错,已解决

    1 问题情况 安装微软商店的Ubuntu系统 安装完成后打开开始菜单的Ubuntu图标 初始化过程中卡住 点击界面下方的展开按钮有文字提示报错 报错提示内容为 Installing this may take a few minutes W
  • 京东抢购服务高并发实践

    声明 本位来自京东张开涛的微信公众号 kaitao 1234567 授权CSDN转载 如需转载请联系作者 作者 张子良 京东高级开发工程师 在京东负责抢购后端服务系统架构和开发工作 责编 钱曙光 关注架构和算法领域 寻求报道或者投稿请发邮件
  • eclipse与Mysql数据库是否连接的检验

    先去下载与Mysql数据库版本匹配的架包 然后导入到项目中 在这里我用的是Mysql8 0 Mysql8 0的驱动类名是 com mysql cj jdbc Driver 首先新建一个Demo类 然后进行数据库的连接即检验 代码如下 pac
  • Java架构直通车——基于数据库for update实现分布式锁

    文章目录 使用数据库解决超卖问题 非分布式 分为三步 原始方法 合并二 三步 使用update行锁使操作下沉到数据库 合并一 二 三步 使用方法锁 优化 使用块锁 使用数据库解决分布式超卖问题 主要原理 解决方案 解决库存超卖问题 可以另扣
  • 转帖:C++大师Lippman:我对中国程序员的忠告

    天极网特稿 记者 宋保强 C 语言的创立者 斯坦 利普曼 Stan Lippman 9月17日参加了在北京召开的微软技术大会Tech Ed2004并做了 The C Binding Integrating a Static and dyna
  • 嵌套循环基础练习题

    目录 java循环以及循环嵌套练习题 01 求10以内的偶数的和 02 求100以内的所有素数 素数 一个大于1的自然数 除了1和它本身外 不能被其他自然数整除 03 随机产生一个1 100之间的整数 看能几次猜中 要求 猜的次数不能超过7
  • CloudEvents 入门文档

    CloudEvents 入门文档 1 0 3 版本 文档来自 GitHub CloudEvents 摘要 这份非技术规范文档用来为你提供关于 CloudEvents 规范的总体概览 它补充了 CloudEvents 规范的相关背景以及在制定
  • midjourney最新使用方法教程指令关键词

    自ChatGPT走红以来 以 聊天 为核心的人工智能协作工具们受到了各行各业的关注 让AI写首诗 发封邮件 或是做一份计划书 这些工作已经成为AI聊天机器人的 日常需求 但似乎 人们遗忘了AI还具有创作文字以外的内容 比如 一幅画 2022
  • [完美解决]VS2012创建或打开C++浏览数据库文件时出现错误

    完美解决 VS2012创建或打开C 浏览数据库文件时出现错误 在使用VC2012的时候出现问题如下 创建或打开C 浏览数据库文件XXXXXXX stdf时发生错误 IntelliSense和浏览信息将不能用于C 项目 请确保已安装Micro
  • 全自动高清录播服务器,常态化高清录播服务器 高清全自动录播系统

    特点 支持高清视频会议终端1080P 720P下的录制 点播和直播 双流录制可到高两路1080P 60帧图像 支持把录制下来的会议或者培训内容直播给网内所有的客户端 PC和视频会议终端 支持IPhone IPAD 安卓系统等点播和直播 设计
  • BitLocker的解密

    BitLocker的解密 解密 以管理员身份运行命令提示符 然后在里面输入命令 C指的是盘符 这里以解密C为例 manage bde off C 弹出所有用法 manage bde 更多使用方法 可参考官网 https docs micro
  • win11打开应用被管理员阻止怎么办 window11管理员已阻止你运行此应用的解决方法

    大家在使用windows11系统时 是否有出现过电脑运行应用被阻止的情况呢 可能很多人的蒙着不知道如何处理这个问题 下面就和大家分享一下解决方法吧 更多Windows11安装教程 可以参考小白重装系统网 1 用鼠标右键单击开始图标 接着在出
  • TCP和UDP

    文章目录 TCP和UDP 什么是TCP 用JAVA实现一个基于TCP的简单网络通信 什么是UDP 用JAVA实现一个基于UDP的网络通信 TCP和UDP 什么是TCP TCP即传输控制协议 Transmission Control Prot
  • 【Unity学习笔记】Animation、Input类

    Animation Animation View 通过动画视图可以直接创建和修改动画片段 Animation Clips 显示动画视图 Window Animation 创建动画片段 为物体添加Animation组件 在动画视图中创建片段