自由学习记录(38)
python语法
def
def print_receipt
(store_name, items, total_price, cashier="Self-Checkout", payment_method="Credit Card"):
Python 的 函数定义 语法
def print_receipt(...)
→ 定义了一个名为print_receipt
的函数。store_name, items, total_price
→ 这些是必填参数,调用print_receipt()
时必须提供。
^40
是 格式化对齐 语法,它的意思是:
^
→ 居中对齐40
→ 总宽度 40 个字符- 如果
store_name
只有 10 个字符,前后会各填充(40-10)/2=15
个空格,使它居中。
{item:<20}
→item
左对齐,占 20 个字符(让商品名整齐){qty:<5}
→qty
左对齐,占 5 个字符{price:.2f}
→price
保留两位小数
sum(i**n for i in range(1, n+1))
计算从 1^n
到 n^n
之和:
range(1, n+1)
生成1
到n
之间的整数。i**n
计算i
的n
次方。sum()
对所有次幂结果求和。
:2
表示这个值至少占 2 个字符的宽度,如果数字位数不足,会自动用空格填充左侧。
{}
表示占位符,可以放入变量或表达式。:
冒号后面是格式说明,用来控制对齐方式、宽度、小数位数等
Python turtle
真的很适合绘图
在 Python 中,[]
表示一个列表(List),它是一个可以存储多个元素的数据结构。
enumerate()
可以让你在遍历列表或其他可迭代对象时,同时获取索引和对应的值。
Tomcat安装的问题(jdk-21)
首先检查Java的环境变量配了没
然后直接去官网找直装(如果不可以就去配一下Tomcat 的环境变量)
------
第一章 整体概述(选填)
计算机网络:利用通信线路和交换设备将地理位置分散的、具有独立功能的多台计算机连接起来,
按照某种协议进行数据通信、实现资源共享的信息系统。
电路交换是以电路连接为目的的交换方式,通信之前要在通信双方之间建立一条被双方独占的物理通道(由通信双方之间的交换设备和链路逐段连接而成)。
报文交换是以报文为数据交换的单位,报文携带有目标地址、源地址等信息,报文整个地发送,一次一跳,在交换结点采用存储转发的传输方式,即将到达交换机的分组先送到存储器暂时存储和处理,等到相应的输出电路有空闲时再送出。
分组交换基于报文交换,将报文划分为更小的数据单位:报文分组(也称为段、包、分组)。分组交换仍采用存储转发传输方式,但将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去。
第二章 物理层(选填)
物理层:确定与接口有关的一些特性。
机械特性:规定物理连接时所采用的规格、接口形状、引线数目、引脚数量和排列情况。
电气特性:规定传输二进制位时,线路上信号的电压范围、阻抗匹配、传输速率和距离限制等。
功能特性:指明某条线上出现的某一电平表示何种意义,接口部件的信号线的用途。
规程特性:(过程特性)定义各条物理线路的工作规程和时序关系。
某网络在物理层规定,+10~15V表示二进制0,-10~15V表示二进制1
电线长度限于15m以内
模拟信号更适合远程传输,数字信号容易损失,所以需要先转换
一个横杠就是一个码元,一个码元携带 log2V 个 bit
消息:通信的目的是传送消息,如语音、文字、图像、视频等。
数据:数据是运送消息的实体 0/1
信号:信号是数据的电气或电磁表现
奈氏准则和香农地理
信道复用技术
波分多路复用就是光的频分多路复用,在一根光纤中传输多种不同波长(频率)的光信号,由于波长(频率)不同,所以各路光信号互不干扰,最后再用波长分解复用器将各路波长分解出来。
-----突然意识到这些期末速成的视频,,我好像有点看不习惯了,------
在CSDN上这么多速成的题目文章,比起视频感觉现在更适合我了
那问题也来了,原来期末这么好应付吗,,是天灵盖开了还是怎么
那我现在岂不是有充足的时间准备暑期的游戏投简历实习了?
可以,疯批起来了,,哈哈
游戏的话我感觉先跟着那个国外的Alex Dev做掉那个RPG 的游戏,至少要做一个完成的项目,,
而且要尽快,,三周之内要看完解决
之后要不要打比赛,,还有看看岗位,,岗位上的需求要么就是不写的明确,要么就是明确但很多自己都没学过,,但都可以投,,
感觉还是打比赛,,有真正的比赛出项目,这个会很重要,,自己做的可能竞争力不会很高
,,,
那翻篇了,,现在就可以高权重投入了,开始吧
----------------------------------------
在 Inspector 里看到的 public
变量的值,只会影响运行前的初始化值,而不会动态同步代码里的赋值,它的主要作用就是在 运行时测试修改。
Inspector 里的值优先级更高,即使你在脚本里赋值,Inspector 里手动修改过的值会保持不变。
你可以在运行时(Play 模式)修改它的值,观察效果,比如调整速度、颜色、大小等参数。
为什么代码里的 public float
赋值后,Inspector 里不变?
🔍 因为 Unity 序列化了 public
变量,并把 Inspector 里的值存储在 .scene
文件或 .prefab
里。
这意味着:
- 如果变量在 Inspector 里被手动修改过,它会忽略你在代码里的默认值。
- 但如果你完全删除这个变量,再重新写,它会恢复代码里的默认值。
public class Example : MonoBehaviour
{
[SerializeField] private float myValue = 10f; // Inspector 里会显示,但不会存储覆盖代码的默认值
}
Sprite(精灵)导入设置 中的部分选项,主要用于 2D 游戏开发
Sprite Mode(精灵模式)
Single
(默认):单张 Sprite 纹理,即整个图片作为一个精灵对象使用。- ✅
Multiple
(多精灵模式):允许在 Sprite Editor(精灵编辑器)中手动切割这张图片,将其分成多个小的 子 Sprite,用于 精灵动画、Tilemaps(瓦片地图)、角色拼接 等。
Packing Tag(打包标签)
- 用于 Sprite Atlas(精灵图集)优化,可以将多个 Sprite 组合到 同一个纹理,减少 Draw Call(减少渲染开销)。
- 默认是空的,如果使用 Sprite Atlas,可以手动填写相同的 Tag,让 Unity 自动打包这些 Sprite 进行优化。
💡 你的 Packing Tag
是灰色的,表示没有使用 Sprite Atlas(或没有启用 Enable Sprite Atlas Packing
)。
Pixels Per Unit(单位像素)
- 定义多少个像素等于 1 个 Unity 世界单位。
- 默认值通常是
100
,但像素风格游戏通常使用 16、32、64 等 以适配网格大小。 - 较小的值(如
16
)表示 Sprite 更大,更适合像素风格游戏。
💡 你的设置是 16
,意味着 16px = 1个 Unity 世界单位
,适用于 低分辨率像素游戏。
Mesh Type(网格类型)
- 控制 Sprite 的 Mesh(网格)类型,影响 碰撞检测 和 渲染性能:
Tight
(紧密包围):精确匹配 Sprite 的形状,减少透明区域,提高碰撞检测精度。(适用于不规则形状的 Sprite)Full Rect
(完整矩形):用矩形包围整个 Sprite,计算更快,但可能会浪费多余的透明像素区域。(适用于规则矩形 Sprite)
💡 你的 Mesh Type 设置为 Tight
,表示 Unity 会生成 紧密包围 Sprite 形状的网格,适用于 需要精确碰撞检测的 Sprite(如 角色、障碍物)。
Extrude Edges(边缘扩展)
- 扩展 Sprite 的边界像素,防止 贴图采样错误(像素边缘产生黑边或透明缝隙)。
- 适用于 Sprite 的
Tight
Mesh Type,特别是当使用 非规则形状的 Sprite 并启用了 3D 光照、Shader、Tilemap 等 时。
💡 你的设置是 1
,表示扩展 1 像素,防止采样错误。
Generate Physics Shape(生成物理碰撞形状)
- 是否自动为 Sprite 生成物理碰撞形状。
- ✅ 勾选后,Unity 会根据
Tight
Mesh 形状生成 Collider(碰撞体),适用于 2D 物理系统(如PolygonCollider2D
)。 - 如果未勾选,则默认使用
BoxCollider2D
(矩形碰撞体)。
💡 你的选项是 ✅
,表示 Unity 会 自动根据 Sprite 的形状生成碰撞体,适用于 物理碰撞检测(如角色与地面碰撞)。
sprite editor的操作种类
Custom Outline(自定义轮廓)
-
用于调整 Sprite 的网格轮廓(Mesh Outline),影响渲染和物理碰撞形状。
-
默认情况下,Unity 会自动生成一个包围 Sprite 的 Tight(紧密) 或 Full Rect(矩形) 网格。
-
手动调整 Custom Outline,可以减少透明区域的网格点,提高渲染效率。
✅ 适用场景: ✔ 优化 2D 渲染,减少不必要的透明像素网格(提高性能)。
✔ 自定义 Sprite 网格形状,防止意外的黑边或采样错误。
Custom Physics Shape(自定义物理碰撞形状)
-
用于编辑 Sprite 生成的
PolygonCollider2D
(多边形碰撞体)形状。 -
如果
Generate Physics Shape
选项启用,Unity 会 自动计算物理形状,但有时不够精确。 -
可以手动调整碰撞体的顶点,确保 碰撞更加符合角色外形。
✅ 适用场景: ✔ 2D 角色、障碍物、地形的碰撞检测。
✔ 自动生成的碰撞体不精准,需要手动修正。
✔ 优化物理性能,减少不必要的碰撞计算(精简多边形点数)。
Secondary Textures(次要纹理)
-
用于 Unity 的
Sprite Renderer
多层纹理系统(如法线贴图、光照贴图)。 -
允许给 Sprite 绑定多个额外的贴图,比如:
-
Normal Map(法线贴图) → 让 2D Sprite 受光照影响,模拟 3D 质感。
-
Emission Map(自发光贴图) → 让某些区域发光,比如霓虹灯效果。
-
✅ 适用场景: ✔ 2D 角色使用光照贴图,增强视觉效果。
✔ 希望 2D 角色受光照影响,增加立体感(法线贴图)。
✔ 需要特殊效果,如局部发光、透明遮罩等。
Skinning Editor(蒙皮编辑器)
-
用于 2D 骨骼动画(Skeletal Animation),搭配 2D Animation Package。
-
可以给 Sprite 绑定骨骼(Bone),用于 2D 骨骼动画系统(类似 Spine、DragonBones)。
-
允许调整网格权重(Weight)、骨骼影响范围。
✅ 适用场景: ✔ 2D 角色动画(骨骼绑定、网格变形)。
✔ 不想用逐帧动画,改用骨骼动画优化性能。
✔ 创建皮肤变形效果(如布料、柔软物体)。
Sprite Editor里的Slice(切割)工具
1️⃣ Type(切割类型)
- 控制 Unity 如何自动分割 Sprite。
- 可选值:
Automatic
(自动) ✅ 默认- Unity 根据透明像素区域自动检测并切割 Sprite。
Grid by Cell Size
(按网格大小切割)- 适用于 Tilemaps(瓦片地图)或像素艺术。
- 需要手动输入每个 Sprite 的宽高(Cell Size)。
Grid by Cell Count
(按网格数量切割)- 指定 Sprite 要划分成多少行 & 列,Unity 自动计算尺寸。
💡 你的设置是 Automatic
,Unity 会根据透明区域自动检测并切割 Sprite。
2️⃣ Pivot(轴心点)
- 决定每个 Sprite 的
Pivot
(轴心点),影响旋转、碰撞体、动画对齐等。 - 可选值:
Center
(中心) ✅ 默认Top Left
(左上)Bottom Right
(右下)Custom
(自定义) → 允许手动输入X
/Y
坐标。
💡 你的设置是 Center
(中心点),适用于大多数情况。
但如果是瓦片地图(Tilemaps),建议用 Bottom Left
,防止对齐问题。
3️⃣ Method(切割方法)
- 控制 Unity 如何处理原有的 Sprite 切割信息。
- 可选值:
Delete Existing
(删除现有) ⚠ 你的选择- 删除当前所有的 Sprite 并重新创建(可能会导致 Sprite 关联丢失)。
- 适用于完全重新切割的情况。
Smart
(智能)- 保留已有的 Sprite 切割信息,但会优化未被覆盖的部分。
Safe
(安全)- 仅在不影响现有 Sprite 结构的情况下进行切割,不会破坏已有数据。
💡 ⚠ 你的设置是 Delete Existing
,可能会导致 Sprite 关联丢失(比如已经绑定的动画、Prefab 里的 Sprite 可能会失效)。
✅ 推荐 Smart
或 Safe
,除非你确实想完全重新切割。
4️⃣ Slice(开始切割按钮)
- 点击
Slice
按钮后,Unity 会按照上面选择的规则切割 Sprite。 - 如果 Method 选择
Delete Existing
,原有的 Sprite 数据会丢失,请谨慎操作。
------------
默认情况下,Unity 的网格(Grid)是一单位 1m × 1m(即 1 个方格 = 1 米)。
虽然 Sprite(精灵) 主要用于 2D 游戏,但 Filter Mode
(过滤模式)的作用与 3D 纹理相同,仍然是控制 Sprite 在缩放时的像素显示效果
Sprite(纹理同理)Advanced设置
1️⃣ Wrap Mode(纹理环绕模式)
- 决定当纹理坐标超出 0-1 范围时,纹理如何重复或拉伸。
- 常见值:
Repeat
(重复):纹理会不断重复,适用于地板、墙壁等连续贴图。Clamp
(边缘拉伸):超出纹理范围的部分会拉伸边缘的颜色,适用于天空盒、UI 等。
💡 你的设置是 Clamp
,表示纹理边缘不会重复,而是拉伸最后一个像素。
2️⃣ Filter Mode(纹理过滤模式)
- 控制当纹理被缩放(放大或缩小)时,像素如何进行插值计算。
- 选项:
Point (No Filter)
(点过滤,无插值)- 纹理 保持像素风格,清晰但可能有锯齿。
- 适用于像素艺术游戏(Pixel Art)或低分辨率 UI。
Bilinear
(双线性过滤)- 纹理在放大/缩小时会进行平滑插值,但不会考虑不同 Mipmap 层级。
- 适用于普通 3D 贴图,不希望看到像素化效果。
Trilinear
(三线性过滤)- 进一步改进双线性过滤,并在不同的 Mipmap 层级 之间平滑过渡。
- 适用于 3D 物体的高质量贴图(如逼真的地面、角色皮肤)。
💡 你的设置是 Point (No Filter)
,表示 Unity 不会对纹理进行平滑处理,适用于 像素风格游戏(Pixel Art) 或 低分辨率贴图,确保每个像素都是清晰的方块。
🎯 过滤模式(Filter Mode)本质上在做什么?
是的,你的理解基本正确。Unity 里的 Filter Mode
(纹理过滤模式)主要用于处理 纹理(Texture)在放大或缩小时的像素插值方式,确保它能以合适的方式渲染到屏幕上。
图片的最基础单位是像素(Pixel),它本身是固定的大小
一张 2D 纹理有 Pixels Per Unit(PPU)
,用于确定 多少像素 = 1 个 Unity 世界单位
当纹理被缩放时(无论是 3D 还是 2D),原始像素点(Pixel)需要进行插值(Interpolation),以填充新的像素点,让它适配 Unity 里的显示大小
纹理过滤的主要原理
当你放大(或缩小)一张图片,新的像素点必须由 Unity 计算并“猜测”:
- ❌ 直接复制像素(无插值) → 导致硬边、像素化效果(
Point
)。 - ✅ 取多个像素的加权平均值 → 平滑过渡,减少锯齿感(
Bilinear
,Trilinear
)。 - 📌 取多个 Mipmap 层级进行插值 → 减少远距离的模糊或闪烁(
Trilinear
)。
Trilinear
最平滑,但计算量更大。Bilinear
适中,但远处可能有点模糊
Point
最快,但直接复制增添,不考虑过渡。
---------
Multiple模式下的图片,如果slice成多张了,拖到场景里会自动带上要你生成animator状态机文件
一格代表一帧,到1.00的时候总共有12帧,也就是一秒内会播放下一张图片,一共切换11次,
这里记录的更重点的是速度,切换的速度,自己塞了多少张图关系不大,调整前后之间的间隙,增大就是切换的次数更少了
也就是手动调小帧率,但Animation里有一点很重要的是,里面有默认的帧率可以给你使用
但这里因为是像素的,一套动作只有五张图片,如果帧率太高,那图片又很少,就会加快切换图片的速度
把帧率调为2的时候,这种只是切换图片的调控感就更加体现出来了
一秒只切换一次图片,一帧的所有状态保留时间,是0.5秒
Awake()
vs Start()
的区别
在 Unity 中,Awake()
和 Start()
都是 MonoBehaviour 生命周期方法,它们的主要作用是在游戏对象(GameObject)启用时进行初始化。但是,它们的调用时机有所不同:
方法 | 调用时机 | 调用顺序 | 适用场景 |
---|---|---|---|
Awake() | 脚本实例化时(比 Start() 更早) | 不管 GameObject 是否启用,都会调用 | 用于对象依赖关系初始化(例如 Singleton 、加载数据、动态绑定对象等) |
Start() | 在 Awake() 之后、第一帧 Update() 之前调用 | 只有 GameObject 启用(enabled = true )时才会调用 | 用于场景初始化(如摄像机定位、对象间的交互等) |
--------