Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互
1.导入unity3D商店资源
① 直接进入unity商店下载
Unity Asset Store - The Best Assets for Game Makinghttps://assetstore.unity.com/② 在3D下面的动画栏,点进去然后找些自己喜欢的模型就好了,可以通过排序“价格由低到高”筛选些免费的模型。
下面这个是我用到的模型:
Melee Warrior Animations FREE | 3D Animations | Unity Asset Store
③ 点击右边添加到我的资源,再点击在unity打开后,就能在unity的PackageManager里面看见导入的资源。需要注意的是网页端登陆的账号和你unity登陆的账号要一样。
④ 点击Download下载好之后,再点击Import加载即可。如果这个窗口没自动跳出来,可以通过unity上方的windows下的PackageManager打开。
2.导入模型之后的使用
① 引入后在project栏下的Assets文件夹下可以看到我们导入的模型。需要注意的是有的模型导入之后没有动画,是需要自己创建动画才能实现人物动作的。
② 我们现在在SampleScene里面创建一个plane地面(要不要无所谓),将导入在Assets/Kevin Iglesias/prefabs/Characters位置下面的模型swordwarrior放在SampleScene里面。
④ 点击SwordWarrior,在其Inspector下面的Add Compent给他添加一个Rigidbody(刚体)属性。记得use Gravity别点,不然会掉下去(如果没地面的话)。
3.设置奔跑动画
① 在SwordWarrior上面我们可以看到Animator这一栏,这一栏就是控制他动画的地方。轻点Controller后的,可以跳到相应的位置,查看动画的状态图。这个东西存放在Assets/Kevin Iglesias/AnimatorController/1H下面。
② 点击之后可以看到一个状态图,可以简单的理解成,你可以设置一些条件,如果满足这些条件模型将不断切换各种状态。这里的状态就是对应游戏中的各种动作。
③ 我们在这个位置新建一个AnimatorController,用来存放我们自己定义的跑步和攻击动作的切换。
④ 注意打开我们新建的AnimatorController,在我们导入的资源的Assets/Kevin Iglesias/Animations/OneHanded下将模型的平常待机动画拖入其中
【这个页面也有点反人类,滚轮滑动控制界面大小,通过按住鼠标滚轮中键实现界面的拖动】
⑤ 在Movement下找到奔跑的动画,同样拖拽进去,这里会有很多的状态,我们仅需要forward即可。
⑥ 右键状态图,再点击MakeTransition生成连线。
⑦ 设置状态切换参数,点击Animator下面的加号生成一个bool参数,我们通过这个参数实现不同状态(动作)切换的控制。
⑧ 取名为Run,点击状态图idle状态到forward状态的连线,在右边出现的窗口的Conditions【通过这里面的条件控制状态切换】下面点击加号将之前设置的Run放上去,值取true。另一根连线取值同样为Run,值取为false。
翻译一下就是:当Run值为true时,状态从idle切换到forward,当Run值为false时,状态从forward切换到idle。实现跑步和正常待机状态的切换。
4.设置奔跑代码
① 在设置好奔跑的状态切换之后,我们将创建的这个AnimatorController放到我们模型中Animator栏目下的Controller上。
② 在Assets中新建一个Scripts文件夹,在文件夹中新增一个名叫Move的C#脚本文件 ,并将这个脚本文件挂载载我们的模型上。【直接拖进去即可】
③ 给出实现奔跑的代码:
public class Move : MonoBehaviour
{// 控制物体的移动速度public float moveSpeed = 5f;// 刚体属性private Rigidbody rb;// 动画属性private Animator animator;// 位置移动private Vector3 targetPos;// 控制是否移动的bool变量private bool isMove;// 在开始的一帧执行的函数void Start(){// 获取当前物体的刚体属性rb = GetComponent<Rigidbody>();// 获取当前物体的动画属性animator = GetComponent<Animator>();}// 刷新的每一帧执行的函数void Update(){// 接收键盘操作函数Run();// 移动状态if (isMove){// 这里的Run是之前我们创建的状态转换的那个参数的名字,根据自己的设置修改animator.SetBool("Run", isMove);// 实现人物的移动rb.velocity = transform.forward * moveSpeed * 1.1f;// 在距离目标的地点很近的时候(0.1f),停止移动if (Vector3.Distance(transform.position, targetPos) < 0.1f){rb.velocity = Vector3.zero;isMove = false;animator.SetBool("Run", isMove);}}}void Run(){// 处理点击w前移逻辑if (Input.GetKey(KeyCode.W)){//记录下目标点targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + 1);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击a左移逻辑if (Input.GetKey(KeyCode.A)){//记录下目标点targetPos = new Vector3(transform.localPosition.x - 1, transform.localPosition.y, transform.localPosition.z);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击s后移逻辑if (Input.GetKey(KeyCode.S)){//记录下目标点targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z - 1);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击D右移逻辑if (Input.GetKey(KeyCode.D)){// 记录下目标点targetPos = new Vector3(transform.localPosition.x + 1, transform.localPosition.y, transform.localPosition.z);// 转向transform.LookAt(targetPos);// 改变移动状态isMove = true;}}
}
④ 到这里能实现模型的奔跑和平常动作的切换了,但还有个小问题,就是按键运动的时候,模型有时候会很诡异的停止,这是因为有一个动画持续时间的设置,将动画中的HasExitTime的✔取消掉即可。
5.设置攻击动画
① 攻击动画和奔跑动画不同,这里我们设置能从任何状态切换到攻击状态。
② 新建一个trigger来监听这个状态切换。
③ 取出位于Assets/Kevin Iglesias/Animations/OneHanded/RightHand下面的攻击动画。
④ 将其切换状态条件设置为我们新建的Trigger,“Attack”。
④ 将attack状态与idle状态和forward状态状态相连,从attack状态转化到forward状态转换条件设为Run为true,从attack状态转化到idle状态转换条件设为Idle为true。这里idle要再自己新建一个bool参数的,并打上✔。【这里不点击✔就需要自己去代码里初始化设置】
5.设置攻击代码
① 修改之前创建的脚本文件代码即可:
这里设置的是点击J即进行攻击操作。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move : MonoBehaviour
{// 控制物体的移动速度public float moveSpeed = 5f;// 刚体属性private Rigidbody rb;// 动画属性private Animator animator;// 位置移动private Vector3 targetPos;// 控制是否移动的bool变量private bool isMove;// 控制是否攻击的bool变量private bool isAttack;// 在开始的一帧执行的函数void Start(){// 获取当前物体的刚体属性rb = GetComponent<Rigidbody>();// 获取当前物体的动画属性animator = GetComponent<Animator>();}// 刷新的每一帧执行的函数void Update(){// 接收键盘操作函数Run();// 移动状态if (isMove){// 这里的Run是之前我们创建的状态转换的那个参数的名字,根据自己的设置修改animator.SetBool("Run", isMove);// 实现人物的移动rb.velocity = transform.forward * moveSpeed * 1.1f;// 在距离目标的地点很近的时候(0.1f),停止移动if (Vector3.Distance(transform.position, targetPos) < 0.1f){rb.velocity = Vector3.zero;isMove = false;animator.SetBool("Run", isMove);}}// 攻击状态if (isAttack){animator.SetBool("Attack", isAttack);isAttack = false;}}void Run(){// 处理点击w前移逻辑if (Input.GetKey(KeyCode.W)){//记录下目标点targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z + 1);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击a左移逻辑if (Input.GetKey(KeyCode.A)){//记录下目标点targetPos = new Vector3(transform.localPosition.x - 1, transform.localPosition.y, transform.localPosition.z);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击s后移逻辑if (Input.GetKey(KeyCode.S)){//记录下目标点targetPos = new Vector3(transform.localPosition.x, transform.localPosition.y, transform.localPosition.z - 1);// 转向transform.LookAt(targetPos);//改变移动StateisMove = true;}// 处理点击D右移逻辑if (Input.GetKey(KeyCode.D)){// 记录下目标点targetPos = new Vector3(transform.localPosition.x + 1, transform.localPosition.y, transform.localPosition.z);// 转向transform.LookAt(targetPos);// 改变移动状态isMove = true;}// 处理攻击事件if (Input.GetKey(KeyCode.J)){//设置triggeranimator.SetTrigger("Attack");}}
}
总结
unity的一些操作真的太容易忘了,而且我采用的这种写法和动画的设置肯定不是最有效率最专业的,只能说慢慢在实践中学习吧。说实话能看见自己找的模型动起来还是挺有成就感的。越接触这些东西,就越觉得真的现在的独立开发者真的太难太辛苦了。
Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互相关推荐
- [Unity3D学习]Unity代码热更新 源码下载
转载自:http://blog.gamerisker.com/archives/608.html 之前的一篇文章<[Unity3D学习]Unity代码热更新解决方案测试结果总结>只是说了一 ...
- Unity3D学习笔记之二资源导入以及工程管理
本次教程,我们来建立自己的一个工程并导入模型,对模型进行处理. 特别说明:这系列教程参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,本博客中采用的模 ...
- unity3d collider自动调整大小_自动网格组合建模工具Unity游戏素材资源
分享最新的CG教程与素材资讯! 人人素材RRCG-专业的CG艺术交流网站 点击上方蓝字关注人人素材 本游戏资料是自动网格组合建模工具Unity游戏素材资源,大小:735 KB ,格式:unitypac ...
- unity3d 人物对话_角色交互任务对话系统Unity游戏素材资源
游客,您需要回复才可以查看或下载该资源!没有账号?注册 本游戏资料是角色交互任务对话系统Unity游戏素材资源,大小:38 MB ,格式:unitypackage,使用软件:unity2017.4.1 ...
- unity学习笔记-番外(3d模型的动作设计以及导入-2018版)材质的替换以及动作穿模(自己的手穿模到自己的其他部位)
unity学习笔记-番外(3d模型的动作设计以及导入) 动作设计白嫖方法 方法一:小k网 需要注意的地方 方法二:mixamo 需要注意的地方 材质的替换 一 动作的穿模 2021.5.13更新 -2 ...
- Unity3D学习笔记3——Unity Shader的初步使用
文章目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. ...
- 【Unity3D学习记录#2】Android调用Unity界面 与 信息交互
[Unity3D学习记录#2]Android调用Unity界面 与 信息交互 Android 调用 Unity Unity项目构建 Android项目构建 Android 与 Unity 的信息交互 ...
- Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
Project(工程.项目):工程是把游戏开发当前所需要的资源归类管理用的. Console控制台:日志.报错.调试,右上角,消息过滤 Assets:资源,存储游戏中一切用到的资源 Library:临 ...
- Unity导入资源解决报错
一.目的 1.想知道:Unity导入资源解决报错 二.参考 三.注意 1.下载的资源位置 C:\Users\Administrator\AppData\Roaming\Unity\Asset Stor ...
- Unity 3D 导入资源包 || Unity 3D 导出资源包
项目中的一些资源具有复用性,只需要将资源导出,就能够重复使用. 导出资源包 执行 Assets → Select Dependencies 菜单命令,选中与导出资源相关的内容.接着执行 Assets→ ...
最新文章
- java 读取远程文件夹_java读取远程共享文件 | 学步园
- 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布
- 2019-03-12-算法-进化(合并两个有序数组)
- Android之查看网络图片和网页HTML
- OpenGL 人物走动源码
- (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
- switch off c语言,逆向工程 | C 语言之 switch-case 分支
- hdu-5596 GTW likes gt(模拟+优先队列)
- 设计模式之Interpreter(解释器)
- Cplex安装教程与使用介绍
- Java实现 蓝桥杯VIP 算法训练 会议中心
- STK X教程—C++/CLI
- 百度360争推1TB永久网盘
- oracle新增字段,并设置默认值
- SpringData示例
- NBA球员生涯数据统计系统(中南大学C语言课设)
- latex并排显示表格
- 学生社团管理系统c语言代码,毕业设计—校园社团活动助手小程序
- SCO UNIX 讲座
- window统计文本字节_在线字数统计工具-统计字符字节汉字数字标点符号-计算word文章字数...
热门文章
- CRMEB首届UI设计大赛报名啦!
- 每日一记:windows 2008 r2安装单实例oracle 11.2.0.1.0 - 64bit监听和EM服务异常处理
- UE4+LiveLinkFace面部动作捕捉
- 【好刊】中科院2区,CCF推荐,SCIEI双检
- Glide4.7.1 圆角与centerCrop冲突问题
- 原生社区交友婚恋视频即时通讯双端APP源码 ONE兔2.0版
- android GPS驱动
- 模拟电子线路设计 实验报告
- PADS2007快捷键、无模命令大全
- 移动通信学习笔记03_蜂窝原理