开发工具 (IntelliSense) 缓存:VS Code/VS 的 C# 智能提示未刷新,误报不存在,实际 UE 编译时这些概念是合法的。

C# Dev Kit:

找不到引用 → 全部标红(但其实是“假错误”)

.NET SDK 10.0.100 installed

含义:

  • 给 VS Code 提供 C# 编译/分析能力

勾选这些关联(尤其是 .sln .csproj )的核心作用就是让 Rider 成为这些文件的默认打开程序 。即使这些项目最初是用 Visual Studio 创建的,Rider 也能完美解析

Rider 和 Visual Studio 使用的是 完全相同的项目系统 (基于 MSBuild)。 
  • .sln (Solution) :整个解决方案的入口。勾选后,你双击它,系统会直接唤起 Rider 而不是 VS。
  • .csproj (C# Project) :单个项目的定义文件。
  • .cs :单个 C# 代码文件。

Unity/UE 开发必备 :Unity 和 Unreal Engine 默认都会生成 .sln 文件。勾选关联后,在引擎里点击“Open C# Project”,它会更稳定地指向 Rider。

如果你两个都装了: 
  • 勾选后 :双击会默认启动 Rider。
  • 想用 VS 打开时 :你依然可以右键文件 -> “打开方式” -> 选择 Visual Studio。
  • 反悔了怎么办 :随时可以在 Rider 的 Settings -> Environment -> File Associations 里重新勾选或取消。
  • UE 引擎 里双击一个蓝图节点,RiderLink 告诉 UnrealLink :“嘿,用户想看这个节点的 C++ 实现”,于是 Rider 自动弹出来定位到那一行。
  • 反之,你在 Rider 里修改了一个属性,UnrealLink 会通过 RiderLink 告诉引擎进行热重载(Live Coding)。
  • 完全不冲突,反而是 1+1>2 的关系。 只有两个都装好,你才能在 Rider 里体验到“像写 C# 一样流畅地写 UE C++”的感觉。
  • Rider 知道哪个蓝图继承了这个 C++ 类。当你重命名 C++ 代码时,Rider 会提醒你哪些蓝图会受到影响,以前你想知道“到底有哪些蓝图用了我这个 C++ 类”,你必须打开沉重的 UE 编辑器,在 Content Browser 里一个个搜。
    • Rider 的好处:你可以直接在代码里看到派生关系(如你图中所选的 BP_ThirdPersonCharacter)。这让你在写代码时就能清晰地知道:这个 C++ 类不是孤立的,它有具体的蓝图实现在运行。

Rider 不仅能看到谁继承了它,还能在代码行上方直接显示这个变量在蓝图里被设置成了什么值。

你在 C++ 定义了一个 Health 变量,而在蓝图里被策划改成了 200 。Rider 会直接在 C++ 代码上方标注“Modified in BP: 200”,你不需要切换窗口去对数据。

极速定位与跳转

点击图中那个弹出框里的蓝图名字,Rider 会直接指令 UE 编辑器打开对应的蓝图

你在修一个 C++ Bug,发现是某个子类蓝图逻辑有问题,点一下就跳过去改了,不用在几千个文件夹里翻找。

Rider Uproject (原生 .uproject 模式) —— 强烈推荐  
  • 原理 :Rider 直接读取虚幻引擎的 .uproject 描述文件 ,跳过了生成和读取 .sln 的步骤。
  • 好处
    • 启动极快 :省去了生成 .sln 的时间,加载项目更轻量。
    • 更懂虚幻 :这是 JetBrains 专门为 UE 优化的模式,对引擎代码的理解更深,索引也更智能。
    • 文件夹干净 :不需要在项目目录下堆积一大堆 VS 的临时文件。

两组按钮分别控制
“启动编辑器” “实时调试” ,它们的逻辑完全不同:  
1. 左侧按钮:运行/调试“虚幻编辑器”(启动模式) 
当你点击左侧的 播放 (Run) 小虫子 (Debug) 时,操作的对象是 整个虚幻编辑器(Unreal Editor) : 
  • 作用: 从零开始启动虚幻引擎。它会编译你的 C++ 代码,然后拉起 UE 编辑器窗口。
  • 调试场景: 如果你修改了 C++ 构造函数、增加了新的 UProperty 或者遇到了编辑器启动崩溃 ,你需要用左侧的小虫子启动。
  • 缺点: 每次都要等引擎完整启动,非常耗时。
右侧按钮:附加到“已运行的进程”(轻量模式) 
这两个按钮通常代表 “Attach to Process”(附加到进程) ,针对的是 已经打开 的虚幻编辑器: 
  • 作用: Rider 不会重新启动引擎,而是像“插座”一样,直接把调试器挂载到你当前正在操作的那个 UE 编辑器窗口上。
  • 调试场景: 这是最常用的开发模式 。你已经在引擎里拉好了蓝图,发现一段 C++ 逻辑有问题,不需要关掉引擎重启,直接点右边的小虫子,设置断点,就能立刻拦截代码。

优点: 极速!省去了几分钟的引擎启动时间。

Cline没有codebase调用功能,也就是没有上下文记忆,官方通过提供一套memory bank prompt代替。这套prompt让Cline在在开发过程反复记录和读取项目需求文档、进度文档、偏好和规则、文件结构等,比codebase更适合有序的、按流程的项目开发。

“engine symbols might be missing in completion and navigation” 。 
  • 代码补全不完整 :你写代码时,Rider 可能暂时无法提示引擎自带的复杂 API。
  • 无法导航 :你想看某个引擎底层变量的实现,现在点过去可能没反应,或者显示“解析中”。
  • 搜索失效 :你搜索引擎里的某个资源或类名,可能搜不到。

耐心等待(仅此一次) 。这种“一站式索引”(One-time indexing)通常只在第一次 打开 UE 项目或引擎版本更新 后出现。进度条走完后,以后的启动就会飞快。

Rider 专门为虚幻引擎开发的
Unreal Link 日志查看器 。 
简单来说,它的好处是: 让你不需要切换回 Unreal Editor 界面,就能在 Rider 里直接看到引擎的实时运行报告。
具体功能包括: 
  • 实时同步日志 :当你运行游戏或编辑器时,所有的报错、警告和打印信息(如 UE_LOG )会实时同步到这里。
  • 双击跳转代码 :如果日志里显示某行代码出错了(比如 Null Pointer ),你直接双击那条日志 ,Rider 会立刻帮你定位到对应的 C++ 源代码行,非常高效。

Verbosity(详细程度) :可以设置只看“Error(错误)”或“Warning(警告)”,过滤掉没用的干扰信息。

Categories(类别) :虚幻有很多模块(如 LogAudio, LogTemp),你可以通过这个下拉菜单只关注你感兴趣的模块。

搜索功能 通过左上角的搜索框(放大镜图标),你可以快速在海量日志中找到特定的关键字。

CE 通常代表 Community Edition(社区版)

Rider 官方目前没有这种“分侧开关”。

在标准的 C++ 中,宏(如

#define )确实需要以 # 开头。但虚幻引擎(Unreal Engine)的这些宏(UCLASS , USTRUCT , UPROPERTY , UFUNCTION )非常特殊:

它们本质上是“空宏” 

如果你去翻看引擎底层代码,你会发现这些宏的定义通常是空的:

#define UCLASS(...) // 什么都没有

空的,为什么还要写?因为它们不是给 C++ 编译器 看的,

给虚幻的 UHT(Unreal Header Tool) 看的。

C++ 编译器正式开始编译之前,虚幻会先派一个叫 UHT 的小工具

扫描你的头文件。

不需要 # ,它直接扫描代码中的关键字 UCLASS()

  • 一旦看到这个标记,它就知道:“哦!这个类需要注册到反射系统,我要为它生成一些配套的 .generated.h 代码。”
  • 如果不加这个宏 ,你的类就是一个纯粹的
  • 一旦看到这个标记,它就知道:“哦!这个类需要注册到反射系统,我要为它生成一些配套的 .generated.h 代码。”

一个纯粹的 C++ 类,虚幻的蓝图、编辑器和垃圾回收系统就完全无法识别它。

传统的 # 宏是在预处理阶段就被“消掉”的。

幻希望这些宏能留在代码里,让 UHT 能够像解析常规语法一样解析它们。

虚幻希望这些宏看起来像是类、变量或函数的元数据(Metadata) ,而不是临时插入的预处理指令。

UCLASS() 必须写在 class 定义的正上方

(Eigenvalue Decomposition, EVD)是将一个方阵分解为特征向量和特征值对角矩阵乘积的数学方法

保留的特征值越少,压缩率越高,

  • 直接存储 :你需要存10,000个像素点。
  • 特征分解压缩
    1. 计算这万张脸的“协方差矩阵”,并进行特征值分解。
    2. 你会发现,前 50 个特征向量 (被称为“特征脸”)就能拼凑出所有人脸 90% 以上的特征(如轮廓、眼睛位置等)。
    3. 压缩结果 :现在你不再存 10,000 个像素,而是只存这 50 个特征脸,以及每张脸对这 50 个特征的“权重系数”。数据量从 10,000 降到了 50,压缩比高达 200 倍。
人脸图像压缩(Eigenfaces 例子) 
想象你有 10,000 张不同人的照片, 每张照片的尺寸为100×100像素10,000个

// SimpleRotatingCube.cpp
#include "SimpleRotatingCube.h"
#include "Components/StaticMeshComponent.h"
#include "UObject/ConstructorHelpers.h"

// Sets default values
ASimpleRotatingCube::ASimpleRotatingCube()
{
	// Set this actor to call Tick() every frame
	PrimaryActorTick.bCanEverTick = true;

	// Create static mesh component
	CubeMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("CubeMesh"));
	RootComponent = CubeMesh;

	// Load the default cube mesh (Shape_Cube)
	static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeMeshAsset(TEXT("/Engine/BasicShapes/Cube.Cube"));
	if (CubeMeshAsset.Succeeded())
	{
		CubeMesh->SetStaticMesh(CubeMeshAsset.Object);
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("Failed to load cube mesh!"));
	}

	// Set default rotation speed
	RotationSpeed = 45.0f;
}

