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

news2024/11/15 12:40:41

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 就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解C语言string.h中常用的14个库函数(四)

本篇博客会讲解最后4个函数&#xff0c;分别是memset, memcpy, memmove, memcmp。这4个函数开头都是mem&#xff0c;即memory&#xff08;内存&#xff09;的缩写。 memset void * memset ( void * ptr, int value, size_t num );memset可以用来设置内存中的值。该函数可以把从…

深度学习实战——循环神经网络(RNN、LSTM、GRU)

忆如完整项目/代码详见github&#xff1a;https://github.com/yiru1225&#xff08;转载标明出处 勿白嫖 star for projects thanks&#xff09; 目录 系列文章目录 一、实验综述 1.实验工具及内容 2.实验数据 3.实验目标 4.实验步骤 二、循环神经网络综述 1.循环神经…

【数据结构】第五章 树与二叉树

文章目录 知识体系5.1 树的基本概念5.1.1 树的定义5.1.2 基本术语5.1.3 树的性质 5.2 二叉树的概念5.2.1 二叉树的定义和主要特性5.2.2 二叉树的存储结构 5.3 二叉树的遍历和线索二叉树5.3.1 二叉树的遍历5.3.2 线索二叉树 5.4 树、森林5.4.1 树的存储结构5.4.2 树、森林与二叉…

uniapp踩坑之项目:各端条件编译

在 HBuilderX 中&#xff0c;ctrlalt/ 即可生成正确注释&#xff08;js&#xff1a;// 注释、css&#xff1a;/* 注释 */、vue/nvue模板&#xff1a; &#xff09;。 #ifdef&#xff1a;if defined 仅在某平台存在#ifndef&#xff1a;if not defined 除了某平台均存在%PLATFORM…

ARM busybox 的移植实战2

一、busybox 源码分析1 1、源码目录梳理 2、整个程序入口的确认 (1) 分析一个程序&#xff0c;不管多庞大还是小&#xff0c;最好的路线都是 按照程序运行时的逻辑顺序来。所以找到一个程序的入口至关重要。 (2) 学 C 语言的时候都知道&#xff0c;程序的主函数 main 函数就是…

机器学习算法 随机森林

文章目录 一、概述1.1 集成学习1.2 决策树1.3 随机森林 二、Sklearn中的随机森林2.1 分类树API2.2 参数 2.2 回归树API2.2.1 重要参数 2.3 随机森林调参 三、总结 一、概述 1.1 集成学习 多个模型集成成为的模型叫做集成评估器&#xff08;ensemble estimator&#xff09;&am…

车载软件架构——闲聊几句AUTOSAR BSW(二)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我特别喜欢一个老话,来都来了。我觉得这就是松弛感,既然来了,就开心起来吧!松弛感来自于专注,焦虑不是靠克服的,是靠忘记的,当你很专注做一件事的时候…

HNCTF-re部分复现

目录 [HNCTF 2022 WEEK3]Help_Me! [HNCTF 2022 WEEK3]Whats 1n DLL? [HNCTF 2022 WEEK4]ez_maze 这几天在做HNCTF的week3&#xff0c;week4部分&#xff0c;学到了一些不知道的没接触过的东西&#xff0c;所以记录一下 [HNCTF 2022 WEEK3]Help_Me! 题目下载&#xff1a;下…

onnx笔记2:onnx操作实例

1. 介绍 本文以yolov5s模型,演示对yolov5s.onnx模型文件的读取,修改等操作 2. onnx操作 2.1 获取数据 (1) 案例1 :读取weights数据 比如获取yolov5s.onnx第一个Conv的weights数据。 点击左侧第一个Conv, 右侧INPUTS下面的W点开+号,可以看到该Conv的weight的name为m…

MySQL --- 主从复制、读写分离

一、MySQL主从复制 MySQL数据库默认是支持主从复制的&#xff0c;不需要借助于其他的技术&#xff0c;我们只需要在数据库中简单的配置即可。接下来&#xff0c;我们就从以下的几个方面&#xff0c;来介绍一下主从复制 1.1、介绍 MySQL主从复制是一个异步的复制过程&#xff0c…

