当前位置: 首页 > article >正文

自由学习记录(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^nn^n 之和:

  • range(1, n+1) 生成 1n 之间的整数。
  • i**n 计算 in 次方。
  • 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 可能会失效)。
推荐 SmartSafe,除非你确实想完全重新切割

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)。
  • ✅ 取多个像素的加权平均值平滑过渡,减少锯齿感BilinearTrilinear)。
  • 📌 取多个 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)时才会调用用于场景初始化(如摄像机定位、对象间的交互等)

--------


http://www.kler.cn/a/560880.html

相关文章:

  • 自动驾驶之BEV概述
  • 【UCB CS 61B SP24】Lecture 11 - Inheritance 4: Iterators, Object Methods学习笔记
  • 浅析 DeepSeek 开源的 FlashMLA 项目
  • 从三个维度了解 RPC(Remote Procedure Call,远程过程调用)
  • 算法打卡第十二弹——二叉树
  • Unity 协程
  • 【NLP 26、实践 ⑥ 引入bert,判断文本中是否有特定字符出现】
  • Linux 命令大全完整版(12)
  • 论文笔记:Scaling Sentence Embeddings with Large Language Models
  • 服务器能否拒绝非浏览器发起的HTTP请求?
  • 0224-leetcode-459.重复的子字符串、283. 移动零
  • unity学习53:UI的子容器:面板panel
  • 【网络安全】从零开始的CTF生活
  • 一文讲解Redis中的基本数据类型
  • postman并发测试某个接口
  • 计算机毕业设计SpringBoot+Vue.jst在线文档管理系统(源码+LW文档+PPT+讲解)
  • Dify部署无法拉取镜像
  • docker compose安装redis
  • 速通HTML
  • XML XML约束 三、Schema