Unity Physics2D 2d物理引擎游戏 笔记

2d 材质
在这里插入图片描述
里面可以设置
在这里插入图片描述
摩擦力 和 弹力

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 是慢慢改变的 中间数值有过度

其实是可以设置的
在这里插入图片描述
可以看这里

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 秒执行一次
可以在下面修改
在这里插入图片描述
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里
在这里插入图片描述
设置成这个

在这里插入图片描述
sprite editor里 在这里插入图片描述
点击 slice
就分割了
在这里插入图片描述
再看资源 就被分割成了小图

在这里插入图片描述
可以在 sprite editor 里点击子图 设置一些参数 比如pivot

在这里插入图片描述
这个是干啥的?
假如你希望 你的对象是一格子一格子的移动的话 也就是一个步进移动 咋办?
按住ctrl 再拖动三根线 就可以了
他会按照你设定的值 移动
在这里插入图片描述
写着一半死机了。。晕了 草稿都丢了

整一张图
在这里插入图片描述
放游戏里显示是这样的
在这里插入图片描述
模模糊糊 没有像素的颗粒感

你需要设置纹理的这个
在这里插入图片描述
在这里插入图片描述
看到没 一下子清晰了
现在旋转一下
在这里插入图片描述
和右边相比 有没有觉得 又不那么像素了?缺少了锯齿
在这里插入图片描述
可以设置下镜头里的这个
在这里插入图片描述
现在感觉差不多了!
如果让他连续转起来会发现奇奇怪怪的。

设计窗口和game窗口显示的效果是不一样的
在这里插入图片描述
在这里插入图片描述
不填充 用不到
竖向填充
横向填充
窗口模式 固定大小

回想一下 h5 你是怎么做动画的
是不是把动画 像 image label 一样 直接托到stage上
unity不是 因为unity是组件形式的
所以他没有专门的动画
他的逻辑是
任何一个sprite 都可以通过添加 Animator 组件 变成动画
那如何做动画
在这里插入图片描述
选中动画的几个图
直接拖拽到场景里就可以了
unity会提示你创建New Animation.anim 文件
这个就是动画文件
这一点和h5不一样 h5是一个动作文件里面有好多动作
unity不是 一个动画就是一个单独的文件
比如跑 跳 都是单独的文件
unity还会自动帮你创建好 controller文件
在这里插入图片描述
单独的anim 是不能用的
你需要在sprite上挂一个 Animator 组件
然后挂上创建的那个controller文件。
3d也是一样的逻辑。

如果希望光源产生阴影 那么一定要打开灯光的这个
在这里插入图片描述
然后给需要产生阴影的加
Shadow Caster 2D 组件
在这里插入图片描述
接受阴影
你会发现
在这里插入图片描述
看 有阴影和光源了!

灯光可以开启 normal maps 这个会开启法线贴图
在这里插入图片描述
可以设置法线贴图 我瞎画的
在这里插入图片描述
在这里插入图片描述
最后变成这样了

在这里插入图片描述
创建地图
在这里插入图片描述
他长这样
在这里插入图片描述
在这里插入图片描述
在tile palette视图里 创建新的调色板
然后把你的资源托进去就可以了 可以是单独的图 也可以是图集 都行

你需要设置一下grid的大小
不然你会发现 拖进去的格子 太大或者太小了
在这里插入图片描述
比如 我拖进去的地面 大小是30像素 进去结果是这样的
改成0.3 0.3
就ok了
在这里插入图片描述
可以用这个操作
在这里插入图片描述
移动啊 删除啊 选中 都是这里

我刷了一个超级玛丽的 非常方便
在这里插入图片描述
在这里插入图片描述
任意选中一个格子

可以进行一些操作 比如
在这里插入图片描述
插入一行 插入一列等
你会发现变这样了
在这里插入图片描述
这样就不用自己挨个移动了

在这里插入图片描述
选中裁切出来的资源
在这里插入图片描述
长这样
在这里插入图片描述
可以选择 碰撞体
在这里插入图片描述
Tilemap Collider 2D 组件不会为此瓦片生成任何碰撞体形状。
Tilemap Collider 2D 组件基于分配给瓦片的精灵生成碰撞体形状。碰撞体形状基于为精灵设置的 Custom Physics Shape。
Tilemap Collider 2D 组件基于网格单元格的形状(由 Grid 组件的选定单元格布局确定)生成碰撞体形状。

还可以设置一下调色盘参数哦
在这里插入图片描述
接下来 如何给tile map 放碰撞呢?
只需要在tilemap上挂上
tilemap collider 2d 组件 就可以了
在这里插入图片描述
就会这样子

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

在这里插入图片描述
创建 Animated Tile
在这里插入图片描述
他长这样子
在这里插入图片描述
里面可以设置现实哪些图
然后把这个文件拖拽到你的调色盘里
就可以了
到了游戏里 他会自动切换显示的
这个适合做一些海洋啊 草地啊 什么的

RuleTile

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

在这里插入图片描述
老规矩 先new一个
直接拖拽到 调色盘里
就可以用了
他是一个类似九宫格的
在这里插入图片描述
先设置默认显示的
在这里插入图片描述
然后就是设置这个了
这个是啥意思呢
x 就是不是这个的意思 比如 空的 或者 别的tile
举个例子
在这里插入图片描述
比如这样的

在这里插入图片描述

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

在这里插入图片描述
如果是绿色箭头呢

在这里插入图片描述
这个意思是说 如果是这个 就显示

在这里插入图片描述
如果这样呢
在这里插入图片描述
就会如此
因为中间是旋转

Tilemap Collider 2D Composite Collider 2D

在这里插入图片描述
只添加 Tilemap Collider 2D
那么 每个格子都是单独计算碰撞的
性能低下
如果想合并 就需要勾选 composite
但是需要添加 Composite Collider 2D组件
这时候你会发现 碰撞线 变化了
变成一整个的

大家都玩过魂斗罗吧
在这里插入图片描述
从下面的平台跳到上面的平台 不会被阻挡 并且 会承载住玩家
这个要用
Platform Effector 2D
在这里插入图片描述
并且勾选这个

在这里插入图片描述
如果调成360
那么任何角度都不能穿过去
如果是180 那么从下到上 可以跳上去

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

速度太快 穿模了

在这里插入图片描述
主角的改成这样就可以了

如果你想 按照y轴 排序
找到这个
在这里插入图片描述
在这里插入图片描述
改 Transparency Sort Mode 就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值