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(“跳台”));

猜你喜欢

转载自blog.csdn.net/qq_38913715/article/details/130013520