<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jeff的博客]]></title><description><![CDATA[知乎： ”撩撩头发可好“]]></description><link>https://blog.youkuaiyun.com/noEnoughChief</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; noEnoughChief]]></copyright><item><title><![CDATA[Unity与IOS——Twitter分享SDK]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/112830488</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/112830488</guid><author>noEnoughChief</author><pubDate>Tue, 19 Jan 2021 15:07:17 +0800</pubDate><description><![CDATA[这次记录一下Unity接入Twitter分享的SDK，做海外版本开发的应该都会接触到。
由于项目中使用的是XUPorter管理IOS的SDK，所以进行扩展即可。
关于UnityIOS的SDK管理方案XUPorter可以看下这个大佬的文章：
https://blog.youkuaiyun.com/u013457933/article/details/87990998
1.下载SDK：
https://github.com/twitter-archive/twitter-kit-ios
这是Github上twitterki]]></description><category></category></item><item><title><![CDATA[Unity与安卓——Obb自动改名]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/108671027</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/108671027</guid><author>noEnoughChief</author><pubDate>Fri, 18 Sep 2020 18:47:06 +0800</pubDate><description><![CDATA[上次记录了一下GooglePlay上架需要分包的事项。如下链接：
GooglePlay上架分包
但是在每次打完包，都需要手动改Obb的名字，这里写了一个自动改成符合要求的命名规则。
具体就是使用OnPostProcessBuild方法。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Call]]></description><category></category></item><item><title><![CDATA[Unity与IOS安卓——应用评价]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/108448617</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/108448617</guid><author>noEnoughChief</author><pubDate>Mon, 07 Sep 2020 15:19:43 +0800</pubDate><description><![CDATA[IOS评价
在IOS10.3之后，用户可以在应用内进行评价。

每台设备、每个APP、每年只能弹出3次应用内评价框。
Unity为我们提供了这个方法的接口：
Device.RequestStoreReview();

安卓评价
安卓采用跳转到应用商店进行评价的方式。
Application.OpenURL("market://details?id=" + productName);

比如productName是com.google.android.apps.maps，为地图应用页面。


...]]></description><category></category></item><item><title><![CDATA[Unity与安卓——GooglePlay分包]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/108445454</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/108445454</guid><author>noEnoughChief</author><pubDate>Mon, 07 Sep 2020 15:00:57 +0800</pubDate><description><![CDATA[GooglePlay上架分包
GooglePlay上架的应用如果超过100M，Google就会要求开发者使用APK+OBB的进行分包处理。
还好Unity这边已经为我们提供了分包的方法。


在PlayerSettings——&gt;PublishingSettings里勾选Split Application Binary

2.打完包之后，会生成两个文件。
3.更改Obb文件名为：main.bundleVersionCode.bundleID.obb
bundleVersionCode为Unity设置中的]]></description><category></category></item><item><title><![CDATA[读取CSV数据]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/107430520</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/107430520</guid><author>noEnoughChief</author><pubDate>Sat, 18 Jul 2020 16:19:25 +0800</pubDate><description><![CDATA[可以使用读取字符串数组的方法，每一行string为数组的一个元素。
然后以逗号切分string，获取内容。
比如下面这个表格的CSV数据：




001
Google
谷歌
www.Google.com




002
Apple
苹果
www.Apple.com


003
Alibaba
阿里
www.alibabagroup.com


以文本打开就是这样的：

下面这段代码输出csv表格里所有的网址
public static string[] OpenCSV(string filepath)
{]]></description><category></category></item><item><title><![CDATA[HashSet与List的Contains方法]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/107430100</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/107430100</guid><author>noEnoughChief</author><pubDate>Sat, 18 Jul 2020 15:48:37 +0800</pubDate><description><![CDATA[HashSet不能用索引访问，不能存储重复数据。
        HashSet&lt;string&gt; hs = new HashSet&lt;string&gt;();
        hs.Add("hahah");
        Console.Write(hs[0]);    //这里会报错
        
        List&lt;string&gt; ls = new List&lt;string&gt;();
        ls.Add("hhhh");
        Co]]></description><category></category></item><item><title><![CDATA[Lua——改变require函数做到非侵入式更改]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/107393902</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/107393902</guid><author>noEnoughChief</author><pubDate>Thu, 16 Jul 2020 21:26:16 +0800</pubDate><description><![CDATA[遇到这么个需求，做新版本但不可以改动以前版本的代码。
这个时候就需要用非侵入式写法。
记录一下从一个大佬那里学到的一种非侵入式写法。
下面这是旧版本代码。
GamePanel = class("GamePanel");
local M = GamePanel;
function M:OpenPanel()
	print("openpanel");
end
return M;

下面是更改require函数代码。
local changeTable = {};
changeTable[GamePanel] =]]></description><category></category></item><item><title><![CDATA[UnityShader应用——卡通渲染]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/104818672</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/104818672</guid><author>noEnoughChief</author><pubDate>Thu, 12 Mar 2020 14:47:00 +0800</pubDate><description><![CDATA[1.描边
外描边之前记过。
内描边的实现：ILM的a通道控制内描边的范围。

也就是黑色区域对应uv上的地方进行需要内描边。在最后与光照模型算出的颜色相乘就行。
2.光照模型
diffuse部分：
ILM的g通道控制漫反射阴影的阈值。

shadowRange = g值 * 顶点颜色(平时没有的数据)  共同决定受光范围。也就是说黑色的区域，是不想受到阴影的。
diffuse = max( 0 ...]]></description><category></category></item><item><title><![CDATA[Lua——小数四舍五入]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/103281396</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/103281396</guid><author>noEnoughChief</author><pubDate>Wed, 27 Nov 2019 19:29:49 +0800</pubDate><description><![CDATA[保留整数
math.floor(x + 0.5)即可
math.floor(x)会直接舍弃小数点后的部分。
如：  4.4    –   4.9     4
5.6    –    6.1     6
保留几位小数进行四舍五入：
保留2位 num为100， 3位为1000，…
math.floor(x * num+ 0.5) / num
0.06499   要 变成 0.065   (保留3位小数...]]></description><category></category></item><item><title><![CDATA[Unity——第三人称跟随摄像机的实现]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/100062297</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/100062297</guid><author>noEnoughChief</author><pubDate>Sun, 25 Aug 2019 13:35:11 +0800</pubDate><description><![CDATA[实现一个第三人称跟随的摄像机，如下

那就开始吧！！
1.思路
摄像机具有上下和左右的旋转，也就是沿X轴和Y轴的旋转，不存在Z轴的旋转。
我们设置如下结构：

FollowCamera控制Y轴旋转，pivot控制X轴旋转，MainCamera不进行旋转。
然后是摄像机跟随，我们在LateUpdate中进行平滑跟随即可。
2.写代码
这里我贴部分关键代码，文章最后附上全部代码。
控制摄像机旋转部分
...]]></description><category></category></item><item><title><![CDATA[Unity与Android——AS打aar包供Unity调用]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/96575705</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/96575705</guid><author>noEnoughChief</author><pubDate>Sat, 20 Jul 2019 12:19:18 +0800</pubDate><description><![CDATA[AndroidStudio部分
1.新建Android工程，与Unity项目包名一致(com.xx.xxx)
2.在Unity安装路径Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes.jar，找到Classes.jar并拷贝到安卓工程libs文件夹下。
添加依赖：在bulid.gradle...]]></description><category></category></item><item><title><![CDATA[UnityShader应用——双摄像机分别渲染彩色主角和黑白环境]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/88760551</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/88760551</guid><author>noEnoughChief</author><pubDate>Sat, 23 Mar 2019 14:22:20 +0800</pubDate><description><![CDATA[实现黑白画面中只有主角是彩色的画面。


1.创建两个Camera分别渲染环境和角色

增加一个LayerMask，命名为Color层。

然后设置两个Camera的属性。

EnvCam的渲染层取消勾选Color层和UI层。

RoleCam的ClearFlags设置成只清理深度缓存， 渲染层只选UI和Color层。
2.EnvCam添加黑白灰度后处理
先写一个Shader： （获得摄像机画面C...]]></description><category></category></item><item><title><![CDATA[UnityShader应用——使用深度值实现Fog雾效]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/86583215</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/86583215</guid><author>noEnoughChief</author><pubDate>Mon, 21 Jan 2019 19:45:56 +0800</pubDate><description><![CDATA[1.开启深度
GetComponent&amp;amp;lt;Camera&amp;amp;gt;().depthTextureMode = DepthTextureMode.Depth;   //开启摄像机深度mode

2._CameraDepthTexture
存储深度信息的Tex，需要在Shader中声明；
sampler2D _CameraDepthTexture;

3.ZBuffer   (只有ShaderTag是...]]></description><category></category></item><item><title><![CDATA[UnityShader——渲染队列，ZTest，ZWrite，Early-Z]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/85329228</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/85329228</guid><author>noEnoughChief</author><pubDate>Fri, 28 Dec 2018 17:43:55 +0800</pubDate><description><![CDATA[转载： https://blog.youkuaiyun.com/puppet_master/article/details/53900568
简介

在渲染阶段，引擎所做的工作是把所有场景中的对象按照一定的策略（顺序）进行渲染。最早的是画家算法，顾名思义，就是像画家画画一样，先画后面的物体，如果前面还有物体，那么就用前面的物体把物体覆盖掉，不过这种方式由于排序是针对物体来排序的，而物体之间也可能有重叠，所以效...]]></description><category></category></item><item><title><![CDATA[UnityShader应用——外发光实现]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/85251217</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/85251217</guid><author>noEnoughChief</author><pubDate>Tue, 25 Dec 2018 17:15:45 +0800</pubDate><description><![CDATA[学习了一下实现物体外发光的Shader。

实现外发光的Pass
	//pass2 生成模型外部的光晕
		Pass
		{
			Name &amp;quot;OutLight&amp;quot;
			Tags {&amp;quot;LightMode&amp;quot; = &amp;quot;Always&amp;quot;}
			Cull Front     //不正面剔除会出错
			Blend SrcAlpha One

			CGPROGRAM
			#pragma vertex ve..]]></description><category></category></item><item><title><![CDATA[Lua——函数中：和 . 的区别]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/84974003</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/84974003</guid><author>noEnoughChief</author><pubDate>Wed, 12 Dec 2018 15:40:37 +0800</pubDate><description><![CDATA[.定义方法
function Man.SayName(self)
    print(&quot;My name is &quot;..self.name)
end
m.SayName(m)

需要手动传入self参数，才可以获取self的字段；
：定义方法
function Man:SayName()
    print(&quot;My name is &quot;..self.name)
end
m:SayName()

使用：定...]]></description><category></category></item><item><title><![CDATA[Lua——配置IDEA+EmmyLua插件开发环境]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/84970890</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/84970890</guid><author>noEnoughChief</author><pubDate>Wed, 12 Dec 2018 12:38:14 +0800</pubDate><description><![CDATA[下载安装IntelliJ IDEA
https://www.jetbrains.com/idea/?fromMenu
安装EmmyLua插件
1.打开Idea，进入File-Settings-Plugins,搜索EmmyLua并安装。

安装完之后，重启IDEA。
创建项目

开始愉快的编码~

其他设置
1.由于我之前使用VS比较多，可以把快捷键设置为VS风格。
File-Setting-Key...]]></description><category></category></item><item><title><![CDATA[Lua——嵌套表排序的小坑]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/84940014</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/84940014</guid><author>noEnoughChief</author><pubDate>Mon, 10 Dec 2018 14:53:53 +0800</pubDate><description><![CDATA[最近实习接到一个对道具进行排序的任务，对lua了解不深，刚开始犯了点傻；
Lua自带table排序我们可以自定义排序函数，但只支持下标为整型的数组table，所以遇到嵌套table，键值对这种用另一种方法解决；
数组排(只支持下标为整型的table)
require &amp;amp;amp;quot;TableUtil&amp;amp;amp;quot;;

myTable = {
	[1] = &amp;amp;amp;quot;abc&amp;amp;amp;quot;,
	[2] = ]]></description><category></category></item><item><title><![CDATA[UnityShader应用——边缘内发光]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/84141429</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/84141429</guid><author>noEnoughChief</author><pubDate>Fri, 16 Nov 2018 16:24:37 +0800</pubDate><description><![CDATA[在学完了Phong光照模型之后，边缘光就可以在它基础上添加几行代码完成；

Shader:
Shader &amp;quot;Unlit/RimLight&amp;quot;
{
	Properties{
		_SpecularGlass(&amp;quot;SpecularGlassStrength&amp;quot;, Range(0,64)) = 32
		_ObjColor(&amp;quot;ObjColor&amp;quot;, color) = (1,1,1,1)
		_RimColor(..]]></description><category></category></item><item><title><![CDATA[UnityShader——Phong光照模型 = Diffuse + Specular + Ambient]]></title><link>https://blog.youkuaiyun.com/noEnoughChief/article/details/84037230</link><guid>https://blog.youkuaiyun.com/noEnoughChief/article/details/84037230</guid><author>noEnoughChief</author><pubDate>Thu, 15 Nov 2018 17:58:29 +0800</pubDate><description><![CDATA[一.图形学颜色叠加乘法(各分量相乘)
 light(1, 1, 1) * stuff(0.2f, 0.3f, 0.5f) = (0.2f, 0.3f, 0.5f)

二.经验模型Phong
Phong = Ambient + Diffuse +Specular
1.Diffuse漫反射

Diffuse = dot ( -lightDir , N)  * lightColor
这里点乘：    d...]]></description><category></category></item></channel></rss>