<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Betsy Blog - 分享网络技术、服务器部署、Unity开发、AI技术应用与原理</title><description>分享网络技术、服务器部署、Unity开发、AI技术应用与原理</description><link>https://www.micostar.cc/</link><language>zh_CN</language><item><title>Unity-PICO-共享空间锚点开发</title><link>https://www.micostar.cc/posts/unitymr-spatial-anchor/</link><guid isPermaLink="true">https://www.micostar.cc/posts/unitymr-spatial-anchor/</guid><description>这是我个人2025年下半年中的一个较为出色的MR（Mixed Reality）原理研究，这一部分国内知识分享很少，知识垄断明显，故决定为后来的其他要研究这方面的做出更多的经验分享！</description><pubDate>Fri, 02 Jan 2026 17:01:48 GMT</pubDate><content:encoded>&lt;h1&gt;Unity开发MR中应用空间锚点的场景&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;多人联机游戏需要对齐玩家元素（位置、物体位置等）&lt;/li&gt;
&lt;li&gt;将物体持久化在某个现实对应的地方&lt;/li&gt;
&lt;li&gt;没有大空间技术的普通消费级PICO头显设备MR玩家的同步&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;官方对于空间锚点的定义
::link{url=&quot;https://developer-cn.picoxr.com/document/unity/spatial-anchors/&quot; title=&quot;空间锚点 | PICO 开发者平台&quot; description=&quot;空间锚点技术可以将虚拟环境中的位置与真实世界中的位置进行锚定。放置空间锚点并将其持久化至设备磁盘中后，用户再次走到放置锚点的位置时，系统可以找回该锚点并返回给应用。&quot; image=&quot;https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/2e96ba68be484bdc8e22457a6d5f2cf4~tplv-goo7wpa0wc-quality:q75.image&quot;}&lt;/p&gt;
&lt;h2&gt;1.自身坐标的正确标定&lt;/h2&gt;
&lt;p&gt;在开始应用空间锚点之前，我们需要先将自身的坐标真实确定，比如身高1.7m，在你头显里面的坐标也应该贴近(x,1.7,x)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;房间标定，&lt;a href=&quot;https://developer-cn.picoxr.com/document/unity/scene-capture/&quot;&gt;查看官方&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;地面标定，位于PICO头显的设置-安全防护-调整地面高度
&lt;img src=&quot;https://www.micostar.cc/images/unitysp2.webp&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2.核心难点：多人开发的坐标系的统一与区分&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;每台PICO都有其独立的本地坐标系，而我们MR不同于VR的难点在于如何将两台及以上的坐标系统一起来；即虚拟坐标系（Coordinate System）统一到同一个物理参考系中&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;初期解决方法&lt;/strong&gt;&lt;/em&gt;：我们通过手动标定自己的原点（XZ）来完成虚拟与现实的统一，但是及其考研玩家的现实校准的地方的一致性，不方便；基本的核心原理都是将XROrigin置于一个根Root下进行变换
&lt;img src=&quot;https://www.micostar.cc/images/unitysp3.webp&quot; alt=&quot;&quot; /&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;手动标定代码&amp;lt;/summary&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    /// 标定入口
    /// &amp;lt;/summary&amp;gt;
    public void OnCalibrateOriginPressed()
    {
        if (userCamera == null)
        {
            SetLogInfo(&quot;错误：无法找到用户相机，无法进行标定！&quot;);
            return;
        }

        SetLogInfo(&quot;正在根据当前玩家位置标定共享原点...&quot;);

        // 1. 获取玩家头显在地板上的投影位置（Y=0）
        Vector3 headPositionOnFloor = new Vector3(userCamera.position.x, 0, userCamera.position.z);

        // 2. 获取玩家头显的水平朝向（忽略俯仰和侧倾）
        Quaternion headYawRotation = Quaternion.Euler(0, userCamera.eulerAngles.y, 0);

        // 3. [核心] 调用对齐方法，传入我们计算出的、理想化的玩家姿态
        //    这个方法会计算一个逆向变换，将这个姿态“拉回”到世界的(0,0,0)
        AlignSharedSpaceOrigin(headPositionOnFloor, headYawRotation);
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    /// 坐标系的统一变换
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&quot;targetPosition&quot;&amp;gt;目标位置&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;targetRotation&quot;&amp;gt;目标旋转&amp;lt;/param&amp;gt;
    private void AlignSharedSpaceOrigin(Vector3 targetPosition, Quaternion targetRotation)
    {
        if (xrSharedSpaceOrigin == null)
        {
            Debug.LogError(&quot;XR Shared Space Origin 未在Inspector中指定，无法对齐坐标系！&quot;);
            return;
        }

        // 计算将 targetPosition 和 targetRotation “拉回”到世界原点(0,0,0)所需的逆向变换
        Quaternion inverseRotation = Quaternion.Inverse(targetRotation);
        Vector3 inversePosition = inverseRotation * -targetPosition;

        // 将这个逆向变换应用到玩家的根节点上
        xrSharedSpaceOrigin.SetPositionAndRotation(inversePosition, inverseRotation);

        SetLogInfo(&quot;共享原点已成功标定！&quot;);
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;p&gt;以上的手动标定方案及其依赖双方对齐时的高度（因为这是是一个完全重设世界0点坐标系的过程），不精准，不稳定，只能作为开发过渡&lt;/p&gt;
&lt;h2&gt;3.空间锚点基本&lt;/h2&gt;
&lt;p&gt;对于空间锚点的基本应用（放置、持久化、销毁等）我的建议是多去研究上面那个官方基本文档，我这里碍于篇幅，只会提供不易发现，被垄断的部分，不过还是要注意以下几点核心&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;老老实实走PICO云端的方案，尽量不要尝试锚点数据走本地（因为其中的点云数据是加密的，解密成本高，不值）&lt;/li&gt;
&lt;li&gt;锚点的主要传输依赖核心就是uuid，请在你的联机方案中重点聚焦于uuid的传输，放置、销毁、持久化均高度依赖uuid；&lt;/li&gt;
&lt;li&gt;锚点的预制体一定要附带PXR_Spatial Anchor脚本&lt;/li&gt;
&lt;li&gt;放置方面，更建议以手柄位置作为放置点，放置前的视觉预览体记得去掉（PXR_Spatial Anchor脚本）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4.共享空间锚点&lt;/h2&gt;
&lt;h3&gt;1.流程&lt;/h3&gt;
&lt;p&gt;流程建议为联机-放置共享空间锚点-下载客户端-同步
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;流程图&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    participant Host as 房主 (Host)
    participant Server as PICO Cloud
    participant Net as Network (RPC)
    participant Client as 客户端 (Client)

    Note over Host: 1. 放置 &amp;amp; 创建锚点
    Host-&amp;gt;&amp;gt;Server: UploadSpatialAnchor
    Server--&amp;gt;&amp;gt;Host: 返回 UUID
    Host-&amp;gt;&amp;gt;Host: 记录 P_Host, Q_Host

    Note over Client: 2. 新玩家加入 (OnNetworkSpawn)
    Client-&amp;gt;&amp;gt;Host: RequestAnchorData (ServerRpc)
    Host--&amp;gt;&amp;gt;Client: 发送 UUID, P_Host, Q_Host (ClientRpc)

    Note over Client: 3. 对齐流程
    Client-&amp;gt;&amp;gt;Server: Download (UUID)
    Server--&amp;gt;&amp;gt;Client: 锚点数据
    Client-&amp;gt;&amp;gt;Client: Locate (获取 P_Client)
    Client-&amp;gt;&amp;gt;Client: 计算 Offset (忽略Y轴)
    Client-&amp;gt;&amp;gt;Client: 移动 XR Origin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.详细解析&lt;/h3&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;详细解析&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;主机创建&lt;/strong&gt;：房主记录下该锚点在自己坐标系下的位置 $P_{Host}$ 和旋转 $Q_{Host}$。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;客机加入&lt;/strong&gt;：通过 ClientRPC 拿到 $P_{Host}$ 与 $Q_{Host}$，然后再下载共享的空间锚点（已上传到云）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;加载锚点&lt;/strong&gt;：获取其在自己本地坐标系的位置 $P_{Client}$ 与旋转 $Q_{Client}$，然后经过数学矩阵变换后移动 XROrigin 的父物体 Root 节点即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;变换计算&lt;/strong&gt;：我们需要计算一个变换矩阵 $T_{Align}$。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$P_{Host}, Q_{Host}$：锚点在&lt;strong&gt;房主&lt;/strong&gt;世界空间中的位置和旋转。&lt;/li&gt;
&lt;li&gt;$P_{Client}, Q_{Client}$：锚点在&lt;strong&gt;客户端&lt;/strong&gt;本地空间中的位置和旋转（未校准前）。&lt;/li&gt;
&lt;li&gt;$Q_{Align}$：给客户端的旋转矫正。&lt;/li&gt;
&lt;li&gt;$P_{Align}$：给客户端的位置矫正。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;旋转对齐&lt;/strong&gt;：对齐水平朝向（Yaw），&lt;strong&gt;必须忽略 X/Z 轴的倾斜&lt;/strong&gt;，以保证重力方向永远垂直向下。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;1. 提取 Yaw 旋转&lt;/strong&gt;
对于任一旋转四元数 $Q$，其 Forward 向量在水平面上的投影为：
$\vec{F}&lt;em&gt;{projected} = \text{ProjectOnPlane}(Q \cdot \vec{Z}&lt;/em&gt;{forward}, \vec{Y}&lt;em&gt;{up})$
提取后的 Yaw 旋转为：
$Q&lt;/em&gt;{yaw} = \text{LookRotation}(\vec{F}&lt;em&gt;{projected}, \vec{Y}&lt;/em&gt;{up})$
房主与客户端均这样处理，得到 $Q_{H_Yaw}$ 和 $Q_{C_Yaw}$。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 计算旋转差值&lt;/strong&gt;
需要一个旋转 $Q_{Align}$，使得客户端旋转后等于房主的旋转：
$Q_{Align} \times Q_{C_Yaw} = Q_{H_Yaw}$
推导得出：
$Q_{Align} = Q_{H_Yaw} \times Q_{C_Yaw}^{-1}$&lt;/p&gt;
&lt;p&gt;代码对应：
&lt;code&gt;Quaternion rotAlign = hostRot * Quaternion.Inverse(clientRot);&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;位置对齐&lt;/strong&gt;：客户端锚点被父物体变换后，位置应等于房主锚点的位置。
&lt;strong&gt;公式推导：&lt;/strong&gt;
$P_{Host} = (Q_{Align} \times P_{Client}) + P_{Align}$
其中 $Q_{Align} \times P_{Client}$ 是将客户端的锚点位置进行旋转矫正。
需要求 $P_{Align}$，移项可得：
$P_{Align} = P_{Host} - (Q_{Align} \times P_{Client})$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;代码对应：
&lt;code&gt;Vector3 posAlign = hostPos - rotAlign * clientPos;&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;地面模式修正&lt;/strong&gt;：虽然公式中得出了一定的 Y 轴数学解，但通常由地面标定误差引起，且我们采用 &lt;code&gt;TrackingOriginMode.Floor&lt;/code&gt;，故丢弃 Y 轴偏移。
公式对应：
$P_{Align}.y = 0$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;代码对应：&lt;code&gt;posAlign.y = 0f;&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;玩家数据模拟&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;数学矩阵推演&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;房主锚点：$P_{host} = (2.0, 0.0, 3.0)$，朝向 Yaw = 30°&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;客户端锚点：$P_{client} = (3.0, 0.0, 2.0)$，朝向 Yaw = 10°&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Yaw 旋转矩阵&lt;/strong&gt;：
$R_y(\theta) = \begin{bmatrix} \cos\theta &amp;amp; 0 &amp;amp; \sin\theta \ 0 &amp;amp; 1 &amp;amp; 0 \ -\sin\theta &amp;amp; 0 &amp;amp; \cos\theta \end{bmatrix}$
房主为：$R_{\text{host}} = R_y(30^\circ) = \begin{bmatrix} 0.8660254 &amp;amp; 0 &amp;amp; 0.5 \ 0 &amp;amp; 1 &amp;amp; 0 \ -0.5 &amp;amp; 0 &amp;amp; 0.8660254 \end{bmatrix}$
客户端为：$R_{\text{client}} = R_y(10^\circ) = \begin{bmatrix} 0.98480775 &amp;amp; 0 &amp;amp; 0.17364818 \ 0 &amp;amp; 1 &amp;amp; 0 \ -0.17364818 &amp;amp; 0 &amp;amp; 0.98480775 \end{bmatrix}$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;旋转对齐矩阵&lt;/strong&gt;：
$R_{\text{align}} = R_{\text{host}} R_{\text{client}}^{-1} \approx \begin{bmatrix} 0.939693 &amp;amp; 0 &amp;amp; 0.34202 \ 0 &amp;amp; 1 &amp;amp; 0 \ -0.34202 &amp;amp; 0 &amp;amp; 0.939693 \end{bmatrix}$&lt;/p&gt;
&lt;p&gt;代码：&lt;code&gt;Quaternion rotAlign = hostRot * Quaternion.Inverse(clientRot);&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;平移向量 $P_{Align}$&lt;/strong&gt;：
$R_{align}P_{client} \approx \begin{bmatrix} 0.939693 &amp;amp; 0 &amp;amp; 0.34202 \ 0 &amp;amp; 1 &amp;amp; 0 \ -0.34202 &amp;amp; 0 &amp;amp; 0.939693 \end{bmatrix} \begin{bmatrix} 3 \ 0 \ 2 \end{bmatrix} \approx \begin{bmatrix} 3.503118 \ 0 \ 0.853325 \end{bmatrix}$
$P_{align} = P_{host} - R_{align}P_{client} \approx \begin{bmatrix} 2 \ 0 \ 3 \end{bmatrix} - \begin{bmatrix} 3.503118 \ 0 \ 0.853325 \end{bmatrix} \approx \begin{bmatrix} -1.503118 \ 0 \ 2.146675 \end{bmatrix}$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;4×4 齐次变换矩阵 $T_{align}$&lt;/strong&gt;：
$T_{\text{align}} = \begin{bmatrix} R_{\text{align}} &amp;amp; \mathbf{p}_{align} \ \mathbf{0}^\mathsf{T} &amp;amp; 1 \end{bmatrix} \approx \begin{bmatrix} 0.939693 &amp;amp; 0 &amp;amp; 0.34202 &amp;amp; -1.503118 \ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \ -0.34202 &amp;amp; 0 &amp;amp; 0.939693 &amp;amp; 2.146675 \ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix}$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;：经过 $T_{align}$ 变换后，客户端观测到的锚点将完美对齐到房主的位置。&lt;/p&gt;
&lt;p&gt;代码实现：
&lt;code&gt;xrSharedSpaceOrigin.SetPositionAndRotation(_currentAlignPos, _currentAlignRot);&lt;/code&gt;
&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.详细代码（需要适配你的网络架构等我是NGO）&lt;/h3&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;具体代码&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    /// 执行空间对齐算法
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&quot;hostPos&quot;&amp;gt;房主发来的锚点世界坐标&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;hostRot&quot;&amp;gt;房主发来的锚点世界旋转&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;clientPos&quot;&amp;gt;客户端本地读取到的锚点坐标&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;clientRot&quot;&amp;gt;客户端本地读取到的锚点旋转&amp;lt;/param&amp;gt;
    private void ApplyAlignment(Vector3 hostPos, Quaternion hostRot, Vector3 clientPos, Quaternion clientRot)
    {
        // 1. 提取 Yaw (保持重力垂直)
        if (yawOnly)
        {
            hostRot   = ExtractYaw(hostRot);
            clientRot = ExtractYaw(clientRot);
        }
        
        // 2. 计算旋转偏移
        Quaternion rotAlign = hostRot * Quaternion.Inverse(clientRot);

        // 3. 计算位置偏移 (Host - Rot * Client)
        Vector3 posAlign = hostPos - rotAlign * clientPos;

        // 既然双方都是 Floor 模式，XR Origin 的 Y 轴必须与物理地面重合，也就是必须为 0。
        // 任何 Y 轴的偏移都会导致玩家浮空或陷地。
        // 我们完全忽略锚点在高度上的测量误差，只信任 X, Z 和 旋转。
        posAlign.y = 0f;

        // 4. 平滑应用
        if (_hasCurrentAlign &amp;amp;&amp;amp; alignLerp &amp;lt; 1f)
        {
            _currentAlignRot = Quaternion.Slerp(_currentAlignRot, rotAlign, alignLerp);
            _currentAlignPos = Vector3.Lerp(_currentAlignPos, posAlign, alignLerp);
        }
        else
        {
            _currentAlignRot = rotAlign;
            _currentAlignPos = posAlign;
            _hasCurrentAlign = true;
        }

        if (xrSharedSpaceOrigin != null)
        {
            xrSharedSpaceOrigin.SetPositionAndRotation(_currentAlignPos, _currentAlignRot);
        }
        
        // 调试日志
        float heightCorrection = hostPos.y - clientPos.y;
        // 如果这个值很大（比如 &amp;gt; 0.2），说明其中一人的地面标定严重错误，需要重置系统边界
        Debug.Log($&quot;[Align] 已强制锁定地面。忽略的高度误差: {heightCorrection:F3}m&quot;);
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h3&gt;4.辅助检验代码&lt;/h3&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;代码&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;using UnityEngine;
using TMPro;
using Unity.XR.PXR;
using Unity.Netcode;

public class DebugInfoManager : MonoBehaviour
{
    [Header(&quot;UI 设置&quot;)]
    [Tooltip(&quot;拖入用于显示坐标信息的 TextMeshProUGUI&quot;)]
    public TextMeshProUGUI debugText;

    [Header(&quot;对象引用&quot;)]
    public Transform headCamera;       // 拖入 Main Camera
    public Transform xrOriginParent;   // 拖入 XR_SHARED_SPACE (XR Origin的父物体)

    private void Update()
    {
        if (debugText == null) return;
        if (headCamera == null) headCamera = Camera.main?.transform;

        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        // 1. 身份信息
        string role = &quot;未连接&quot;;
        if (NetworkManager.Singleton != null &amp;amp;&amp;amp; NetworkManager.Singleton.IsListening)
        {
            role = NetworkManager.Singleton.IsServer ? &quot;房主 (Host)&quot; : &quot;玩家 (Client)&quot;;
        }
        sb.AppendLine($&quot;身份: &amp;lt;color=yellow&amp;gt;{role}&amp;lt;/color&amp;gt;&quot;);

        // 2. 关键坐标 (World)
        // 如果这个 Y &amp;gt; 2.0，说明你被错误的对齐逻辑抬飞了
        Vector3 worldPos = headCamera != null ? headCamera.position : Vector3.zero;
        sb.AppendLine($&quot;World Head: {FormatVec(worldPos)}&quot;);

        // 3. 本地坐标 (Local - 相对于 Origin)
        // 正常站立时，Y 应该在 1.6 ~ 1.8 之间 (Floor模式)
        Vector3 localPos = headCamera != null ? headCamera.localPosition : Vector3.zero;
        sb.AppendLine($&quot;Local Head: {FormatVec(localPos)}&quot;);

        // 4. 原点偏移 (XR Origin)
        // Client 的 Y 必须是 0.00，如果不是，说明对齐逻辑错了
        if (xrOriginParent != null)
        {
            sb.AppendLine($&quot;Origin Pos: {FormatVec(xrOriginParent.position)}&quot;);
            sb.AppendLine($&quot;Origin Rot: {xrOriginParent.eulerAngles.y:F1}°&quot;);
        }

        // 5. 锚点误差监控 (从 Manager 获取)
        if (PXRSample_SpatialAnchorManager.Instance != null &amp;amp;&amp;amp; PXRSample_SpatialAnchorManager.Instance.isCalibrated)
        {
            sb.AppendLine(&quot;&amp;lt;color=green&amp;gt;[已对齐]&amp;lt;/color&amp;gt;&quot;);
        }
        else
        {
            sb.AppendLine(&quot;&amp;lt;color=red&amp;gt;[未对齐]&amp;lt;/color&amp;gt;&quot;);
        }

        debugText.text = sb.ToString();
    }

    private string FormatVec(Vector3 v)
    {
        // X, Y, Z (保留2位小数)
        return $&quot;({v.x:F2}, &amp;lt;color=#00FFFF&amp;gt;Y:{v.y:F2}&amp;lt;/color&amp;gt;, {v.z:F2})&quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h3&gt;5.简单的完美同步&lt;/h3&gt;
&lt;p&gt;基本实现：现实=虚拟，虚实合一&lt;/p&gt;
&lt;p&gt;&amp;lt;u&amp;gt;&lt;strong&gt;请注意房主再放置锚点后要细细观察锚点周围的空间，尽量保持平稳角度，确保上传是缓慢进行的，一般一下子上传完成均不准；客户端在确认房主上传完毕后请仔细以房主视角观察&lt;/strong&gt;&amp;lt;/u&amp;gt;&lt;/p&gt;
&lt;p&gt;::link{url=&quot;https://space.micostar.tech&quot; title=&quot;Spatial Alignment Visualizer&quot; description=&quot;空间锚点对齐算法的交互式可视化演示工具，帮助理解坐标系变换原理。访问密码：pico&quot;}&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/unitysp4.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Antigravity登陆FAQ解决方法！</title><link>https://www.micostar.cc/posts/antigravity-login/</link><guid isPermaLink="true">https://www.micostar.cc/posts/antigravity-login/</guid><description>解决 Antigravity 登录时出现 FAQ 错误的完整指南。排查节点质量、账号国家归属地问题，以及网页端提示成功但仍显示 FAQ 的终极解决方案，帮助你顺利使用 Gemini AI 服务。</description><pubDate>Sun, 28 Dec 2025 12:16:50 GMT</pubDate><content:encoded>&lt;h2&gt;首先我们要确保你的账号问题不是出自以下方面&lt;/h2&gt;
&lt;h2&gt;节点问题&lt;/h2&gt;
&lt;p&gt;请确保你的节点干净一点，不要是很差的
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity1.webp&quot; alt=&quot;Antigravity节点质量检查示例&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;账号国家归属地问题&lt;/h2&gt;
&lt;p&gt;请确保你的账号国家归属地为Antigravity支持的地区&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://policies.google.com/terms?hl=zh_CN&quot;&gt;查看你的账号地区&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;出现网页端提示成功，但FAQ&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/Antigravity3.webp&quot; alt=&quot;Antigravity网页端登录成功提示&quot; /&gt;
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity2.webp&quot; alt=&quot;Antigravity FAQ错误页面截图&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;FAQ解决方法&lt;/h2&gt;
&lt;h2&gt;原作者项目&lt;/h2&gt;
&lt;p&gt;::github{repo=&quot;lbjlaq/Antigravity-Manager&quot;}&lt;/p&gt;
&lt;h2&gt;解决效果&lt;/h2&gt;
&lt;p&gt;这个强大的插件可以帮助我们实现FAQ登陆不了的问题，实测完美解决！！
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity5.webp&quot; alt=&quot;Antigravity Manager解决FAQ后成功登录界面&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;解决步骤&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;按照源项目完成下载后，直接添加账号选择OAuth授权登陆即可，登陆完成则出现
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity4.webp&quot; alt=&quot;Antigravity Manager OAuth授权登录成功界面&quot; /&gt;&lt;/li&gt;
&lt;li&gt;然后直接选择从该工具页面切换账号启动Antigravity即可，如果是已经启动了Antigravity则按照提示，选择关闭即可（不要选择重启）
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity5.webp&quot; alt=&quot;Antigravity Manager切换账号启动操作界面&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;项目极其强大的另一点&lt;/h2&gt;
&lt;p&gt;项目不仅可以完美解决我们的FAQ登录问题，还可以让我们一键开启API反代服务，让我们的Antigravity可以使用的模型完美转化为外部接口，具体功能还请大家自行尝试
&lt;img src=&quot;https://www.micostar.cc/images/Antigravity6.webp&quot; alt=&quot;Antigravity Manager API反代服务功能界面&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>GeminiCLI账号切换插件，让你的开发之路不在繁琐！</title><link>https://www.micostar.cc/posts/geminiclimanager/</link><guid isPermaLink="true">https://www.micostar.cc/posts/geminiclimanager/</guid><description>最近Unity项目开始庞大了，单一的网页交互式AI开发效率远不如编译器内AI，但是我都没拿到钱也不想使用CluadeCode;诶,送了我n个学生Pro的Google大善人又发力了！</description><pubDate>Sun, 21 Dec 2025 22:00:16 GMT</pubDate><content:encoded>&lt;h1&gt;项目地址&lt;/h1&gt;
&lt;p&gt;::github{repo=&quot;Besty0728/Gemini-CLI-Auth-Manager&quot;}&lt;/p&gt;
&lt;h1&gt;为什么突然想要使用GeminiCLI以及要编写这个插件呢？&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;项目仍未带给我个人实际收益，不值得使用付费的ClaudeCode&lt;/li&gt;
&lt;li&gt;项目内容越来越大，单一Web对话式AI已经很难在有限上下文下保持高开发效率了，不如使用“嵌入”式AI&lt;/li&gt;
&lt;li&gt;Google大善人给了我n个AI Pro账号，在工作室电脑犯病登不上Antigravity的情况下，GeminiCLI同样对AI Pro用户有更高的额度供我使用&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;那为什么突然想到要开发这个插件呢？&lt;/h1&gt;
&lt;h2&gt;1.Unity开发整体消耗较大&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;昨天一下午与Gemini共同燃烧了一下午修复遗留的奇妙BUG，结束后看到了消耗的Token高达百万，以及请求次数也很多（包括整体的第一次项目初始化）让我不得不担心一个账号的额度是否足够我一个人一天的开发&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2.账号切换麻烦&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;账号的默认切换方式只有/auth然后再选择登录其他账号，不保证哪次登录又需要验证码了；很浪费时间&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;最后使用效果&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;如图所示，切换丝滑
&lt;img src=&quot;https://www.micostar.cc/images/geminicli2.webp&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Unity自定义添加模块</title><link>https://www.micostar.cc/posts/unity-module/</link><guid isPermaLink="true">https://www.micostar.cc/posts/unity-module/</guid><description>Unity Hub 无法添加模块的解决方案。通过 Unity 官方下载存档手动安装 Android、iOS 等平台模块，以及中文语言包和文档的正确安装路径配置，完美解决模块缺失问题。</description><pubDate>Tue, 02 Dec 2025 20:08:07 GMT</pubDate><content:encoded>&lt;h2&gt;UnityHub安装Unity时手动添加模块&lt;/h2&gt;
&lt;p&gt;有些情况下，我们即使使用了正确的安装量设置等，但UnityHub在安装Unity时，仍然会出现没有“添加模块”这个选项的情况，如下图所示：
&lt;img src=&quot;https://www.micostar.cc/images/unitymod0.webp&quot; alt=&quot;UnityHub缺少添加模块选项的问题截图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个时候我们可以通过以下步骤手动添加模块：&lt;/p&gt;
&lt;h2&gt;1.打开Unity下载页面，选择“下载存档”&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/unitymod1.webp&quot; alt=&quot;Unity官网下载存档页面入口&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;2.在存档页面选择对应的Unity版本，选择下载的“See all”（即查看所有）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/unitymod2.webp&quot; alt=&quot;Unity存档页面选择See all查看所有组件&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;3.在对应版本页面，选择Componment installers（组件管理器）下的需要的模块进行下载&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/unitymod3.webp&quot; alt=&quot;Unity Component installers组件下载列表&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;4.下载完成后，运行对应的模块安装程序，选择Unity的安装路径进行安装&lt;/h2&gt;
&lt;p&gt;例如我的安装路径为E:\UnityEditor\2022.3.62f2\Editor&lt;/p&gt;
&lt;p&gt;Unity对应版本\Editor
&lt;img src=&quot;https://www.micostar.cc/images/unitymod4.webp&quot; alt=&quot;Unity模块安装程序选择安装路径&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;5.安装中文模块与文档需要安装在Editor/Data下&lt;/h2&gt;
&lt;p&gt;文档解压到Editor/Data下即可；中文模块为Localization文件夹，解压到Editor/Data下即可（就是zh-hans.po），官方找不到就搜索下载
&lt;img src=&quot;https://www.micostar.cc/images/unitymod4.webp&quot; alt=&quot;Unity中文语言包安装路径说明&quot; /&gt;
&lt;img src=&quot;https://www.micostar.cc/images/unitymod5.webp&quot; alt=&quot;Unity Editor Data目录结构截图&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;6.完成后重启Unity即可&lt;/h2&gt;
&lt;p&gt;如果出现问题，可以尝试重新安装模块，或者检查（）路径是否正确，以及手动下载（例如OpenJDK（安卓打包组件））
&lt;img src=&quot;https://www.micostar.cc/images/unitymod6.webp&quot; alt=&quot;Unity模块安装完成后的编辑器界面&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Rider与VisualStudio的中文注释编码的爱恨情仇（转换兼容）</title><link>https://www.micostar.cc/posts/rider-visualstudio-zhcn/</link><guid isPermaLink="true">https://www.micostar.cc/posts/rider-visualstudio-zhcn/</guid><description>最近与团队合作开发Unity项目时发现Rider与VisualStudio在中文注释编码上存在不兼容问题，导致代码注释乱码；本文记录了解决该问题的过程与方法。</description><pubDate>Sat, 25 Oct 2025 12:32:34 GMT</pubDate><content:encoded>&lt;h2&gt;事情的起因&lt;/h2&gt;
&lt;p&gt;团队合作开发Unity项目时，一开始我单人使用Rider编写，但是后来的所有人都是使用VisualStudio，结果在代码注释中出现了乱码问题。所以我决定我去适配其他人，完成中文转换&lt;/p&gt;
&lt;h2&gt;在Visual Studio中，我们编写图中带有中文的代码及注释&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv1.webp&quot; alt=&quot;Visual Studio中编写的中文注释代码示例&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;但是切换为Rider后，中文注释就变成了乱码&lt;/h3&gt;
&lt;h3&gt;Unity中视图&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv2.webp&quot; alt=&quot;Unity编辑器中显示的中文乱码问题&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Rider中视图&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv4.webp&quot; alt=&quot;Rider中显示的中文注释乱码问题&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;原因分析&lt;/h2&gt;
&lt;p&gt;经过一番查找，发现这是由于Rider默认使用UTF-8编码，而Visual Studio使用的是GBK编码，导致中文注释无法正确显示，需要进行编码转换故我们选择进行重载，注意一定要选择&amp;lt;span style=&quot;color: red; font-weight: bold;&quot;&amp;gt;重新加载！&amp;lt;/span&amp;gt;
&lt;img src=&quot;https://www.micostar.cc/images/rv5.webp&quot; alt=&quot;Rider文件编码重新加载操作界面&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;然后发现Rider重新加载后，中文注释就能正确显示了&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv6.webp&quot; alt=&quot;Rider重新加载后中文注释正确显示&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;A.为了一劳永逸，我们可以在Rider中设置项目编码为GBK，避免每次打开文件都需要重新加载&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv3.webp&quot; alt=&quot;Rider项目编码设置为GBK配置界面&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;B.使用更为统一的UTF-8（带BOM）编码，这样我们很多正常编译器均支持（推荐）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv8.webp&quot; alt=&quot;Rider设置UTF-8带BOM编码配置界面&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;最后均可正常显示中文注释&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rv7.webp&quot; alt=&quot;Rider和Visual Studio中文注释兼容成功显示&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>解决Cloudflare搭建的图床跨域问题</title><link>https://www.micostar.cc/posts/imagebed-cors/</link><guid isPermaLink="true">https://www.micostar.cc/posts/imagebed-cors/</guid><description>我博客的随机图是采用了搭建于Cloudflare的Cloudflare-Imgbed图床,但是由于安全策略,导致跨域问题,本文介绍了如何解决这个问题.</description><pubDate>Sun, 12 Oct 2025 18:31:33 GMT</pubDate><content:encoded>&lt;h1&gt;1. 问题描述&lt;/h1&gt;
&lt;p&gt;最近在观察博客的控制台时发现有跨域问题,如下图所示:
&lt;img src=&quot;https://www.micostar.cc/images/errimgbed.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;2. 问题解决方法&lt;/h1&gt;
&lt;p&gt;对于这个我们只需要前往Cloudflare的控制面板,修改我们的规则即可&lt;/p&gt;
&lt;h2&gt;修改响应标头转换规则（Response Header Transform Rules）&lt;/h2&gt;
&lt;p&gt;前往Cloudflare的控制面板,选择你的域名,然后选择&quot;规则&quot;-&amp;gt;&quot;概述&quot;-&amp;gt;&quot;响应标头转换规则&quot;,如下图所示:
&lt;img src=&quot;https://www.micostar.cc/images/imgbedrule1.webp&quot; alt=&quot;&quot; /&gt;
然后如图依次添加以下标头以及其对应值，以及主机名=你的图床域名&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access-Control-Allow-Headers - *&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-MethodsAccess-Control-Allow-Methods - GET, HEAD, OPTIONS&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-Origin - *&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/imgbedrule2.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>国内使用Gemini的官方模型</title><link>https://www.micostar.cc/posts/openwebuieoai/</link><guid isPermaLink="true">https://www.micostar.cc/posts/openwebuieoai/</guid><description>通过EdgeOne的AI网关在国内免魔法安全访问Gemini官方模型，配合OpenWebUI实现超快速度的AI对话体验，包含完整配置步骤和自开发Pipe插件。</description><pubDate>Wed, 08 Oct 2025 17:37:02 GMT</pubDate><content:encoded>&lt;h2&gt;通过EdgeOne的AI网关安全使用Gemini的官方模型&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;是否苦恼于具有Gemini的免费层级的API Key但是无法在国内使用？以及搭建中转服务器价格过于高昂？今天给大家带来一个新的解决方案，使用EdgeOne的AI网关来访问Gemini的官方模型&lt;/strong&gt;&lt;/h3&gt;
&lt;h2&gt;使用EdgeOne的AI网关的访问速度（国内）&lt;/h2&gt;
&lt;p&gt;这个速度可以说是比我们开启魔法或中转都要快，并且是官方模型，以下是AI网关的访问速度
&lt;img src=&quot;https://www.micostar.cc/images/eoaiurl.webp&quot; alt=&quot;EdgeOne AI网关访问速度测试结果&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;1.获得AI Studio的API Key(Gemini官方且具有免费层级)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://aistudio.google.com/&quot;&gt;AI Studio&lt;/a&gt;请开启&lt;strong&gt;魔法&lt;/strong&gt;进入&lt;/p&gt;
&lt;p&gt;或者你已经具有自己的Gemini API Key也可以&lt;/p&gt;
&lt;h2&gt;2.注册EdgeOne并创建AI网关，进入该界面选择Gemini AI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/eoaiurlgs.webp&quot; alt=&quot;EdgeOne AI网关配置界面选择Gemini AI&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
记住以下内容&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OE Key（请求头模板对应值）&lt;/li&gt;
&lt;li&gt;Gateway Name（请求头模板对应值）&lt;/li&gt;
&lt;li&gt;OE-AI-Provider（请求头模板对应值）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;3.使用OpenWebUI来访问&lt;/h2&gt;
&lt;h3&gt;3.1.进入OpenWebUI的函数页面来下载我的Pipe&lt;/h3&gt;
&lt;p&gt;::github{repo=&quot;Besty0728/OpenWebUI-EdgeOne-AI-Gemini&quot;}&lt;/p&gt;
&lt;p&gt;安装链接&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://github.com/Besty0728/OpenWebUI-EdgeOne-AI-Gemini/blob/main/edgeone_ai.py
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2.安装后进行配置&lt;/h3&gt;
&lt;p&gt;对照上面的信息进行填写&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自定义API请求地址（例：https://ai-gateway.eo-edgefunctions7.com/v1）&lt;/li&gt;
&lt;li&gt;你的 API Key（使用负载均衡则使用,隔开）&lt;/li&gt;
&lt;li&gt;模型名称（多个模型使用英文逗号,隔开）&lt;/li&gt;
&lt;li&gt;OE Key（请求头模板对应值）&lt;/li&gt;
&lt;li&gt;Gateway Name（请求头模板对应值）&lt;/li&gt;
&lt;li&gt;OE-AI-Provider（请求头模板对应值）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.3.开启后对话效果，十分迅速！&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/eoopenwebuispeed.webp&quot; alt=&quot;OpenWebUI通过EdgeOne访问Gemini的对话速度展示&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;4.新更新：增加3系列支持、优化思维链、支持附加API调节特有信息&lt;/h2&gt;
&lt;h3&gt;4.1.配置页面优化&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/eoopenwebuisetting.webp&quot; alt=&quot;EdgeOne Gemini Pipe配置页面界面&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4.2.支持思维链&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/eoopenwebui1.webp&quot; alt=&quot;Gemini思维链功能展示-输入&quot; /&gt;
&lt;img src=&quot;https://www.micostar.cc/images/eoopenwebui2.webp&quot; alt=&quot;Gemini思维链功能展示-输出&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4.3.支持附加API调节特有信息&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/eoopenwebui3.webp&quot; alt=&quot;Gemini API附加参数调节设置界面&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>关于在OpenWebUI中处理Base64返回的图片</title><link>https://www.micostar.cc/posts/openwebui-base-image/</link><guid isPermaLink="true">https://www.micostar.cc/posts/openwebui-base-image/</guid><description>OpenWebUI 处理 Base64 图片的函数插件安装与配置教程。解决 AI 绘图模型返回 Base64 编码而非图片链接的问题，支持自定义 API 地址、密钥、模型 ID 和计费参数设置。</description><pubDate>Wed, 01 Oct 2025 17:59:24 GMT</pubDate><content:encoded>&lt;p&gt;::github{repo=&quot;Besty0728/OpenWebUI-Base64-Image&quot;}&lt;/p&gt;
&lt;h1&gt;关于在OpenWebUI中处理Base64返回的图片&lt;/h1&gt;
&lt;h2&gt;1.打开OpenWebUI的函数界面直接选择从新连接链接&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;https://github.com/Besty0728/OpenWebUI-Base64-Image/blob/main/image_decoder_pipe.py
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2.安装完成后填写对应的参数&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;API基础URL：自定义请求模型供应商地址&lt;/li&gt;
&lt;li&gt;API Key：自定义请求模型供应商的Key&lt;/li&gt;
&lt;li&gt;模型ID：自定义请求模型供应商的模型名称&lt;/li&gt;
&lt;li&gt;每次生成费用（元）：自定义请求模型供应商单次生成费用（可配合计费插件使用）&lt;/li&gt;
&lt;li&gt;请求超时时间（秒）：自定义请求模型供应商的请求超时时间（等待图片）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;完成后效果如下
&lt;img src=&quot;https://www.micostar.cc/images/baseimage1.webp&quot; alt=&quot;&quot; /&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/baseimage2.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>使用云应用无服务器部署OpenWebUI</title><link>https://www.micostar.cc/posts/openwebuinoserver/</link><guid isPermaLink="true">https://www.micostar.cc/posts/openwebuinoserver/</guid><description>零服务器运维成本部署 OpenWebUI 完整教程。使用雨云云应用商店一键部署，配合 Cloudflare DNS 和端口转发规则实现自定义域名访问，轻松搭建私有 AI 对话平台。</description><pubDate>Wed, 01 Oct 2025 12:21:05 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.bilibili.com/video/BV1CGHJzaEor/&quot;&gt;视频链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.rainyun.com/star666_&quot;&gt;雨云注册链接&lt;/a&gt;优惠码：&lt;code&gt;star666&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;今天给大家带来无服务器部署OpenWebUI&lt;/h1&gt;
&lt;h1&gt;雨云云应用商店选择OpenWebUI&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rainopenwebui1.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;然后选择创建即可，核心与内存建议2h2g，记住你的端口号（后续域名访问要用）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/rainopenwebui.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;稍作等待，等你的公网ip+端口可访问后我们进入域名配置访问&lt;/h2&gt;
&lt;h1&gt;Cloudflare配置域名访问&lt;/h1&gt;
&lt;h2&gt;1.先去DNS配置，采取a记录，将你需要访问的域名（例：aiweb.cloudrunmax.top）;名称则为aiweb、解析内容为公网ip&lt;/h2&gt;
&lt;h2&gt;2.配置端口转发规则，来到规则页面选择Origin Rules&lt;/h2&gt;
&lt;h3&gt;名称随意，如下填写为：域名/*&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/openwebuicf1.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;传入端口则为上文你公网ip访问后的端口号&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/openwebuicf2.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;3.配置完成均激活后访问即可成功&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/openwebuidomain.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>关于如何在OpenWebUI中启用OpenAI的responses端点的模型</title><link>https://www.micostar.cc/posts/openwebui-responses/</link><guid isPermaLink="true">https://www.micostar.cc/posts/openwebui-responses/</guid><description>最近发现OpenWebUI尚未支持OpenAI的新responses端点模型，（Cloudflare提供的OSS模型以及官方O系列模型）社区解决方案如下，但不能完美解决，故自己写了一个更好的解决方案</description><pubDate>Sun, 21 Sep 2025 17:50:42 GMT</pubDate><content:encoded>&lt;p&gt;::github{repo=&quot;Besty0728/OpenWebUI-Cloudflare-OSS&quot;}&lt;/p&gt;
&lt;h2&gt;关于如何在OpenWebUI中启用官方OpenAI的responses端点的模型&lt;/h2&gt;
&lt;h3&gt;1.官方端点我们采用了社区关于responses端点的解决方案（实测正常使用官方端点）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jrkropp/open-webui-developer-toolkit/tree/main/functions/pipes/openai_responses_manifold&quot;&gt;社区解决方案链接&lt;/a&gt;
先按照社区文档的步骤进行操作，安装这个Pipe；安装链接如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://github.com/jrkropp/open-webui-developer-toolkit/blob/main/functions/pipes/openai_responses_manifold/openai_responses_manifold.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装后需要我们对此Pipe进行一些修改，主要是修改你要请求的端点以及模型等
&lt;img src=&quot;https://www.micostar.cc/images/OPRmanager.webp&quot; alt=&quot;OpenWebUI Pipe管理配置界面&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;2.调用Cloudflare的OSS模型，采用我的Pipe&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-08-05-openai-open-models/&quot;&gt;Cloudflare OSS模型调用文档&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;1.首先你需要去Cloudflare注册一个账号，然后创建一个API Token、获得你的账户ID，获得方法如图&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;账户ID获得方法
&lt;img src=&quot;https://www.micostar.cc/images/CFAI1.webp&quot; alt=&quot;Cloudflare账户ID获取位置截图&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建API Token，选择后续的WorkerAI模板即可
&lt;img src=&quot;https://www.micostar.cc/images/CFAI2.webp&quot; alt=&quot;Cloudflare API Token创建步骤截图&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;创建完成后你会获得一个API Token，复制保存好&lt;/p&gt;
&lt;h3&gt;2.然后我们安装我开发的Pipe&lt;/h3&gt;
&lt;p&gt;::github{repo=&quot;Besty0728/OpenWebUI-Cloudflare-OSS&quot;}&lt;/p&gt;
&lt;h4&gt;安装链接&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;https://github.com/Besty0728/OpenWebUI-Cloudflare-OSS/blob/main/cloudflare_responses.py
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare Account ID处填写你刚才获得的账户ID&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;API Key处填写你刚才创建的API Token&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;模型名称处填写你要调用的模型名称，例如本次的&lt;code&gt;@cf/openai/gpt-oss-120b&lt;/code&gt;，如果你要调用其他模型请参考Cloudflare的文档（以上只适用于responses端点的模型）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;填入如图&lt;/strong&gt;
&lt;img src=&quot;https://www.micostar.cc/images/OWCF.webp&quot; alt=&quot;OpenWebUI Cloudflare OSS Pipe配置填写示例&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;3.最后别忘了启用该Pipe，以及某些模型的特定修改&lt;/h3&gt;
&lt;p&gt;例如本文的Cloudflare的OSS模型需要我们在参数处选择禁用&lt;code&gt;Stream Chat Response&lt;/code&gt;（流式对话响应/流式输出；因为CF不支持流式输出调用该模型；也可以选择不修改，因为我的Pipe禁用了）
&lt;img src=&quot;https://www.micostar.cc/images/OSSSetting.webp&quot; alt=&quot;OpenWebUI模型参数设置禁用流式输出&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;4.完成后即可愉快使用&lt;/h3&gt;
&lt;p&gt;实测支持OpenWebUI的联网工具等
&lt;img src=&quot;https://www.micostar.cc/images/OP-OSS.webp&quot; alt=&quot;OpenWebUI使用Cloudflare OSS模型对话效果展示&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>我的ClaudeCode使用笔记</title><link>https://www.micostar.cc/posts/claudecode/</link><guid isPermaLink="true">https://www.micostar.cc/posts/claudecode/</guid><description>Claude Code 实用指南与技巧汇总。涵盖 /init、/mcp、/compact 等核心命令详解，think 系列深度思考模式用法，以及 CLAUDE.md 项目配置最佳实践，助你高效使用 AI 编程助手。</description><pubDate>Sat, 20 Sep 2025 19:33:12 GMT</pubDate><content:encoded>&lt;h1&gt;ClaudeCode使用笔记&lt;/h1&gt;
&lt;p&gt;或者前往&lt;a href=&quot;https://claudecode.ai0728.com.cn&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;🧭ClaudeCode官方文档&lt;/h2&gt;
&lt;p&gt;有空更建议研究ClaudeCode官方文档&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.claude.com/zh-CN/docs/claude-code/overview&quot;&gt;Claude Code 概述 - Claude Docs&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🔥 重要指令&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;代码特殊示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/mcp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理 MCP 服务器连接与调试，查看可用服务、状态与权限&lt;/td&gt;
&lt;td&gt;/mcp list 或 /mcp status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/init&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://xn--CLAUDE-hz6l727j.md&quot;&gt;生成CLAUDE.md&lt;/a&gt;；作为项目知识，每次对应项目对话都附带，是AI了解项目的基石《项目提示词》&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/compact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;压缩对话上下文，更节省Token消耗；可以附加提示词选择更侧重哪一方面（增加注意力）&lt;/td&gt;
&lt;td&gt;/compact 主要保留前端部分对话&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/clear&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;用于清除对话记录&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;think/thinkhard/thinkharder/ultrathink&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;这四个级别的提示词代表用于AI对问题的的思考程度&lt;/td&gt;
&lt;td&gt;think “你的需求”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;！&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进入临时命令行模式，同时操作也可以被AI感知&lt;/td&gt;
&lt;td&gt;！ npm install 安装依赖并通知AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;#&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;长期记忆模式，给项目或我们用户级别添加要Claude知道的东西（&lt;a href=&quot;http://xn--CLAUDE-og8iz1zx22n.md&quot;&gt;附加于CLAUDE.md&lt;/a&gt;文件下）用户级别的位于C/User/用户名/.claude文件夹下&lt;/td&gt;
&lt;td&gt;# 用中文与我对话&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/ide&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;开启ide集成（非常方便，注意要下载对应的插件）使用后，以VSCode举例，接近于VSCode原生Github Copilot下的Agent模式体验&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude -p “问题”&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;临时一次性对话，类似于一次性的Olllma本地模型&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Esc*2/ /rewind&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;claudecode2.0新增的检查点功能，回退代码！&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;📝 常用命令参考&lt;/h2&gt;
&lt;p&gt;&amp;lt;aside&amp;gt;
⭐高频操作集合，建议优先记忆
&amp;lt;/aside&amp;gt;&lt;/p&gt;
&lt;h3&gt;基础命令&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;启动交互模式&lt;/td&gt;
&lt;td&gt;claude&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude &quot;task&quot;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;运行一次性任务&lt;/td&gt;
&lt;td&gt;claude &quot;fix the build error&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude -p &quot;query&quot;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;运行查询后退出&lt;/td&gt;
&lt;td&gt;claude -p &quot;explain this function&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude -c&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;继续最近的对话&lt;/td&gt;
&lt;td&gt;claude -c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude -r&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;继续上一个对话&lt;/td&gt;
&lt;td&gt;claude -r&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;claude commit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;创建 Git 提交（个人不常用）&lt;/td&gt;
&lt;td&gt;claude commit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;交互模式命令&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/clear&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;清除对话历史记录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/help&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;获取帮助信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;exit 或 Ctrl+C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;退出 Claude Code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;内置斜杠命令&lt;/h3&gt;
&lt;p&gt;&amp;lt;aside&amp;gt;
⚠️重要：IDE 绑定与上下文同步请使用 /ide（首次在 IDE 终端运行 claude 后，输入 /ide 选择要绑定的 IDE）。&lt;/p&gt;
&lt;p&gt;环境变量：&lt;/p&gt;
&lt;p&gt;ANTHROPIC_BASE_URL 自定义请求地址&lt;/p&gt;
&lt;p&gt;ANTHROPIC_AUTH_TOKEN  自定义密钥&lt;/p&gt;
&lt;p&gt;&amp;lt;/aside&amp;gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/ide&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;重要 绑定 IDE 并启用选择、诊断、差异等上下文同步&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/add-dir&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;添加额外的工作目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/bug&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;报告错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/clear&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;清除对话历史&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/config&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;查看/修改配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;显示令牌使用统计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/doctor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;检查安装健康状况&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/help&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;获取使用帮助&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/init&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 &lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; 初始化项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;编辑 &lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; 内存文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选择或更改 AI 模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/permissions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;查看或更新权限（Allow始终允许、Deny禁止使用、Workspace是项目始终允许）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/review&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;请求代码审查&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;查看账户和系统状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/vim&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进入 vim 模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/resume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;找回历史话题（仅回退对话记录，无代码）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/export&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将此次对话内容导出（粘贴板/文件）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;aside&amp;gt;
💡
小提示：遇到上下文不全时，先用 /permissions 检查权限，再用 /add-dir 补充目录。&lt;/p&gt;
&lt;p&gt;&amp;lt;/aside&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🧩 MCP 模块&lt;/h2&gt;
&lt;h3&gt;MCP 工具与权限&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;需要权限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bash&lt;/td&gt;
&lt;td&gt;在您的环境中执行 shell 命令&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edit&lt;/td&gt;
&lt;td&gt;对特定文件进行有针对性的编辑&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glob&lt;/td&gt;
&lt;td&gt;基于模式匹配查找文件&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grep&lt;/td&gt;
&lt;td&gt;在文件内容中搜索模式&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MultiEdit&lt;/td&gt;
&lt;td&gt;对单个文件原子性地执行多个编辑&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NotebookEdit&lt;/td&gt;
&lt;td&gt;修改 Jupyter notebook 单元格&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NotebookRead&lt;/td&gt;
&lt;td&gt;读取和显示 Jupyter notebook 内容&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read&lt;/td&gt;
&lt;td&gt;读取文件内容&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task&lt;/td&gt;
&lt;td&gt;运行子代理来处理复杂的多步骤任务&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TodoWrite&lt;/td&gt;
&lt;td&gt;创建和管理结构化任务列表&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebFetch&lt;/td&gt;
&lt;td&gt;从指定 URL 获取内容&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSearch&lt;/td&gt;
&lt;td&gt;执行带有域过滤的网络搜索&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write&lt;/td&gt;
&lt;td&gt;创建或覆盖文件&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;aside&amp;gt;
🔧
在此处记录与 MCP（Model Context Protocol）相关的服务器、客户端、工具链与调试笔记。&lt;strong&gt;注意安装时建议退出ClaudeCode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/aside&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;参考命令&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;claude mcp add “mcp名称，建议与MCP相同”&lt;/td&gt;
&lt;td&gt;增加MCP&lt;/td&gt;
&lt;td&gt;claude mcp add context7 — npx @upstash/context7-mcp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;这个就是按照文档里的来，结构为&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude mcp add MCP名称 — “command” + “args”&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;— scope user&lt;/td&gt;
&lt;td&gt;添加为用户级别的MCP&lt;/td&gt;
&lt;td&gt;就是在上文的MCP名称后添加&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;示例：claude mcp add context7 —scope user   — npx @upstash/context7-mcp&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/mcp&lt;/td&gt;
&lt;td&gt;查看mcp服务器&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude mcp remove MCP名称&lt;/td&gt;
&lt;td&gt;删除该MCP服务器&lt;/td&gt;
&lt;td&gt;claude mcp remove context7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/permissions进入后选择Allow后mcp__MCP名称&lt;/td&gt;
&lt;td&gt;位于Allow下面的工具/MCP无需确认，自动使用&lt;/td&gt;
&lt;td&gt;mcp__ context7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude —dangerously-skip-permissions&lt;/td&gt;
&lt;td&gt;赋予最高权限&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;远程连接MCP视MCP文档命令即可&lt;/h3&gt;
&lt;h2&gt;🔧工具与权限&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;需要权限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bash&lt;/td&gt;
&lt;td&gt;在您的环境中执行 shell 命令&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edit&lt;/td&gt;
&lt;td&gt;对特定文件进行有针对性的编辑&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glob&lt;/td&gt;
&lt;td&gt;基于模式匹配查找文件&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grep&lt;/td&gt;
&lt;td&gt;在文件内容中搜索模式&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MultiEdit&lt;/td&gt;
&lt;td&gt;对单个文件原子性地执行多个编辑&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NotebookEdit&lt;/td&gt;
&lt;td&gt;修改 Jupyter notebook 单元格&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NotebookRead&lt;/td&gt;
&lt;td&gt;读取和显示 Jupyter notebook 内容&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read&lt;/td&gt;
&lt;td&gt;读取文件内容&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task&lt;/td&gt;
&lt;td&gt;运行子代理来处理复杂的多步骤任务&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TodoWrite&lt;/td&gt;
&lt;td&gt;创建和管理结构化任务列表&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebFetch&lt;/td&gt;
&lt;td&gt;从指定 URL 获取内容&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSearch&lt;/td&gt;
&lt;td&gt;执行带有域过滤的网络搜索&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write&lt;/td&gt;
&lt;td&gt;创建或覆盖文件&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;⚡自定义命令&lt;/h2&gt;
&lt;h3&gt;1.项目自建自定义命令&lt;/h3&gt;
&lt;p&gt;项目文件的.claude文件夹下新建commands文件夹后，新建的.md文件名字即为命令名字&lt;/p&gt;
&lt;p&gt;例如有一个code_review.md文件，内容为：对比当前这个分支与main分支的差异，提出你的review意见，并且生成应用过后的更新文件；或者是  对比这个分支：&lt;code&gt;$ARGUMENTS&lt;/code&gt;与main分支的差异，提出你的review意见，并且生成应用过后的更新文件&lt;/p&gt;
&lt;p&gt;(&lt;code&gt;$ARGUMENTS&lt;/code&gt; 为占位符，可作为分支名称（变量）传入)
使用方法为/命令名字 传入参数（可选）&lt;/p&gt;
&lt;h3&gt;2.用户级别自定义命令&lt;/h3&gt;
&lt;p&gt;将commands文件夹移动至C/User/用户名/.claude文件夹下即可（前文的CLAUDE.md同位置）&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;📞Hook（自动执行）&lt;/h2&gt;
&lt;h3&gt;1.项目建立Hook&lt;/h3&gt;
&lt;p&gt;.claude文件夹下建立setting.json或·setting.local.json（更高权限）&lt;/p&gt;
&lt;p&gt;例如以下这个自动修复 markdown 文件中缺失的语言标签和格式问题（适合编写我们的博客文件后检查）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;hooks&quot;: {
    &quot;PostToolUse&quot;: [
      {
        &quot;matcher&quot;: &quot;Edit|MultiEdit|Write&quot;,
        &quot;hooks&quot;: [
          {
            &quot;type&quot;: &quot;command&quot;,
            &quot;command&quot;: &quot;$CLAUDE_PROJECT_DIR/.claude/hooks/markdown_formatter.py&quot;
          }
        ]
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hook调用时机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PreToolUse&lt;/strong&gt;：在工具调用之前运行（可以阻止它们）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostToolUse&lt;/strong&gt;：在工具调用完成后运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UserPromptSubmit&lt;/strong&gt;：当用户提交提示时运行，在 Claude 处理之前&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notification&lt;/strong&gt;：当 Claude Code 发送通知时运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop&lt;/strong&gt;：当 Claude Code 完成响应时运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SubagentStop&lt;/strong&gt;：当子代理任务完成时运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PreCompact&lt;/strong&gt;：在 Claude Code 即将运行压缩操作之前运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SessionStart&lt;/strong&gt;：当 Claude Code 开始新会话或恢复现有会话时运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SessionEnd&lt;/strong&gt;：当 Claude Code 会话结束时运行&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;🛠️Sub Agent（子智能体并行执行）&lt;/h2&gt;
&lt;p&gt;使用方法：/agents 后选择是适用于项目还是用户级别&lt;/p&gt;
&lt;p&gt;填写对应的描述以及结果（类似于我们的模型系统提示词）&lt;/p&gt;
&lt;p&gt;使用这个的好处是可以将任务拆分为多个小任务，并且获得独属于每个确认子任务的精简上下文，不被上下文污染，效率与准确度更棒！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🚥代码回退（Claudecode2.0之前的依靠额外插件，但强烈支持）&lt;/h2&gt;
&lt;p&gt;下载Github开源项目ccundo&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/RonitSachdev/ccundo&quot;&gt;GitHub - RonitSachdev/ccundo: ccundo seamlessly integrates with Claude Code to provide granular undo functionality. It reads directly from Claude Code&apos;s session files to track file operations and allows you to selectively revert changes with full preview and cascading safety.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install -g ccundo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ccundo list&lt;/code&gt; 列出对话记录&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ccundo undo 编号&lt;/code&gt; 即可回退该对话的代码&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;🌐可视化版本推荐&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/winfunc/opcode&quot;&gt;Github项目opcode&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>如何修改Windows用户名</title><link>https://www.micostar.cc/posts/userz-e/</link><guid isPermaLink="true">https://www.micostar.cc/posts/userz-e/</guid><description>Windows 中文用户名改英文名完整教程。通过启用 Administrator 超级用户账户，安全重命名用户文件夹并修改注册表 ProfileImagePath，解决软件兼容性问题，避免路径中文乱码。</description><pubDate>Fri, 19 Sep 2025 23:21:47 GMT</pubDate><content:encoded>&lt;h2&gt;1.首先你需要打开你的命令提示符（管理员权限），然后输入以下命令来开启超级用户去修改你的用户名：&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/ML.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;net user administrator /active:yes
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2.然后按下Alt+F4，选择切换用户，切换到管理员账户（Administrator）&lt;/h2&gt;
&lt;h2&gt;3.在任务管理器（Ctrl+Shift+Esc）关闭之前的用户所有进程&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/UserM.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;4.先重命名用户文件夹（C:\Users\原中文用户名）为（C:\Users\新英文用户名）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.micostar.cc/images/Users.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果存在仍有进程在运行问题，则开启你的资源监视器（Ctrl+Shift+Esc下的性能页面右上角的“打开资源监视器”）
&lt;img src=&quot;https://www.micostar.cc/images/ZYGL.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后在资源监视器的CPU页面的关联句柄搜索框中输入你的用户名，找到相关进程并结束它们&amp;lt;span style=&quot;color: red; font-weight: bold;&quot;&amp;gt;（需要重启则重启，后续仍选择超级管理员，误进入原来的用户导致错乱后果自负！！！）&amp;lt;/span&amp;gt;
&lt;img src=&quot;https://www.micostar.cc/images/ZYJ.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;5.然后打开注册表编辑器（Win+R，输入regedit回车），定位到以下路径：&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1144158939-3632170427-3967875196-1001（一般是第三个，选中有你用户名的即可）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改&amp;lt;ins&amp;gt;&lt;strong&gt;ProfileImagePath&lt;/strong&gt;&amp;lt;/ins&amp;gt;
&lt;img src=&quot;https://www.micostar.cc/images/eng11.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;6.更改完成注册表后，按下Alt+F4，选择切换用户，切换到你的新英文用户名即可&lt;/h2&gt;
&lt;p&gt;然后打开任务管理器（Ctrl+Shift+Esc）关闭管理员账户所有进程；再打开命令提示符（管理员权限），然后输入以下命令来关闭超级用户：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;net user administrator /active:no
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7.配置文件看的是你C盘根目录下的Users文件夹下的用户名文件夹，并非是设置里的用户名&lt;/h2&gt;
</content:encoded></item><item><title>Google AI Studio的汉化插件</title><link>https://www.micostar.cc/posts/ai-studio-zhcn/</link><guid isPermaLink="true">https://www.micostar.cc/posts/ai-studio-zhcn/</guid><description>Google AI Studio 中文汉化脚本，支持暴力猴和篡改猴插件。一键安装即可将 AI Studio 界面翻译为中文，解决 Edge 自动翻译导致网站报错的问题，提升 Gemini AI 使用体验。</description><pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p&amp;gt;首先确保你已经安装了暴力猴插件（Violentmonkey）/篡改猴插件（Tampermonkey）并且正常开启了它们的功能，如果没有安装请前往&amp;lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/%E6%9A%B4%E5%8A%9B%E7%8C%B4/eeagobfjdenkkddmbclomhiblgggliao&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&amp;gt;暴力猴&amp;lt;/a&amp;gt;或&amp;lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&amp;gt;篡改猴&amp;lt;/a&amp;gt;下载安装。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/monkey.webp&quot; alt=&quot;monkey&quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/monkeyy.webp&quot; alt=&quot;monkey&quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;安装完成后在暴力猴插件或篡改猴插件的仪表盘里点击“添加新脚本”，然后前往脚本安装地址&amp;lt;a href=&quot;https://greasyfork.org/zh-CN/scripts/549999-google-ai-studio-%E6%B1%89%E5%8C%96%E8%84%9A%E6%9C%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&amp;gt;此处&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;考虑到翻译脚本过于冗长，不利于博客文章流畅性，因此不在此处贴出脚本内容，请前往上述标签安装即可&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/aistudio.webp&quot; alt=&quot;monkey&quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;安装完成后刷新 AI Studio 页面即可看到大部分界面已经被汉化了。&amp;lt;/p&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Unity配置MCP实现自动化</title><link>https://www.micostar.cc/posts/unity-mcp/</link><guid isPermaLink="true">https://www.micostar.cc/posts/unity-mcp/</guid><description>配置Unity MCP实现AI接管Unity开发自动化，包含VSCode、Rider、Visual Studio三种IDE的完整MCP配置示例，支持Github Copilot集成。</description><pubDate>Tue, 12 Aug 2025 08:45:29 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p&amp;gt;这里只介绍三种配置示例，不会的去看视频；链接：&amp;lt;a href=&quot;https://www.bilibili.com/video/BV1gqtozaE4G/?vd_source=2eb5b7bd2c2ae3d60105b79832451ecc&quot;&amp;gt;利用GithubCopilot实现Unity自动化（MCP）_哔哩哔哩_bilibili&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;VSCode傻瓜式一键即可&amp;lt;/p&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;  &quot;servers&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;github&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;type&quot;:&quot;http&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;url&quot;:&quot;https://api.githubcopilot.com/mcp&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;gallery&quot;:true&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      },&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;unityMCP&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;          &quot;command&quot;: &quot;C:\Users\Betsy\AppData\Roaming\Python\Python313\Scripts\uv.exe&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;          &quot;args&quot;: [&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;              &quot;--directory&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;              &quot;C:\Users\Betsy\AppData\Local\Programs\UnityMCP\UnityMcpServer\src&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;              &quot;run&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;              &quot;server.py&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;          ],&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;          &quot;type&quot;: &quot;stdio&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;   },&amp;lt;br&amp;gt;   &quot;inputs&quot;:[]&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Rider：（以上的GithubMCP可以选择不要,只要servers里包含我们的UnityMCP即可）&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;  &quot;servers&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    &quot;github&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;url&quot;: &quot;https://api.githubcopilot.com/mcp/&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;requestInit&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;headers&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;          &quot;Authorization&quot;: &quot;你的GithubPAT密钥&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    },&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    &quot;unityMCP&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;command&quot;: &quot;C:\Users\Betsy\AppData\Roaming\Python\Python313\Scripts\uv.exe&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;args&quot;: [&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;--directory&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;C:\Users\Betsy\AppData\Local\Programs\UnityMCP\UnityMcpServer\src&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;run&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;server.py&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      ],&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;type&quot;: &quot;stdio&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Visual Studio：（这个是我最想喷的，官方给的mcp配置也是云里雾里的。。。目前最新版本是17.14，在你项目下面要建立一个&amp;lt;code&amp;gt;.mcp.json&amp;lt;/code&amp;gt;文件才可以，&amp;lt;span style=&quot;color: #e03e2d;&quot;&amp;gt;重启才能生效！！！&amp;lt;span style=&quot;color: #000000;&quot;&amp;gt;）&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;&amp;lt;span style=&quot;color: #e03e2d;&quot;&amp;gt;&amp;lt;span style=&quot;color: #000000;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1755016952760-375474964.webp&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;&amp;lt;span style=&quot;color: #e03e2d;&quot;&amp;gt;&amp;lt;span style=&quot;color: #000000;&quot;&amp;gt;VS配置直接复用VSCode的UnityMCP即可，GithubMCP要使用和Rider一样的PAT认证&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;  &quot;servers&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    &quot;github&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;url&quot;: &quot;https://api.githubcopilot.com/mcp/&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;authorization_token&quot;: &quot;你的GithubPAT密钥&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    },&amp;lt;br&amp;gt;                 &amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;    &quot;unityMCP&quot;: {&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;command&quot;: &quot;C:\Users\Betsy\AppData\Roaming\Python\Python313\Scripts\uv.exe&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      &quot;args&quot;: [&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;--directory&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;C:\Users\Betsy\AppData\Local\Programs\UnityMCP\UnityMcpServer\src&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;run&quot;,&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;server.py&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        ],&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;        &quot;type&quot;: &quot;stdio&quot;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;      }&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;   },&amp;lt;br&amp;gt;   &quot;inputs&quot;:[]&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>如何获得Github教育优惠</title><link>https://www.micostar.cc/posts/github-1/</link><guid isPermaLink="true">https://www.micostar.cc/posts/github-1/</guid><description>详细教程：如何申请 GitHub 教育优惠获得两年免费福利。包括教育邮箱绑定、学信网认证材料准备、避免中文 OCR 识别失败的技巧，以及常见问题解决方案。</description><pubDate>Tue, 12 Aug 2025 08:35:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p&amp;gt;前提：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;具有一个教育邮箱（学校可能会给你，没有就去申请）&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;学信网的认证材料或录取通知书照片&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;认证时要获得你的ip位置，&amp;lt;span style=&quot;color: #e03e2d;&quot;&amp;gt;不要开启魔法！！！&amp;lt;/span&amp;gt;建议使用手机端认证（要求拍摄）&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;我们进入你的Github页面，先绑定你的教育邮箱&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755015434244-210524120.webp&quot; alt=&quot;&quot; width=&quot;2046&quot; height=&quot;441&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;然后前往教育福利页面，直接选择你的教育邮箱即可&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755015271686-94799935.webp&quot; alt=&quot;&quot; width=&quot;528&quot; height=&quot;783&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;然后填写你的信息&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755015645118-965159280.webp&quot; alt=&quot;&quot; width=&quot;776&quot; height=&quot;723&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;后续选择认证材料你选哪个根据你的材料来（学信网选择ID）&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755015717542-789384846.webp&quot; alt=&quot;&quot; width=&quot;675&quot; height=&quot;597&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&quot;color: #e03e2d;&quot;&amp;gt;&amp;lt;em&amp;gt;&amp;lt;strong&amp;gt;注意！！！&amp;lt;/strong&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/span&amp;gt;不要直接提交你的材料，因为Github目前采用的是机器OCR（文字识别），对中文的成功率很低，建议使用英文版本的材料或者将你的材料用人为的方式手写成一个英文版本，不麻烦！！！（电脑记事本就可以）&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;以下是我学信网在线验证报告直接ai翻译得来的，实测成功&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755016079865-815771810.webp&quot; alt=&quot;&quot; width=&quot;1616&quot; height=&quot;947&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;然后在记事本里直接打出来&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755016256695-316685712.webp&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;下一步里如果触发了你距离学校远的话，直接选择始终远程教学就行，拍摄再拍一次上面的就行&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;再提一嘴，如果不放心可以选择更改你的github个人资料，与你文件中的名字一致即可，学校选择你的学校就行，按照上述操作大概率认证成功&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&quot;/images/image-1755016403916-475070115.webp&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;注意，认证成功后是批准，72小时内下发你的权益（GithubCopilotPro等）；不过判断是否通过还是很快的&amp;lt;br&amp;gt;Github学生认证后去仔细查看Github学生包，里面有很多超值服务；保底都4个免费一年的域名以及各种软件的教育优惠（JetBrain、Notion等等）&amp;lt;br&amp;gt;早认证，早享受！！！&amp;lt;/p&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Gemini-balance部署指南(非docker)</title><link>https://www.micostar.cc/posts/gemini-balance-docker/</link><guid isPermaLink="true">https://www.micostar.cc/posts/gemini-balance-docker/</guid><description>Gemini Balance非Docker部署完整指南，通过git源仓库形式启动项目，实现Gemini API的负载均衡和中转服务，附带网页版和Notion笔记教程。</description><pubDate>Sun, 10 Aug 2025 06:55:17 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p&amp;gt;方便美观(我懒得重新编辑了)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;网页版:&amp;lt;a href=&quot;https://geminiguide.ai0728.com.cn&quot;&amp;gt;Gemini Balance部署&amp;lt;/a&amp;gt;或&amp;lt;a href=&quot;https://lizard-parcel-a96.notion.site/Gemini-Balance-24a5723cc6b580d9afd8c09a9f760a13&quot;&amp;gt;Notion笔记&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Markdown文件:&amp;lt;a href=&quot;https://cloudrunmax.top/s/gXfx/GeminiGuide&quot;&amp;gt;Gemini-Balance部署Markdown&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>关于OpenWebUI外部访问的细节错误</title><link>https://www.micostar.cc/posts/openwebui/</link><guid isPermaLink="true">https://www.micostar.cc/posts/openwebui/</guid><description>解决OpenWebUI外部访问时Nginx配置的常见错误，包括WebSocket支持问题的完整排查方案，涵盖Nginx配置和域名服务商（EdgeOne/Cloudflare）设置。</description><pubDate>Sat, 02 Aug 2025 07:30:35 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p&amp;gt;关于这个错误：&amp;lt;/p&amp;gt;
&amp;lt;h1 class=&quot;gh-header-title flex-auto wb-break-word f1 mr-0&quot;&amp;gt;&amp;lt;span class=&quot;js-issue-title markdown-title&quot;&amp;gt;SyntaxError： Unexpected token &apos;d&apos;， “data： {”id“...JSON 无效&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span class=&quot;js-issue-title markdown-title&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1754148558836-843256870.webp&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span class=&quot;js-issue-title markdown-title&quot;&amp;gt;这个是因为你的服务没有开启websocket导致的，开启的地方主要有两处：&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;span class=&quot;js-issue-title markdown-title&quot;&amp;gt;nginx没有开启websocket支持（添加我标注的蓝色部分即可）&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;img src=&quot;/images/image-1754148814476-105309073.webp&quot; alt=&quot;&quot; width=&quot;1321&quot; height=&quot;786&quot;&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;你的域名服务商没有开启websocket支持（我个人踩过最深的坑）&amp;lt;br&amp;gt;以我使用的EdgeOne为例，EdgeOne默认不开启Websocket支持&amp;lt;br&amp;gt;&amp;lt;img src=&quot;/images/image-1754148546904-319018769.webp&quot;&amp;gt;&amp;lt;br&amp;gt;CloudFlare默认全部计划均开启且支持Websocket&amp;lt;br&amp;gt;&amp;lt;img src=&quot;/images/image-1754148603332-270641179.webp&quot;&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Unity调用OpenWeatherAPI查询天气</title><link>https://www.micostar.cc/posts/unity-openweatherapi/</link><guid isPermaLink="true">https://www.micostar.cc/posts/unity-openweatherapi/</guid><description>Unity调用OpenWeatherMap API实现实时天气查询功能，包含地理编码API、天气数据API的详细集成教程，带有完整的UI搭建和风向解析代码示例。</description><pubDate>Thu, 24 Jul 2025 01:03:07 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;h2&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;1. 准备资源&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;!-- [if !supportLists]--&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;A. &amp;lt;/span&amp;gt;&amp;lt;!--[endif]--&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;网站官方：&amp;lt;/span&amp;gt;&amp;lt;a href=&quot;https://openweathermap.org/&quot;&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;https://openweathermap.org/&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/a&amp;gt;   &amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;创建账户，获得免费&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API Key)&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;!-- [if !supportLists]--&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;B. &amp;lt;/span&amp;gt;&amp;lt;!--[endif]--&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;网站&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;文档调用示例：&amp;lt;/span&amp;gt;&amp;lt;a href=&quot;https://openweathermap.org/current&quot;&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span class=&quot;15&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;当前天气数据&amp;lt;/span&amp;gt; - OpenWeatherMap&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;!-- [if !supportLists]--&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;C. &amp;lt;/span&amp;gt;&amp;lt;!--[endif]--&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;网站地理编码&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;文档示例：&amp;lt;/span&amp;gt;&amp;lt;a href=&quot;https://openweathermap.org/api/geocoding-api&quot;&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span class=&quot;15&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;地理编码&amp;lt;/span&amp;gt; API - OpenWeatherMap&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;!-- [if !supportLists]--&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;D. &amp;lt;/span&amp;gt;&amp;lt;!--[endif]--&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;网站天气图标获取&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;采用&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;F12&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;检查台来获取源图片&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;：&amp;lt;/span&amp;gt;&amp;lt;a href=&quot;#How-to-get-icon-URL&quot;&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span class=&quot;15&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;天气状况&amp;lt;/span&amp;gt; - OpenWeatherMap&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h2&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;2. 界面搭建&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347351824-766386576.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347365939-458403350.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h2&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;3. 编写详细脚本&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;A.创建按钮与输入框，检查事件&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;监听事件&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347438843-50591915.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347452518-259337095.webp&quot; alt=&quot;&quot; width=&quot;468&quot; height=&quot;28&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347467202-834195448.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347479053-641590858.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;B.&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;创建天气图标加载，采用字典，从持久化文件夹的一个文件夹中加载该图标集合&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347500126-612710467.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347511105-915289023.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347523858-994668070.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;C.&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;创建协程，进行网络查询请求&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;(Get Post)&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347553329-184317497.webp&quot; alt=&quot;&quot; width=&quot;808&quot; height=&quot;127&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347572391-956391829.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;D.此处要深度对照&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;文档实例的各项数据&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;例如：&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;geturl&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;是对应地理编码&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;，这样才可以实现输入名称来查询，而不是对照编码查询&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;Varurl&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;是对应当前天气数据的&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;API(&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;查询主力&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;UnityWebRequest&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;是&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;Unity&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;提供用于网络请求&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;Http(s)&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;的类，&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;SendWebRequest&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;是发送网络请求&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;GetJsonYN&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;是下面的一个统一处理方法&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347599242-521568104.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;E.更新文本&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;UI&amp;lt;/span&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;绝对的对照&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;Json&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;文件&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347644717-22499377.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347661716-939041786.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;Cache&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;为上文创建的字典&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;mso-list: Ignore;&quot;&amp;gt;F. &amp;lt;/span&amp;gt;&amp;lt;!--[endif]--&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;风向选择解析&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;内部包含&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;16&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;方向&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;360/16=22.5&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;，按照索引排序选择对应风向&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;这是将角度转换为数组索引的核心计算。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;degrees + 11.25&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;: 将角度偏移半个区间 (22.5 / 2 = 11.25)。这样做是为了让每个风向区间的中心对齐。例如，0度（正北）应该落在 &quot;北风&quot; 区间。加上11.25后，0度就变成了11.25，除以22.5是0.5，取整后是0，对应 &quot;北风&quot;。22.5度（东北偏北和东北的边界）加上11.25是33.75，除以22.5是1.5，取整后是1，对应 &quot;东北偏北风&quot;。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;/ 22.5&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;: 将调整后的角度除以每个风向区间的宽度，得到一个浮点数索引。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;(int)(...)&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;: 将结果转换为整数，截断小数部分，得到初步的索引。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;% 16&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;: 取模16，确保索引值始终在 0 到 15 之间，以对应 &amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;directions&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;数组的有效索引范围。例如，&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;360度（等同于0度）经过计算后也能正确映射到 &quot;北风&quot;。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;return directions[index];&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;: 使用计算得到的 &amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;index&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;从&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;directions&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;数组中取出对应的风向字符串并返回。&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347697499-969070799.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: Calibri;&quot;&amp;gt;G.&amp;lt;/span&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;挂载脚本&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;MsoNormal&quot;&amp;gt;&amp;lt;span style=&quot;font-family: 宋体;&quot;&amp;gt;&amp;lt;img src=&quot;/images/image-1753347718981-523560948.webp&quot; alt=&quot;&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;a href=&quot;https://cloud.ai0728.com.cn/s/8LTv/OpenWeather&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&amp;gt;源脚本&amp;lt;/a&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>