<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[keren2的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/keren2</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; keren2]]></copyright><item><title><![CDATA[SceneDock：Windows 场景化工作台——一键启动工作链，还能被 AI Agent 调用（CLI / MCP）]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/169364321</link><guid>https://blog.youkuaiyun.com/keren2/article/details/169364321</guid><author>keren2</author><pubDate>Wed, 28 Oct 2026 18:19:38 +0800</pubDate><description><![CDATA[SceneDock 是 Windows 场景化工作台：把应用、文件、网页、脚本与窗口布局组合成场景，一键按顺序启动，也能通过 CLI / MCP 交给 AI Agent 调用，支持一键安全收尾。]]></description><category></category></item><item><title><![CDATA[Unity的PlayerPrefs不起作用]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/108320684</link><guid>https://blog.youkuaiyun.com/keren2/article/details/108320684</guid><author>keren2</author><pubDate>Mon, 31 Aug 2020 14:44:40 +0800</pubDate><description><![CDATA[Unity在记录某个变量存储在本地时，最常使用的是PlayerPrefs方法，可以存整数，字符串等几种变量存在本地。
    例如：

读取某个存储的值：
PlayerPrefs.GetInt(“DrawBookOpenTime”, 0);
记录某个值：
PlayerPrefs.SetInt(“DrawBookOpenTime”, openTimes);

额外扩展一下：这个值存在了哪里？
在Mac系统上，存储在～/Library/PlayerPrefs文件夹，名为unity.[company name].]]></description><category></category></item><item><title><![CDATA[unity在低版本（4.x）中实现自定义形状的图片]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/108051922</link><guid>https://blog.youkuaiyun.com/keren2/article/details/108051922</guid><author>keren2</author><pubDate>Mon, 17 Aug 2020 11:17:01 +0800</pubDate><description><![CDATA[如果图片想实现自定义图片，一般要重写OnPopulateMesh方法来用三角形拼出来一个图片。想要看具体怎么实现，请看这个大佬写的。
https://blog.youkuaiyun.com/wangjiangrong/article/details/107918646

这个方法是在unity5.x版本之后才出现，4.x没有这个方法，你接手的项目又是这种超级老的版本怎么办，你可以用以前提供的一个接口OnFillVBO来实现，具体用法差不多，只是这个方法是4个顶点的图片来绘制的，而不是现在的三角形绘制。具体请看实例：
u]]></description><category></category></item><item><title><![CDATA[unity 让自定义 ui shader 支持 UGUI 的 Mask 功能]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/108050973</link><guid>https://blog.youkuaiyun.com/keren2/article/details/108050973</guid><author>keren2</author><pubDate>Mon, 17 Aug 2020 10:40:53 +0800</pubDate><description><![CDATA[有时候会遇到一种特殊的情况，就是image下的子物体需要一些shader来显示特殊效果，但是添加很多自定义shader以后，ugui的mask就出问题，不起作用了。我发现一个大佬的解决方案，亲测了一下，有效，分享给大家。

unity论坛原文：
http://answers.unity3d.com/questions/980924/ui-mask-with-shader.html
关键的支持代码：
Shader "xxxxxx"
{
Properties
{
......

//MASK SUPPORT A]]></description><category></category></item><item><title><![CDATA[Unity实现双击效果]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/107286103</link><guid>https://blog.youkuaiyun.com/keren2/article/details/107286103</guid><author>keren2</author><pubDate>Mon, 13 Jul 2020 08:57:24 +0800</pubDate><description><![CDATA[unity有默认的单击事件，没有双击效果，需要的话要自己实现。没有做过的人，第一次会有点发蒙，其实原理很简单，创建一个变量，记录两次点击的时间差，如果这个时间差很短，那就认为是个双击。

void DoubleClick(GameObject go, PointerEventData data)
    {
        if(Time.realtimeSinceStartup-lastTime&lt;0.3f)
        {
            Debug.Log("double click!]]></description><category></category></item><item><title><![CDATA[Unity播放gif]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/105533969</link><guid>https://blog.youkuaiyun.com/keren2/article/details/105533969</guid><author>keren2</author><pubDate>Wed, 15 Apr 2020 14:26:07 +0800</pubDate><description><![CDATA[unity不支持gif动图格式，因此建议使用序列帧的方式，我之前写过一份播放序列帧的文章，可以找找。如果非要使用序列帧，那就只能将图片加载出来，然后转成texture2d的格式，然后逐帧播放。只是这样会比较卡顿，不太容易被接收。
直接上代码，这个代码是转载别人的，还行，需要先打开你打开你当前使用unity的文件位置-&gt;Data-&gt;Mono-&gt;lib-&gt;mono-&gt;2....]]></description><category></category></item><item><title><![CDATA[unity查找资源引用]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/105291106</link><guid>https://blog.youkuaiyun.com/keren2/article/details/105291106</guid><author>keren2</author><pubDate>Fri, 03 Apr 2020 14:18:54 +0800</pubDate><description><![CDATA[在做unity包体优化和查看别人的工程时，总是会看到一些预制体或者工程，想要知道这些物体都是用在哪里，能不能删除就是一件很有意义的事情。
查找的原理就是利用unity的guid，unity里面每一个文件都会有一个对应的.meta文件，里面使用guid来记录当前物体的路径和被其它物体引用信息，因此遍历整个工程中的meta文件，查找里面是否有引用该物体的guid就可以知道是否被引用。原理很简单，我们直...]]></description><category></category></item><item><title><![CDATA[Unity发布PC端的exe后，加载Excel大坑（Excel.dll方式）]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/104742258</link><guid>https://blog.youkuaiyun.com/keren2/article/details/104742258</guid><author>keren2</author><pubDate>Sun, 08 Mar 2020 22:26:24 +0800</pubDate><description><![CDATA[使用Excel.dll来加载Excel会遇到一个大坑，那就是在编辑器下一切都没有问题，但是发布成pc端的exe后，加载Excel就出问题了。（目前只在pc上做过实验，ios，android，mac效果未知）。
遇到的问题主要是加载07版以后的.xlsx文件，在pc上会报excelReader.AsDataSet();错误，编辑器上是正常的。如果改成加载07版以前的.xls格式，则又会遇到加载中文s...]]></description><category></category></item><item><title><![CDATA[Unity Texture2D图片转换成image]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/104742141</link><guid>https://blog.youkuaiyun.com/keren2/article/details/104742141</guid><author>keren2</author><pubDate>Sun, 08 Mar 2020 22:14:51 +0800</pubDate><description><![CDATA[废话少说，直接上代码看。
//将texture转成image
    Sprite GetSpriteByTexture(Texture2D tex)
    {
        Sprite _sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
        r...]]></description><category></category></item><item><title><![CDATA[Unity加载本地图片]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/104742081</link><guid>https://blog.youkuaiyun.com/keren2/article/details/104742081</guid><author>keren2</author><pubDate>Sun, 08 Mar 2020 22:12:43 +0800</pubDate><description><![CDATA[我当前使用的是旧版Unity，用www来加载。www加载方式可以加载本地资源和服务器上的资源。
string resUrl = "http://pic1.win4000.com/mobile/2020-02-06/5e3ba18b062a8.jpg";       //服务器上的图片地址
    Texture2D pic;                //下载的图片资源
    Image s...]]></description><category></category></item><item><title><![CDATA[新版unity的log输出地址]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/104741939</link><guid>https://blog.youkuaiyun.com/keren2/article/details/104741939</guid><author>keren2</author><pubDate>Sun, 08 Mar 2020 22:07:11 +0800</pubDate><description><![CDATA[在旧版unity（2017）之前，如果unity要发布成pc端的exe，unity中的log会输出在Data文件下，但是新版之后，log不再这里了，output_log.txt会生成在C盘。C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目。


...]]></description><category></category></item><item><title><![CDATA[c# 我常用的字典的遍历方法]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/104741710</link><guid>https://blog.youkuaiyun.com/keren2/article/details/104741710</guid><author>keren2</author><pubDate>Sun, 08 Mar 2020 21:57:48 +0800</pubDate><description><![CDATA[我一般不喜欢使用foreach，我喜欢这样
Dictionary&lt;int, string&gt;.Enumerator it = htd.hotInfos.GetEnumerator();
        while (it.MoveNext())
        {
            GameObject go = Instantiate(prefabBtn) as GameObje...]]></description><category></category></item><item><title><![CDATA[Unity浏览本地文件]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/103491662</link><guid>https://blog.youkuaiyun.com/keren2/article/details/103491662</guid><author>keren2</author><pubDate>Wed, 11 Dec 2019 14:32:24 +0800</pubDate><description><![CDATA[1、浏览本地文件
public static void DeleteGo()
    {
        string path1 = @"F:\BookCity_OutputBin\HuaShiDaUnity\assets\Res_BornEffects";
        //System.Diagnostics.Process.Start("explorer.exe", path);

  ...]]></description><category></category></item><item><title><![CDATA[C# 复制文件夹下面的所有文件到指定路径下]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/103065992</link><guid>https://blog.youkuaiyun.com/keren2/article/details/103065992</guid><author>keren2</author><pubDate>Thu, 14 Nov 2019 13:49:58 +0800</pubDate><description><![CDATA[public static void CopyDirectory2(string sourceDirPath, string saveDirPath)
    {
        try
        {
            LogSystem.Log("++++ copy: " + sourceDirPath + " -- to : " + saveDirPath);

         ...]]></description><category></category></item><item><title><![CDATA[Unity一键替换模型中的Shader工具]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/103065904</link><guid>https://blog.youkuaiyun.com/keren2/article/details/103065904</guid><author>keren2</author><pubDate>Thu, 14 Nov 2019 13:44:19 +0800</pubDate><description><![CDATA[有些需求是一键替换模型中的一些shader，这个工具是给美术使用的，只需要填写要替换的sheder名字，和新的名字即可。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;

//一键替换模型上...]]></description><category></category></item><item><title><![CDATA[Unity .asset文件采坑]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/103054264</link><guid>https://blog.youkuaiyun.com/keren2/article/details/103054264</guid><author>keren2</author><pubDate>Wed, 13 Nov 2019 18:17:47 +0800</pubDate><description><![CDATA[突然发现unity可以将类直接保存在本地，可以用作某些设置的配置信息。而且选中这个文件，可以在unity编辑器Inspector中看到，常见的int，string，list都可以直接实例化出来，非常方便。因此我就直接拿来试验一下。
首先，创建一个.asset文件，网上文章一大把，但是其中8成的人都只直接复制别人的。我这里也简单说一下，直接上代码。
public class ShaderReplac...]]></description><category></category></item><item><title><![CDATA[自定义绘制UGUI图片形状(转载）]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/103007323</link><guid>https://blog.youkuaiyun.com/keren2/article/details/103007323</guid><author>keren2</author><pubDate>Mon, 11 Nov 2019 11:23:47 +0800</pubDate><description><![CDATA[最近要做一个demo，要求就是快，其中有一个需求就是要做一个直角三角形图片。我发现就算三角形的各个顶点位置比较难，发现一哥们写了个手动控制图片的形状，本来是用在雷达图上的，我发现我可以直接拿来摆一个三角形。现在分享给大家。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Area : ...]]></description><category></category></item><item><title><![CDATA[将RawImage几等分方案]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/102988403</link><guid>https://blog.youkuaiyun.com/keren2/article/details/102988403</guid><author>keren2</author><pubDate>Sat, 09 Nov 2019 16:18:59 +0800</pubDate><description><![CDATA[废话不多说，直接上抄来的代码。
using System;
using UnityEngine;
using UnityEngine.UI;
 
public class UICircle : RawImage
{
	const int FILL_PERCENT = 100;
	float thickness = 5;
 
	[SerializeField][Range(4,360)]
	int ...]]></description><category></category></item><item><title><![CDATA[动态加载dll]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/102681268</link><guid>https://blog.youkuaiyun.com/keren2/article/details/102681268</guid><author>keren2</author><pubDate>Tue, 22 Oct 2019 14:11:49 +0800</pubDate><description><![CDATA[动态加载dll
    static string passStr = "Dxl";
    static string targetPath = "Assets/Resources/DllTest/TestDll.bytes";
    static string dllPath = "Assets/Plugins/Test2019Dll.dll";
//将一个正常的dll变成一个加密的dll
...]]></description><category></category></item><item><title><![CDATA[Unity轮盘滚动效果]]></title><link>https://blog.youkuaiyun.com/keren2/article/details/99686760</link><guid>https://blog.youkuaiyun.com/keren2/article/details/99686760</guid><author>keren2</author><pubDate>Fri, 16 Aug 2019 22:48:46 +0800</pubDate><description><![CDATA[这里使用平面2d来模拟一个3d转换，原理很简单，假设有一个圆形，所有的物体都平均的分布在这个圆环轨迹上面。这个圆环轨迹就是所有物体运行的轨道，是个垂直于你（摄像机）的方向，在靠近摄像机的位置（实际是居中位置），物体尺寸越大，越靠后和靠近两边，物体尺寸越小。
生成的子物体，上面挂上这个脚本。
using System;
using System.Collections;
using System.C...]]></description><category></category></item></channel></rss>