2d 材质

unity 数字1输入_unity 数字1输入


里面可以设置

unity 数字1输入_unity_02


摩擦力 和 弹力

Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。

Kinematic 动力学刚体
动力学刚体不受重力和力的影响,而受用户的控制,需要使用类似Rigidbody2D.MovePosition、Rigidbody2D.MoveRotation的方法。它于静态刚体一样,只与动态刚体会发生碰撞。

嗯,而且质量应该算是无限大,所以它在运动的时候会撞开所有的动态刚体。
使物体移动可以用 AddForce 和 velocity
AddForce 分两种 Force 和 Impulse

如何判断是否在地上?
判断velocity的y是否等于0 是不行的 因为在空中的某一时刻速度也会是0
所以需要 Physics2D.OverlapCircle

做像素游戏

需要设置一些内容

Sprite Mode: 选择"Multipe"
Single: 整张贴图文件就是一个精灵
Multipe: 贴图文件包含多个精灵,需要进一步切割。
Polygon: 类似Single,但允许自定义精灵的网格轮廓。
PPU(Pixels Pre Unit):
这个属性表示贴图中多少个像素对应Unity中的1个单位。
Filter Mode:
这个属性用于处理贴图时采用的抗锯齿算法。我们做的是像素游戏,每一个像素都是宝贵的,一定要把抗锯齿关闭,否则画面就糊了。所以选择"Point(no filter)“。
Compression:
这个选项是对贴图进行压缩,同样为了我们宝贵的像素,一定要关闭它。选择"None”。

Collision Decection
由于游戏中的移动时并不是完全连续的,而时根据移动时间来判断当前应该的位置。这样会导致游戏卡顿时画面的跳跃,或这当速度过快时在两帧之间会移动很大距离导致跨越了某个碰撞体,导致的穿模现象。这个属性用来设置是否用额外的计算来避免卡顿时的穿模。
Discrete: 离散方式,不管穿模的问题。
Coutinuous: 连续方式,当移动的方向上有碰撞体则不会在两帧之间跨越穿模,需要额外的计算量。

Constraints: 约束,禁止在某一个或几个轴方向上旋转。在2D刚体的物理模型中,由于受力位置的影响,对象会沿着Z轴旋转,我们的角色走着走着就摔倒了。勾选Freeze Rotation Z就可以避免。

Gravity Scale 重力倍数

如果想用键盘上下左右移动 不需要监听 awsd 按键 和 上下左右按键
只需要

float axisX = Input.GetAxis(“Horizontal”);
 float axisY = Input.GetAxis(“Vertical”);float ax1 = Input.GetAxisRaw(“Horizontal”);
 float ay1 = Input.GetAxisRaw(“Vertical”);

他自动包括上面两组按键

GetAxisRaw 是只有1 0 -1
GetAxis 是慢慢改变的 中间数值有过度

其实是可以设置的

unity 数字1输入_unity 数字1输入_03


可以看这里

Gravity: 当按键松开时,"轴(Axis)值"回到"中性(neutral)值"的速度。这句话翻译自官方文档。简单讲就是松开按键时,返回值落回0的速度。
Sensitivity: 灵敏度,就是按下按键时返回值从01的速度。
Snap: 截断
如果此项不勾选。那么当按下反向的按键时,返回值会根据Gravity属性逐渐从1变为0,然后根据Sensitivity属性从0逐渐变为-1,有个刹车滑动的效果。
如果勾选此项,则返回值会立即1变为0,然后根据Sensitivity属性,逐渐从0变为-1
Dead: 这个属性表示敏感度,在多大的范围内,返回值始终为0。主要用于摇杆设备,防止摇杆过于灵敏导致的晃动。

Update 和 FixedUpdate

FixedUpdate 默认是0.02 秒执行一次

可以在下面修改

unity 数字1输入_ide_04


Update 会因为卡顿 调用变少

FixedUpdate 则没有这个问题

所以原则就是

在update里 监听玩家控制 FixedUpdate 里进行动作