linux 安装 oracle 11g

linux 安装 oracle 11g 1、下载oracle 11g (11.2.0.1.0)1.1、Oracle Database 11.2.0.1.01.2、Oracle Database Grid Infrastructure 11.2.0.1.01.3、客户端 2、安装文档3、安装前准备3.1、建立用户和用户组3.2、sysctl3.3、security limits3.4、其他设置3.5、创建安装目录3.6、…

SpringBootWeb请求响应

目录 前言 1. 请求 1.1 Postman 1.1.1 介绍 1.1.2 安装 1.2 简单参数 1.2.1 原始方式 1.2.2 SpringBoot方式 1.2.3 参数名不一致 小结 1.3 实体参数 1.3.1 简单实体对象 1.3.2 复杂实体对象 1.4 数组集合参数 1.4.1 数组 1.4.2 集合 1.5 日期参数 1.6 JSON参…

液压轴位置闭环控制(比例伺服阀应用)

液压阀的基础知识请参看下面的博客文章: PLC液压控制系列之比例流量阀结构分析_RXXW_Dor的博客-CSDN博客比例流量阀液压同步控制的PID闭环调节可以参看下面这篇博文三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)_RXXW_Dor的博客-CSDN博客液压控制系统在工业现…

plt got

小白垃圾笔记而已&#xff0c;不建议阅读。 本来是仅仅写的文字&#xff0c;因为我并没有调试出来&#xff0c;在群里问了师傅后才知道是因为我开起了 full Pelro保护。 按理说应该关闭的&#xff0c;或者开启部分也可以。gcc -z lazy -o test test.c // 部分开启, 即…

跨平台跨端的登录流程及其安全设计

跨平台跨端的登录流程及其安全设计 目录 跨平台跨端的登录流程及其安全设计 一、登录流程 1.1、登录流程时序图 1.2、三方App 登录 1.3、请求的路由守卫 二、注册流程 2.1、注册流程时序图 2.2、多因素认证 2.3、自动跳转登录页面 三、涉及的技术与安全 3.1、用户…

基于深度学习的图片上色(Opencv,Pytorch,CNN)

文章目录 1. 前言2.图像格式&#xff08;RGB&#xff0c;HSV&#xff0c;Lab&#xff09;2.1 RGB2.2 hsv2.3 Lab 3. 生成对抗网络&#xff08;GAN&#xff09;3.1 生成网络&#xff08;Unet&#xff09;3.2 判别网络&#xff08;resnet18&#xff09; 4. 数据集5. 模型训练与预…

OSCP-Medjed(重置用户密码、mysql写webshell、可写文件替换提权)

目录 扫描 FTP WEB 提权 扫描 FTP 尝试登录到FTP服务器,该服务器位于端口30021 使用Filezilla,并能够浏览文件。那里有一些配置文件,但找不到任何值得注意的东西,不能写入目录。

成长之路---C语言笔记(构造类型之字符数组及字符串函数)

决不要停止自学&#xff0c;也不要忘记&#xff0c;不管你已经学到了多少东西&#xff0c;已经知道了多少东西&#xff0c;知识和学问是没有止境的一鲁巴金 字符数组 字符数组就是用于存放字符型数据的数组。在C语言中&#xff0c;字符串是作为字符数组来处理的&#xff0c;没有…

redis设计与实现读书笔记(2)

今天看的是关于单机数据库&#xff0c;RDB持久化以及AOF持久化的内容。 关于单机数据库 1.默认数据库数量 redis的服务器默认是会创建16个数据库&#xff0c;每个客户端访问的时候都要指定自己的目标数据库。 select可以切换目标数据库。 注意事项 到目前为止&#xff0c…

部署YUM仓库

文章目录 1. YUM仓库服务1.1 YUM概述1.1 准备安装源 2.制作YUM源2.1制作ftp源2.2 国内在线yum源2.3 本地源与在线源同时使用 3.yum软件包的下载方式4.yum的常用操作命令 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器…