// Called when the game starts or when spawned
void ASimpleRotatingCube::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void ASimpleRotatingCube::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	// Rotate the cube around Z axis
	FRotator NewRotation = GetActorRotation();
	NewRotation.Yaw += RotationSpeed * DeltaTime;
	SetActorRotation(NewRotation);
}

仅负责识别代码元素类型,不直接决定颜色;最终高亮颜色由IDE 的主题配色规则主导,插件仅会补充语法识别规则提供专属配色预设,不会覆盖 IDE 主题的核心配置逻辑。

“产品对比市场占比” 最标准、最通用的说法是:市场份额(Market Share) / 市场占有率

所以这是提前做了一个压缩的规则,如果对方不知道这个规则,那得到的数字是无意义的

Darcula 是一种由 JetBrains 开发的、专为 Java 桌面应用和代码编辑器设计的

深色、高对比度主题 ,也是 IntelliJ IDEA、PyCharm 等 IDE 的默认暗色主题。它注重色彩平衡,能显著减轻程序员长时间编写代码造成的眼睛疲劳。

快速区分哪些是“动作”(函数),哪些是“数据”(变量)。

哪些是动作,哪些是数据

扫描代码逻辑

过滤

常量(紫色 #9876AA :静态变量和常量通常呈现为淡紫色,暗示其“不可变”或“全局”的属性。

变量的变量,紫色的紫色,

struct (结构体) 完全可以编写成员函数

C++ 中, struct class 的功能几乎是 对等 的。它们的主要区别仅在于 默认访问权限 : 
  • struct :成员和继承默认是 public (公开的)。
  • class :成员和继承默认是 private (私有的)。

简单的辅助工具类(如你图中的 ConstructorHelpers ),习惯上使用 struct

代码简洁 :因为 struct 默认是 public

POD(Plain Old Data)兼容性 :虽然 C++ 的 struct 增强了,但它仍然保留了 C 语言

物理结构

C++ 里,你可以把 struct 当作一个默认全公开的类 来使用

甚至支持继承和多态。

"C with Classes",它的核心目标之一是向下兼容 C 语言

C++ 编译器下直接运行,C++ 必须保留 struct

struct (数据导向) :通常暗示这只是一个“数据的容器” 。如果你看到一个 struct ,你会预期它主要包含公共成员变量,方法只是为了方便操作这些数据(如你图中虚幻引擎的辅助工具类)。

轻量级插件、配置信息或数学向量(如 Vector3) 时,使用 struct 可以省去频繁写 public: 的麻烦,

底层实现来看,在 C++ 编译器眼里,struct class 的机器码实现几乎没有任何区别

主要是为了让 C 程序员能无缝迁移

C# 作为比 C++ 更晚出现的语言,保留

struct (值类型)绝不是为了简单的“兼容”,

变量只是一个指向堆内存的指针。

Struct

存储在栈 (Stack)

没有指针开销,

struct 提供了两个致命诱惑:

一个包含 100 万个坐标点的数组。

class :数组里存的是 100 万个指针,指针指向分散在堆各处的对象。CPU 访问时会频繁发生“缓存失效”(Cache Miss)。

定义一个“有身份” 的实体(

很大,

生命周期长。

struct :当你定义一个“值”

数字一样用完即丢。

在最新的 C# 版本中,微软不仅没有废除 struct ,反而引入了更多强化版(如 readonly struct ref struct

处理大数据块(如 Span<T> )时,达到接近甚至超越 C++ 的性能 ,同时保持 C# 的安全性。

极客对“装箱(Boxing)”深恶痛绝。如果把 struct 传给一个接收 object 的接口,它就会被丢进堆里变成引用类型,触发 GC。

struct 传给一个接收 object 的接口

丢进堆里变成引用类型,

大量使用泛型约束 (如 where T : struct )。这样编译器会为每种特定的结构体生成专用的机器码

C# 近几年最硬核的进化

ref struct 确保数据永远只留在栈上

绝对不进堆。

极致的内联优化 ( readonly struct
极客会给所有不修改成员的结构体加上 readonly 关键字。

告诉编译器:“这个东西是不可变

大胆地进行内存优化。

“Data-Oriented Design” (DOD,面向数据设计) 。 

降级”到类似 C 语言

不用 class ,堆(Heap)上就几乎没有对象。

C# 的垃圾回收器(GC)会因为“无活可干”而处于休眠状态。

程序永远不会因为 GC 扫描内存而产生毫秒级的“瞬间卡顿”。

代价

必须

精准计算每个数据的生命周期。

内存布局是固定的

直接把一块内存二进制流(比如从网络收到的包)强行

(Cast)成你的 struct

不需要像 class 那样解析 JSON、映射字段,直接把字节流当结构体用。

软件工程角度看

放弃了多态 struct 不支持继承)。

放弃了封装的便利性 (值拷贝传递很危险)

代码变得极其难写、难读、难维护

但从硬件效率 角度看,这是一种“超进化”

你不再是写程序给“虚拟机”看,而是直接在给“CPU”下指令。

Unity 引擎近年来推行的 ECS (Entity Component System) 就是这种极端思想的产物: 
  • Entity :只是一个 int ID。
  • Component :全是 struct
  • System :纯静态方法处理数组。
    结果 :它让原本只能跑 100 个角色的手机游戏,瞬间能跑 10,000 个。  

可以决定它是在上(自动销毁)还是在上(手动 delete

struct 的销毁是真正的“主动且即时”

栈指针一移动,

  • 随着调用栈的塌陷自然消失了。  

struct 支持继承,就会出现“子类比父类大”的情况,这会导致无法在栈上预留固定大小的内存,也无法实现快速的按位拷贝(Bitwise Copy)。

栈上的数据在函数结束时销毁

堆----动态分配内存

不手动 delete (C++)或没有被 GC 回收(C#)---------------

跨越多个函数调用, 多个线程一直存在

紫光(380−450 nm)处于电磁波频率的物理极限边缘。

  • 能量稳态:根据普朗克公式 E=hf,紫色光子具有可见光范围内最高的能量。在生物视觉系统的信号接收端,高频振荡趋向于一种“极限环”(Limit Cycle)状态。当频率逼近视觉暂留与处理的临界值时,信号的波动细节被掩盖,宏观上呈现出一种高能且稳定的“张力平衡”。

class 还是 struct

行为完全对等

{ MyStruct s; // 或 MyClass c; } // 变量作用域结束,自动调用析构函数,内存瞬间回收。

auto s = new MyStruct(); // 或 new MyClass(); delete s; // 必须手动执行这一步,否则析构函数永远不执行,内存泄露。

唯一的区别依然只是 默认权限 : 
  • struct 默认 public
  • class 默认 private

“销毁”

编译器生成的汇编代码对两者是一视同仁

C# struct → 强制值语义(通常在栈)。

  • class
    →right arrow
    强制引用语义(必须在堆,由 GC 销毁)。  

紫色(Purple/Violet) 的核心规则并不是因为“泛型”,而是为了区分数据的身份与作用域

成员变量 (Fields / Member Variables)

Darcula 的逻辑里,紫色通常分配给:属于类或结构体的“持久状态”

为什么 NewRotation.Yaw 是紫色的?
Yaw FRotator 结构体内部定义的成员变量(Field) 。当你通过 . 操作符访问它时,IDE 用紫色提醒你:你正在修改一个对象的“内部状态”,而不是一个临时的局部变量。

  • ASimpleRotatingCube 类中定义的一个 成员变量 (在 .h 文件里定义的)。它代表了这台“旋转滑块”的固有属性。  

为什么 DeltaTime 作为函数变量不是紫色?

函数的括号里定义,它是一个局部参数

紫色 :这是这个对象本身持有的数据(修改它会影响对象的长期状态)。

一行代码里紫色很多时,你立刻就知道这段代码在频繁修改对象状态

C# 中,如果你使用了自动属性(Property),它有时也会被染成紫色或另一种特殊颜色

但在

C++

紫色的唯一规则就是:它是成员(Field)

语义高亮(Semantic Highlighting) 与普通语法高亮(Syntax Highlighting) 的本质区别。

OpenRouter 的模型详情页中,你可以清楚地看到 SiliconFlow 列在供应商名单里。

硅基流动在 OpenRouter 上与其他供应商(如 DeepInfra, NovitaAI, Together AI)竞争。OpenRouter 会根据价格、延迟(Latency)和吞吐量(Throughput)自动选择其中最快或最便宜的一个。

支持“图片+文字”混合输入的模型通常被称为

Multimodal(多模态) 模型,但在 API 平台(如 SiliconFlow 或 OpenRouter)上,它们通常仍然归类在 Chat Chat Completion 接口下。

目前的行业标准(由 OpenAI 建立)将对话和视觉整合在同一个数据结构中。  
  • 普通 Chat :输入是 text
  • 带图 Chat :输入是一个数组,包含 text 类型和 image_url 类型。
    对于程序来说,这只是 Message 内容的不同 ,而不是接口类型的改变。

OpenRouter 是目前全球 LLM 开发者首选的路由层,其市场地位体现在极高的 Token 消耗量 开发者覆盖面

  • 务规模 :截至 2026 年初,OpenRouter 已拥有超过 500 万开发者用户
  • 流量爆发 :其全平台周 token 消耗量在 2026 年 3 月达到约 12.1 万亿 ,相较于一年前增长了 12.7 倍。

是衡量模型全球流行度的核心指标。目前,中国模型(如 MiniMax M2.5、Kimi K2.5)在 OpenRouter 上的 token 消耗占比已高达 61%

DeepSeek R1 等热门模型的推理速度测试中,SiliconFlow Pro 版的输出速度常居国内第一梯队(约 24.7 字/秒),显著优于许多通用云厂商。

the number of Parameters within a neural network. You can think of parameters as the "synapses" or "connection points" in an artificial brain.

3.Physical Storage (VRAM)
Model size directly dictates how much GPU memory (VRAM) you need to run it.
A parameter is typically stored as a number. In standard half-precision (FP16), each parameter takes 2 bytes.
Math: An 8B model needs 8 x 2 = 16 GB of VRAM just to load.
Quantization: This is why we use "4-bit" or "8-bit" versions (like on SiliconFlow)—itcompresses the parameters so a 7oB model can fit on smaller, cheaper hardware.

More parameters allow the model to "memorize" more facts, languages, and coding syntax.

"MoE" Exception (Mixture of Experts)

Some modern large models (like DeepSeek or GPT-4) are "Total 600B" but only "Active 37B."

  • model has a massive library of knowledge (Total Size), but only uses the most relevant "Expert" neurons for your specific question (Active Size), keeping it fast.  

model size is a strategic choice made by the training company based on the intended use case, hardware constraints, and the "Scaling Laws" of AI. 

The "content" of model size consists of the

trillions of numerical values (called parameters) that act as the model's "memory". These numbers are stored in a large file, often several gigabytes in size, and represent the strength of connections between artificial neurons.

the context size depends on the training company or the ai model ?

depends on

both , but the AI training company makes the final executive decision.

doesn't feel "10 times smarter" to the average user.

A 1T model can memorize more obscure facts (e.g., rare legal precedents or niche medical data) that a 100B model might hallucinate.

most companies (like Meta with Llama 3) stopped at 405B instead of going

特性  DeepSeek-V3 DeepSeek-R1
定位 通用型高效率模型 推理型逻辑模型
核心优势 响应极快,知识储备广,性价比极高 擅长数学、编程、逻辑思维等深度任务
交互逻辑 直接生成答案 “慢思考”模式 :先展示思维链(CoT),再给答案
对标产品 GPT-4o, Claude 3.5 Sonnet OpenAI o1 系列
训练方式 经典的预训练 + SFT 引入大规模强化学习 (RL) 提升推理能力

较小参数规模的模型(如 7B, 14B 等)通常提供免费调用。

使用 SiliconFlow (硅基流动) 提供的 API Key 时,您应当选择

OpenAI 兼容模式 (OpenAI Compatible) 作为提供商。

-A22B- :激活参数量 (Activated Parameters)  
这代表该模型采用了 MoE (混合专家) 架构。  
  • 含义 :虽然整个模型的总参数量高达 235B (2350 亿),但在处理具体的每一个 Token(字/词)时,只有 22B (220 亿)参数被激活并参与计算。

拥有“大模型”的知识容量和逻辑上限的同时,保持了“中型模型”的推理速度 低延迟

-Instruct :指令微调版本  
  • 含义 :这表示模型经过了“对齐”训练,专门用于理解并执行人类的自然语言指令。
  • 编译状态 :最后一行明确显示 Result: Succeeded ,表示没有任何报错。

成功为你的项目 ZMDRender 构建了 Editor 版本(即 ZMDRenderEditor ),配置为 Win64 Development

UnrealEditor-ZMDRender.dll :这是最关键的动态库文件,有了它,你就可以在 Unreal Editor 中看到并运行你写的 C++ 代码逻辑了。

ZMDRenderEditor.target :生成了目标元数据。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