Update函数中保留接收按键数据的代码,因为Unity在Update函数调用前会读取输入设备。
如果在FixedUpdate中接受按键数据,则可能出现虽然按下按键,但Input返回值是0的情况。
将速度计算和修改刚体属性的代码放到FixedUpdate函数。

当比尔转身的时候,不会立刻向反方向移动,而有一个逐渐减速的刹车效果。这样与原版不一致。
处理方法是,菜单"Edit->Project Settings->Input Manager->Axes(展开)->Horizontal(展开)" ,将Snap属性勾选。这样转身时就没有刹车效果了。

检测是否站在地上

onGround=Physics2D.Raycast(transform.position, Vector3.down, 0.1f, 1 << LayerMask.NameToLayer(“跳台”));

精灵图

unity 数字1输入_unity 数字1输入_05


随便拿一张

放到unity里

unity 数字1输入_游戏_06


设置成这个

unity 数字1输入_ide_07


sprite editor里

unity 数字1输入_游戏引擎_08


点击 slice

就分割了

unity 数字1输入_游戏_09


再看资源 就被分割成了小图

unity 数字1输入_ide_10


可以在 sprite editor 里点击子图 设置一些参数 比如pivot

unity 数字1输入_游戏引擎_11


这个是干啥的?

假如你希望 你的对象是一格子一格子的移动的话 也就是一个步进移动 咋办?

按住ctrl 再拖动三根线 就可以了

他会按照你设定的值 移动

unity 数字1输入_ide_12


写着一半死机了。。晕了 草稿都丢了整一张图

unity 数字1输入_unity 数字1输入_13


放游戏里显示是这样的

unity 数字1输入_unity 数字1输入_14


模模糊糊 没有像素的颗粒感你需要设置纹理的这个

unity 数字1输入_ide_15


unity 数字1输入_ide_16


看到没 一下子清晰了

现在旋转一下

unity 数字1输入_游戏引擎_17


和右边相比 有没有觉得 又不那么像素了?缺少了锯齿

unity 数字1输入_游戏引擎_18


可以设置下镜头里的这个

unity 数字1输入_unity_19


现在感觉差不多了!

如果让他连续转起来会发现奇奇怪怪的。设计窗口和game窗口显示的效果是不一样的

unity 数字1输入_ide_20


unity 数字1输入_unity_21


不填充 用不到

竖向填充

横向填充

窗口模式 固定大小回想一下 h5 你是怎么做动画的

是不是把动画 像 image label 一样 直接托到stage上

unity不是 因为unity是组件形式的

所以他没有专门的动画

他的逻辑是

任何一个sprite 都可以通过添加 Animator 组件 变成动画

那如何做动画

unity 数字1输入_ide_22


选中动画的几个图

直接拖拽到场景里就可以了

unity会提示你创建New Animation.anim 文件

这个就是动画文件

这一点和h5不一样 h5是一个动作文件里面有好多动作

unity不是 一个动画就是一个单独的文件

比如跑 跳 都是单独的文件

unity还会自动帮你创建好 controller文件

unity 数字1输入_游戏_23


单独的anim 是不能用的

你需要在sprite上挂一个 Animator 组件

然后挂上创建的那个controller文件。

3d也是一样的逻辑。如果希望光源产生阴影 那么一定要打开灯光的这个

unity 数字1输入_unity_24


然后给需要产生阴影的加

Shadow Caster 2D 组件

unity 数字1输入_unity 数字1输入_25


接受阴影

你会发现

unity 数字1输入_unity_26


看 有阴影和光源了!灯光可以开启 normal maps 这个会开启法线贴图

unity 数字1输入_游戏引擎_27


可以设置法线贴图 我瞎画的

unity 数字1输入_游戏引擎_28


unity 数字1输入_游戏引擎_29


最后变成这样了

unity 数字1输入_unity 数字1输入_30


创建地图

unity 数字1输入_ide_31


他长这样

unity 数字1输入_unity_32


unity 数字1输入_unity 数字1输入_33


在tile palette视图里 创建新的调色板

然后把你的资源托进去就可以了 可以是单独的图 也可以是图集 都行你需要设置一下grid的大小

