Unity 简记(2)--2D移动
1.输入
Unity输入方式有三种:
1.1直接检测按下哪个按键
直接检测有两种:
A. 直接检测按键,优点:简单方便,效率高 缺点:修改按键麻烦
if(Input.GetKeyDown(KeyCode.X)) //X代表键盘上的某个按键
。。。
B. 间接检测按键,优点:方便修改按键
public KeyCode JumpButton = KeyCode.Space; //提前设置好不同功能对应按键
if(Input.GetKeyDown(JumpButton))
。。。
1.2.检测水平输入和垂直输入
分为两种:
A.键盘类(适合横版过关)
1.Vertical 对应键盘上面的上下箭头或W,S键,当按时触发
2.Horizontal 对应键盘上面的左右箭头或A,D键,当按时触发
B.鼠标类(适合飞机弹幕)
1.Mouse X 鼠标沿着屏幕X移动时触发
2.Mouse Y 鼠标沿着屏幕Y移动时触发
3.Mouse ScrollWheel 当鼠标滚动轮滚动时触发
ps:Mouse Y和ScrollWheel操作手感不佳,X则挺正常的
读取时分为两种:
- Input.GetAxisRaw("XXX"); 返回值是-1,0或1
- Input.GetAxis("XXX"); 按下按键后返回值是一个变化过程,从返回一个类似加速度的值 0.1-->0.3 -->0.1然后将会依次减少..类似刹车和开车.适用于赛车加速
使用例子:
float x = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime, Space.World);
float y = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime, Space.World);
Vertical和Horizontal输入的键可以通过打开Unity顶部栏的Edit->Project Setting->Input,进行修改。
Note:“XXX”中的XXX名字注意不要拼错,否则无效
双人游戏快速改键位:https://blog.csdn.net/w1095471150/article/details/52642636
2.移动
Unity常用移动方式有四个组件和Vector3:
(未注明属性的均为函数)
2.1.Transform组件
- translate -- 相某方向移动多少距离(本地坐标系)(无惯性,但若移动设置过大可能穿模)
- position属性 -- 世界空间坐标物体的位置
2.2.RigidBody组件
- Velocity属性 -- 给予刚体速度向量(瞬间速度变为所给的速度向量) (一般有惯性)
- AddForce -- 添加一个力给物体(若力能使物体移动,是一个变化过程)(一般有惯性)
- MovePosition -- 移动物体到Position位置 (与translate类似)
2.3.NavMeshAgent组件
- SetDestination -- 设置自动Pat目标点
2.4.CharacterController组件
- Move -- 一个更加复杂的运动函数,每次都绝对运动
- SimpleMove -- 以一定速度移动物体
2.5.Vector 3
- Lerp -- 两个向量之间的线性插值,“像弹簧一个跟随目标物体”。
- Slerp -- 两个向量之间的球形插值,“在日出和日落之间动画弧线”。
- MoveToward -- 当前的地点移向目标和Vector3.Lerp相同,maxDistanceDelta限速。
- SmoothDamp -- 随着时间的推移,逐渐改变一个向量朝向预期的目标。
Unity3D的位移、旋转的3D数学模型:https://blog.csdn.net/sxbluebird/article/details/43225401
3.手感优化
前提:了解rigidbody2D面板各参数含义,才能根据自己的游戏所需效果调成自己想要的
可参考:https://blog.csdn.net/zhenghongzhi6/article/details/82381537
内容在新版本上加入了Linear Drag线性阻力以及以后其他新功能
1.加入移动,跳跃动画,甚至加入蓄力跳
2.加入音效
3.调整重力参数,线性阻力
博客分享:
Unity性能优化——Rigidbody2D详解:https://blog.csdn.net/SerenaHaven/article/details/78851089
Unity 2D 平台类游戏 人物移动 Rigidbody2D详解及其常用API:http://www.pianshen.com/article/8423262368/
4.符合自己的游戏
不同的游戏需要不同效果的移动方式,一开始选择恰当的移动方式会省去不少后期重新选择更改的时间以及无用功。
简单可以分为有惯性有重力,有惯性无重力,无惯性有重力,无惯性无重力
2D游戏分为以下几种:
1.格斗游戏(无惯性有重力):需要随时左右移动,加入惯性后可能手感不佳
2.飞机射击类游戏(无惯性无重力):需要在一堆子弹中穿梭,所以需要需灵敏的控制,移除惯性和重力
3.超级玛丽类横板跳跃游戏(有惯性有重力)
4.太空模拟(有惯性无重力)
根据自己的游戏再细分,比如有了惯性,那惯性的程度,跳起来在空中能否左右移动等,这些都是可以灵活思考的。
关于跳跃可以看看我的另一篇博文:Unity2D横版移动跳跃问题——关于一段跳与二段跳
转载标明出处:作者AMzz 博客: https://www.cnblogs.com/AMzz/
Unity 简记(2)--2D移动的更多相关文章
- Unity 4.3 2D 教程:新手上路
这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的 ...
- 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术
[Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...
- unity, polygon collider 2D 添加顶点
正常情况下只要按下了Edit Collider按钮,鼠标停在polygon collider 2D的一条边上,就会出现一个虚拟的新顶点,此时如果按下鼠标,新顶点就创建出来了. 但是我今天遇到一个奇怪的 ...
- 【Unity Shader】2D动态云彩
写在前面 赶在年前写一篇文章.之前翻看2015年的SIGGRAPH Course(关于渲染的可以去selfshadow的博客里找到,很全)的时候看到了关于体积云的渲染.这个课程讲述了开发者为游戏< ...
- 使用Unity实现动态2D水效果
http://forum.china.unity3d.com/thread-16044-1-1.html 在这片教程里面我们将会用简单的物理效果来模拟动态的2D水效果.我们将会使用Line Rende ...
- Unity 简记(1)--TileMap
## Tilemap是unity中自带的快速构建2D场景的工具,优点是省时省力, 1 使用方法 在场景创建一个Tilemap 打开TilePalette 3.创建一个新的Palette,将地图切割 ...
- [Unity] 3D数学基础 - 2D旋转矩阵
2D矩阵的旋转: NewX = X * Cos(α) - Y * Sin(α) NewY = X * Sin(α) + Y * Cos(α) 一般在三角函数中使用的是弧度,我们可以通过下面的公式将角度 ...
- Unity 3D制作2D游戏的几种方法
1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.
- |原创|unity 4.3 2D功能SpriteRenderer修改颜色的方法
4.3增加了不少2D功能,然后实在没有找到有人分享,在国外查资料研究一下午然后给个简单的教程 ===================================================== ...
随机推荐
- Travis CI持续集成使用
用好这个工具不仅可以提高效率,还能使开发流程更可靠和专业化,从而提高软件的价值.而且,它对于开源项目是免费的,不花一分钱,就能帮你做掉很多事情. 一.什么是持续集成? Travis CI 提供的是持续 ...
- 使用jmeter进行压力测试入门讲解
1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...
- Java学习笔记之基础语法(数组)
数组 数组概述:是具有相同数据类型的数据的集合 数组的定义:数据类型 数组名 [] 数组特点: 1,数组是引用数据类型. 2,数组值用大括号,元素之间用逗号隔开,元素的个数是0-N个 3,数组长度是固 ...
- 渗透测试-基于白名单执行payload--Regsvr32
复现亮神课程 基于白名单执行payload--Regsvr32 0x01 Regsvr32 Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令, ...
- 设计糟糕的 RESTful API 就是在浪费时间!
现在微服务真是火的一塌糊涂.大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务.而作为微服务之间通信的桥梁,Web API的设计就显得非常重要. HTTP是目前互联网使 ...
- java 线程池那点事儿
1.为什么要用线程池 2.常见线程池以及参数 2.1 创建线程池 2.2 线程池参数 2.3 常见线程池 3.执行流程 4.健康检查 1.为什么要用线程池 线程池提供了一种任务的提交与任务的执行解偶的 ...
- mysql 二十余种报错注入姿势
1.floor() floor 和group by 搭配使用 利用group by 的key唯一性 和mysql 编码执行顺序导致二次执行产生不同key ))) ) 数值型注入时 不用闭合‘ 进行 ...
- 12.Nginx代理与负载均衡
1.什么是代理? 代为办理 --> 代理 2.Nginx正向代理.反向代理 正向代理: --> 上网 | 路由器替代 反向代理: --> 正向与反向代理的区别: 区别在于形式上服务的 ...
- Arduino学习笔记⑦ EEPROM断电保存数据
1.前言 EEPROM,叫做电可擦可编程可读寄存器(是不是觉得好官方,不知道是什么鬼?反正我也一脸懵逼),只需要知道这是一种断电后数据不会丢失的存储设备,可以用来应对需要做记录做保存的场合.简 ...
- 【构建工具】《Maven实战》读书笔记
Maven是我们在做Java开发过程中用经常用到的一个辅助工具.本篇博客是我学习Maven的一个记录博客,学习过程主要参考<Maven实战>这本书.同时也参考了Maven的官方文档. 1. ...