<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AcmHonor的专栏]]></title><description><![CDATA[菜鸟不吃素 , QwQ]]></description><link>https://blog.youkuaiyun.com/AcmHonor</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AcmHonor]]></copyright><item><title><![CDATA[Unity TextMeshPro 打字机效果 修改顶点透明度的方式]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/148296073</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/148296073</guid><author>AcmHonor</author><pubDate>Thu, 29 May 2025 08:53:41 +0800</pubDate><description><![CDATA[【代码】Unity TextMeshPro 打字机效果 修改顶点透明度的方式。]]></description><category></category></item><item><title><![CDATA[UnityShader 植物被风吹弯效果]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/148075918</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/148075918</guid><author>AcmHonor</author><pubDate>Mon, 19 May 2025 22:20:02 +0800</pubDate><description><![CDATA[【代码】UnityShader 植物被风吹效果。]]></description><category></category></item><item><title><![CDATA[Unity 修改SkinnedMesh的Pivot]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/147966960</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/147966960</guid><author>AcmHonor</author><pubDate>Thu, 15 May 2025 03:15:45 +0800</pubDate><description><![CDATA[Unity 修改蒙皮SkinnedMesh的中心点Pivot]]></description><category></category></item><item><title><![CDATA[Unity UGUI Image使用图集透明度点击过滤BUG]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/147262760</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/147262760</guid><author>AcmHonor</author><pubDate>Wed, 16 Apr 2025 04:20:27 +0800</pubDate><description><![CDATA[Unity的Image.IsRaycastLocationValid在判断alphaHitTestMinimumThreshold的时候会使用图集中的点判断alpha而不是原Sprite中的点。其实只重写了IsRaycastLocationValid方法，但是要访问private方法 只能拷贝出来了。所以会导致无法正确获取到alpha，要修复这个BUG可以重写Image类。将Sprite打入图集时会默认去掉边缘的alpha=0的部分。主要是添加了这段代码 其他都是原装的。]]></description><category></category></item><item><title><![CDATA[UnityShader 世界坐标不随模型变化]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/125365143</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/125365143</guid><author>AcmHonor</author><pubDate>Mon, 20 Jun 2022 02:03:04 +0800</pubDate><description><![CDATA[今天遇到一个大坑，记录一下
上面两行代码结果是一样的，导致世界坐标一直等于模型坐标]]></description><category></category></item><item><title><![CDATA[计算直线和平面的交点]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/123330260</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/123330260</guid><author>AcmHonor</author><pubDate>Tue, 08 Mar 2022 12:22:37 +0800</pubDate><description><![CDATA[平面的法向量N和平面上点P1可以确定一个平面
直线的方向向量N1和直线上一个点P0确定一条直线
已知P0不在平面上，计算直线和平面的交点P2
很容易理解，向量P0P1和向量P0P2在平面法线上的投影长度相等，即Dot(P0P1, N)等于Dot(P0P2, N)
还有向量N1在向量N上的投影长度Dot(N1, N)/Dot(P0P2, N)等于N1的长度/P0P2的长度
上代码：
        /// &lt;summary&gt;
        /// 计算直线和平面的交点
        /// &]]></description><category></category></item><item><title><![CDATA[Unity Behavior Designer(行为树)Abort Type(中断类型)]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/123234763</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/123234763</guid><author>AcmHonor</author><pubDate>Wed, 02 Mar 2022 17:12:40 +0800</pubDate><description><![CDATA[我的理解：
正常情况下组合任务中的子任务运行完之后只有等到Restart之后才会再次运行，但是当组合任务设置了Abort Type(中断类型)后，子任务的OnUpdate仍然会继续运行，当子任务的OnUpdate返回值发生变化时就会产生中断，中断当前运行中的任务，回到发生变化的子任务中重新运行子任务
None: 不会产生中断
Self: 当前组合任务还没运行完，所有子任务的OnUpdate会继续运行，检测是否发生中断
Lower Priority：同层且比自身优先级低的任务还没运行完，所有子任务的OnUpd]]></description><category></category></item><item><title><![CDATA[Unity XR Interaction Toolkit 2.0.0使用方法]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/123038281</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/123038281</guid><author>AcmHonor</author><pubDate>Sun, 20 Feb 2022 23:43:32 +0800</pubDate><description><![CDATA[项目名称：VR保龄球
项目地址：https://github.com/achonor/VRBowling
VR Interaction Toolkit 2.0.0的Demo项目：
其中包含移动，传送，旋转，抓取，按键回调的用法

]]></description><category></category></item><item><title><![CDATA[UnityShader 翻书效果]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/122838835</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/122838835</guid><author>AcmHonor</author><pubDate>Wed, 09 Feb 2022 11:53:16 +0800</pubDate><description><![CDATA[Shader "Achonor/TurnBook"
{
    Properties
    {
        _MainTex ("FrontTex", 2D) = "white" {}
        _BackTex ("BackTex", 2D) = "white" {}
        _Speed ("Turn _Speed", Range(0, 1)) = 0.5
        _XOffset ("Centor X Offset", float) = 5
        _Angle .]]></description><category></category></item><item><title><![CDATA[Unity ScreenToWorldPoint精度不够]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/122369537</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/122369537</guid><author>AcmHonor</author><pubDate>Fri, 07 Jan 2022 17:56:16 +0800</pubDate><description><![CDATA[开发中遇到float精度不够
 Vector3 worldPos = mMapCamera.ScreenToWorldPoint(screenPos);
 Vector3 tempPos = mMapCamera.WorldToScreenPoint(worldPos);

上面代码执行后screenPos不等于tempPos ，找了半天发现是float精度不够，最后自己重写ScreenToWorldPoint来解决
public Vector3 ScreenToWorldPoint(Vector3 scr]]></description><category></category></item><item><title><![CDATA[Unity Canvas下的UI坐标转屏幕坐标]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/122212331</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/122212331</guid><author>AcmHonor</author><pubDate>Wed, 29 Dec 2021 11:44:48 +0800</pubDate><description><![CDATA[public static Vector2 Local2ScreenPoint(this Transform transform, Camera camera, Vector2 localPos) {
            Vector2 worldPos = transform.TransformPoint(localPos);
            return camera.WorldToScreenPoint(worldPos);
        }

        /// &...]]></description><category></category></item><item><title><![CDATA[基于ESP32-Cam和Unity的远程遥控视频小车]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/121294721</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/121294721</guid><author>AcmHonor</author><pubDate>Fri, 12 Nov 2021 19:58:27 +0800</pubDate><description><![CDATA[项目链接：
Unity:		https://gitee.com/achonors/smart-car
ESP32:	https://gitee.com/achonors/esp32_-smart-car
提示：
ESP32项目使用VSCode安装PlatformIO后打开运行
主要技术：
1.ESP32上打开CameraWebServer推送摄像头的实时画面
2.ESP32开启TCP服务，监听远程发送的指令
3.ESP32使用PWM控制小车四个车轮转速，实现小车转向，前进，后退
4.Unity上使用UMP插]]></description><category></category></item><item><title><![CDATA[ESP32的TCP延迟太大]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/121294332</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/121294332</guid><author>AcmHonor</author><pubDate>Fri, 12 Nov 2021 19:27:35 +0800</pubDate><description><![CDATA[问题：局域网下使用ESP32开启WiFiServer监听TCP延迟有半秒多
原因：再循环读取TCP接受的数据时使用了readBytes方法
client.readBytes(readBuffer, 20);

解决：将readBytes方法替换成read方法就好了
readBuffer[0] = client.read();

具体原因也没仔细看源码了

...]]></description><category></category></item><item><title><![CDATA[WPF Binding不生效的问题 BindingExpression]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/116063348</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/116063348</guid><author>AcmHonor</author><pubDate>Fri, 23 Apr 2021 17:14:58 +0800</pubDate><description><![CDATA[运行输出错误：BindingExpression path error: ‘text’ property not found on ‘object’
C#
    public class Phone {
        public string text;
    }

XAML
&lt;TextBlock Text="{Binding text}" Width="200"/&gt;

去官方查了一下发现

所以C#中要改成
    public class Phone {
        public]]></description><category></category></item><item><title><![CDATA[1316. 不同的循环子字符串]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115490620</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115490620</guid><author>AcmHonor</author><pubDate>Wed, 07 Apr 2021 17:17:01 +0800</pubDate><description><![CDATA[题目链接：https://leetcode-cn.com/problems/distinct-echo-substrings/


思路：前缀字符串哈希
public class Solution {
   int[] nextIndex = new int[2005];
    long[] hashPre = new long[2005];
    long[] hashPow = new long[2005];
    HashSet&lt;long&gt; hasHash = new HashSet]]></description><category></category></item><item><title><![CDATA[C# 双向队列 单调栈]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115487701</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115487701</guid><author>AcmHonor</author><pubDate>Wed, 07 Apr 2021 15:51:37 +0800</pubDate><description><![CDATA[public class Deque&lt;T&gt; {
    public class DequeNode&lt;T&gt; {
        public T value;
        public DequeNode&lt;T&gt; pre;
        public DequeNode&lt;T&gt; next;
    }

    public int Lenght;
    public DequeNode&lt;T&gt; Front = new DequeNode&lt;]]></description><category></category></item><item><title><![CDATA[LeetCode 483. 最小好进制]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115464720</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115464720</guid><author>AcmHonor</author><pubDate>Tue, 06 Apr 2021 17:01:13 +0800</pubDate><description><![CDATA[题目链接：https://leetcode-cn.com/problems/smallest-good-base/


思路：
1.先遍历[2, 10]进制是不是满足条件，后面再判断[11, n - 1]
2.假设n转换成x进制等于y, 其中y = 11111…111(长度等于n的长度)
3.二分查找x的值，范围是[11, n - 1]
4.找到对应的x则返回，否则y = y / 10，继续第3步的二分查找
public class Solution {
   /// &lt;summary&gt;
   ]]></description><category></category></item><item><title><![CDATA[LeetCode 1425. 带限制的子序列和]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115456653</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115456653</guid><author>AcmHonor</author><pubDate>Tue, 06 Apr 2021 11:12:43 +0800</pubDate><description><![CDATA[题目链接：https://leetcode-cn.com/problems/constrained-subsequence-sum/


思路：动态规划 dp[i] = Max(nums[i], nums[i] + dp[i + j]) 其中0 &lt; j &lt;= k，但是直接遍历dp[i + j]会超时，所以要维护一个能快速查找dp[i + j]中最大值的结构，可以使用单调栈，也可以用平衡二叉树，由于Ｃ＃中没有双向队列，干脆就直接拷个Splay树过来。
        public class So]]></description><category></category></item><item><title><![CDATA[LeetCode 327. 区间和的个数]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115397557</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115397557</guid><author>AcmHonor</author><pubDate>Fri, 02 Apr 2021 14:38:55 +0800</pubDate><description><![CDATA[题目链接：https://leetcode-cn.com/problems/count-of-range-sum/

题意：给定一个数组nums，找出子数组中元素和在[lower, upper]中有多少个，
[-2, 5, -1]的子数组有[-2, 5, -1]，[-2, 5]，[-2]，[5, -1]，[5]，[-1]共6个，满足条件的共3个
思路：
1.维护一个平衡二叉树，将所有以下标以0为起点的子数组和插入二叉树中
（[-2, 5, -1] = 2，[-2, 5] = 3，[-2] = -2）
满足在]]></description><category></category></item><item><title><![CDATA[LeetCode 1000. 合并石头的最低成本]]></title><link>https://blog.youkuaiyun.com/AcmHonor/article/details/115350956</link><guid>https://blog.youkuaiyun.com/AcmHonor/article/details/115350956</guid><author>AcmHonor</author><pubDate>Wed, 31 Mar 2021 15:54:50 +0800</pubDate><description><![CDATA[题目连接：https://leetcode-cn.com/problems/minimum-cost-to-merge-stones/

思路：区间动态规划，详细看注释
using System;
using System.Collections.Generic;
using System.Text;

namespace LeetCode {
    class Program_1000 {
        int Step;
        //前缀和
        int[] Sum = new i]]></description><category></category></item></channel></rss>