不然你会发现 拖进去的格子 太大或者太小了

unity 数字1输入_游戏_34


比如 我拖进去的地面 大小是30像素 进去结果是这样的

改成0.3 0.3

就ok了

unity 数字1输入_游戏引擎_35


可以用这个操作

unity 数字1输入_ide_36


移动啊 删除啊 选中 都是这里我刷了一个超级玛丽的 非常方便

unity 数字1输入_游戏_37


unity 数字1输入_游戏_38


任意选中一个格子可以进行一些操作 比如

unity 数字1输入_游戏引擎_39


插入一行 插入一列等

你会发现变这样了

unity 数字1输入_游戏引擎_40


这样就不用自己挨个移动了

unity 数字1输入_ide_41


选中裁切出来的资源

unity 数字1输入_ide_42


长这样

unity 数字1输入_unity 数字1输入_43


可以选择 碰撞体

unity 数字1输入_游戏_44


Tilemap Collider 2D 组件不会为此瓦片生成任何碰撞体形状。

Tilemap Collider 2D 组件基于分配给瓦片的精灵生成碰撞体形状。碰撞体形状基于为精灵设置的 Custom Physics Shape。

Tilemap Collider 2D 组件基于网格单元格的形状(由 Grid 组件的选定单元格布局确定)生成碰撞体形状。还可以设置一下调色盘参数哦

unity 数字1输入_游戏_45


接下来 如何给tile map 放碰撞呢?

只需要在tilemap上挂上

tilemap collider 2d 组件 就可以了

unity 数字1输入_游戏引擎_46


就会这样子

想创建简单的tile 动画咋办呢

unity 数字1输入_unity 数字1输入_47


创建 Animated Tile

unity 数字1输入_unity 数字1输入_48


他长这样子

unity 数字1输入_unity 数字1输入_49


里面可以设置现实哪些图

然后把这个文件拖拽到你的调色盘里

就可以了

到了游戏里 他会自动切换显示的

这个适合做一些海洋啊 草地啊 什么的

RuleTile

https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@4.0/manual/RuleTile.html

unity 数字1输入_游戏_50


老规矩 先new一个

直接拖拽到 调色盘里

就可以用了

他是一个类似九宫格的

unity 数字1输入_ide_51


先设置默认显示的

unity 数字1输入_unity_52


然后就是设置这个了

这个是啥意思呢

x 就是不是这个的意思 比如 空的 或者 别的tile

举个例子

unity 数字1输入_unity 数字1输入_53


比如这样的

unity 数字1输入_游戏引擎_54

显示出来就是这样的
他判断 上面如果不是这个 就会显示

unity 数字1输入_ide_55


如果是绿色箭头呢

unity 数字1输入_unity 数字1输入_56


这个意思是说 如果是这个 就显示

unity 数字1输入_ide_57


如果这样呢

unity 数字1输入_游戏引擎_58


就会如此

因为中间是旋转

Tilemap Collider 2D Composite Collider 2D

unity 数字1输入_游戏_59


只添加 Tilemap Collider 2D

那么 每个格子都是单独计算碰撞的

性能低下

如果想合并 就需要勾选 composite

但是需要添加 Composite Collider 2D组件

这时候你会发现 碰撞线 变化了

变成一整个的大家都玩过魂斗罗吧

unity 数字1输入_unity 数字1输入_60


从下面的平台跳到上面的平台 不会被阻挡 并且 会承载住玩家

这个要用

Platform Effector 2D

unity 数字1输入_unity 数字1输入_61


并且勾选这个

unity 数字1输入_unity_62


如果调成360

那么任何角度都不能穿过去

如果是180 那么从下到上 可以跳上去

如果你让主角 跳起来 会发现 他穿到地里去了

速度太快 穿模了

unity 数字1输入_unity 数字1输入_63


主角的改成这样就可以了如果你想 按照y轴 排序

找到这个

unity 数字1输入_unity_64


unity 数字1输入_ide_65


改 Transparency Sort Mode 就可以了