-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
169 lines (81 loc) · 236 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>25-02-13 回合制卡牌游戏开发记录</title>
<link href="/2025/02/13/25-02-12-gamedevelopment/"/>
<url>/2025/02/13/25-02-12-gamedevelopment/</url>
<content type="html"><![CDATA[<h2 id="项目概述"><a href="#项目概述" class="headerlink" title="项目概述"></a>项目概述</h2><p>项目的课程 <a href="https://learn.u3d.cn/tutorial/CardCourse-DOTK">Unity 中文课堂-《王国之梦》Roguelike 卡牌游戏开发教程</a></p><p>我已经完成的游戏在 B 站预览的视频:<a href="https://www.bilibili.com/video/BV1K9NkevEmo/">Unity 制作的类杀戮尖塔的回合制肉鸽卡牌游戏</a><br>游戏 Demo:<a href="https://pan.baidu.com/s/1CGwT1wVRqCq9VFYQbrBHlA?pwd=vhbf">《王国之梦》Roguelike 卡牌游戏 Demo</a></p><h3 id="制作的内容及功能:"><a href="#制作的内容及功能:" class="headerlink" title="制作的内容及功能:"></a>制作的内容及功能:</h3><ul><li>随机地图生成</li><li>随机房间生成</li><li>三种敌人对战房间</li><li>休息房间</li><li>宝箱房间</li><li>卡牌效果实现<ul><li>攻击牌</li><li>防御牌</li><li>回血牌</li><li>抽卡牌</li><li>Buff 攻击力牌</li><li>DeBuff 攻击力牌</li></ul></li><li>对战胜利后随机抽卡</li><li>UI 动效<ul><li>血条动画及变色</li><li>按钮反馈</li><li>淡入淡出</li></ul></li></ul><h3 id="学到的知识点:"><a href="#学到的知识点:" class="headerlink" title="学到的知识点:"></a>学到的知识点:</h3><ul><li>UI Toolkit 制作全部 Runtime UI<ul><li>USS 样式设计</li><li>Pseudo-classes</li><li>数据绑定</li></ul></li><li>抽象类多态</li><li>Unity Event System<ul><li>拖拽非 UI 物体</li></ul></li><li>Scriptable Object 事件传递</li><li>通用泛型事件及监听</li><li>数学逻辑算法</li><li>Unity 新 API<ul><li>ObjectPool</li><li>Awaitable</li></ul></li><li>Spine 动画<ul><li>SDK 安装</li><li>动画使用方法</li></ul></li></ul><h2 id="项目开发"><a href="#项目开发" class="headerlink" title="项目开发"></a>项目开发</h2><p>由于因为这个课程内容是收费的,在这篇公开的博客中,我就只记录一些在项目开发中遇到的问题和解决方案。</p><h3 id="遇到的一些问题"><a href="#遇到的一些问题" class="headerlink" title="遇到的一些问题"></a>遇到的一些问题</h3><p><strong>1. UI Toolkit 绘制的 UI 图层渲染顺序和被上一层覆盖的 UI 元素仍然会被鼠标点击而触发 Clicked 绑定的事件。</strong></p><ul><li><p>我是从这个项目彻底接触用 Unity UI Toolkit 来绘制游戏 Runtime 中的 UI,之前只是用 UIToolkit 绘制些简单的 Editor,导致刚上手的时候忘记在游戏运行中的渲染图层顺序,导致 UI 元素重叠,或者是被覆盖的 UI 元素仍然会触发 Clicked 绑定的事件,这并不是我想要的。</p><p>比如我的项目中在实现展示玩家卡组所有卡牌的 Panel 时,左下角有一个取消返回的Button,是可以被触发点击事件的,但同时这个Button如果正好显示在地图房间上面,这个时候我点击,不仅会触发这个按钮上的 Clicked 事件也会触发地图房间上的事件,进行了加载场景。</p><p>于是我尝试在 Room.cs 文件内添加了以下代码:</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// Room.cs</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnMouseDown</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">// 处理点击事件</span> <span class="token comment">// Debug.Log("点击了房间" + roomData.roomType);</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>EventSystem<span class="token punctuation">.</span>current<span class="token punctuation">.</span><span class="token function">IsPointerOverGameObject</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Debug<span class="token punctuation">.</span><span class="token function">Log</span><span class="token punctuation">(</span><span class="token string">"点击到了UI"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>roomStatsu <span class="token operator">==</span> RoomStatus<span class="token punctuation">.</span>Attainable<span class="token punctuation">)</span> <span class="token punctuation">{</span> loadRoomEvent<span class="token punctuation">.</span><span class="token function">RaisEvent</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">GenerateRoomReward</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>EventSystem.current.IsPointerOverGameObject()方法可以判断当前鼠标是否点击到了 UI 元素,如果是则返回 true 直接 return,否则返回 false。这样就可以避免在点击卡牌时触发地图房间上的事件。</p><p>也尝试在显示卡牌的 Panel 上试了加下面的代码,在 UI 元素注册点击事件的回调,并在点击时阻止事件冒泡,以此避免事件被父元素捕获:当点击这些元素时,事件不会继续向上传播到父元素的监听器,从而避免父元素的点击事件被触发,可以独立处理点击逻辑:确保这些元素的点击事件只在它们自身内部处理,不会影响到其他元素。</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">private</span> <span class="token class-name">VisualElement</span> cardView<span class="token punctuation">,</span> upgradeView<span class="token punctuation">,</span> upgradePreview<span class="token punctuation">;</span>cardView<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">RegisterCallback</span><span class="token generic class-name"><span class="token punctuation"><</span>ClickEvent<span class="token punctuation">></span></span></span><span class="token punctuation">(</span>e <span class="token operator">=></span> e<span class="token punctuation">.</span><span class="token function">StopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>upgradeView<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">RegisterCallback</span><span class="token generic class-name"><span class="token punctuation"><</span>ClickEvent<span class="token punctuation">></span></span></span><span class="token punctuation">(</span>e <span class="token operator">=></span> e<span class="token punctuation">.</span><span class="token function">StopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>upgradePreview<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">RegisterCallback</span><span class="token generic class-name"><span class="token punctuation"><</span>ClickEvent<span class="token punctuation">></span></span></span><span class="token punctuation">(</span>e <span class="token operator">=></span> e<span class="token punctuation">.</span><span class="token function">StopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></li></ul><p><strong>2. 让拖拽卡牌的效果更还原杀戮尖塔的样子。</strong></p><ul><li><p>我仔细观察了杀戮尖塔中在拖拽卡牌到敌人身上和释放时的效果和麦扣老师教程中实现的效果还是有些差别,于是我就尝试修改了卡牌拖拽的效果。</p><p>首先先看看杀戮尖塔战斗中的卡牌拖拽效果:<br><img src="/2025/02/13/25-02-12-gamedevelopment/Slay_the_Sprite-CardDragHander.gif" alt="杀戮尖塔中的卡牌拖拽效果"></p><ol><li>鼠标移动到卡牌时,会放大、旋转效果回正、卡牌上移,相邻的卡牌会向当前移动的卡牌反方向,移动一小段,然后将手上移动的卡牌能完整的展示出来。</li><li>拖拽非攻击牌时,可以拖拽着卡牌移动到任何位置,但在松手时,如果超过一定的y轴高度,就会释放,否则返回到手牌中,或者移动过程中按下鼠标右键也会回到手牌中。</li><li>拖拽攻击牌时,将卡牌移动到Y轴的一定高度时,卡牌会移动到手牌正中心,此时如果松开鼠标左键,仍然处于可释放状态,只有移动到敌人身上才会释放出来,或者按下鼠标右键把卡牌返回到手牌中。</li></ol><p>首先需要在 Card 类上继承<code>PointerEnterHandler</code>, <code>IPointerExitHandler</code>,来处理鼠标指针进入和离开卡牌的事件。</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">/// <summary></span><span class="token comment">/// 鼠标进入卡牌时触发</span><span class="token comment">/// </summary></span><span class="token comment">/// <param name="eventData"></param></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnPointerEnter</span><span class="token punctuation">(</span><span class="token class-name">PointerEventData</span> eventData<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>isAnimation<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token comment">// 如果正在动画中,则不执行</span> enterCardScaleEvent<span class="token punctuation">.</span><span class="token function">RaisEvent</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 触发进入卡牌的动画事件</span> transform<span class="token punctuation">.</span><span class="token function">DOScale</span><span class="token punctuation">(</span>Vector3<span class="token punctuation">.</span>one <span class="token operator">*</span> <span class="token number">1.3f</span><span class="token punctuation">,</span> <span class="token number">0.2f</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 将卡牌放大</span> transform<span class="token punctuation">.</span><span class="token function">DOMove</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token constructor-invocation class-name">Vector3</span><span class="token punctuation">(</span>originalPosition<span class="token punctuation">.</span>x<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">4f</span><span class="token punctuation">,</span> originalPosition<span class="token punctuation">.</span>z<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.2f</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 将卡牌向上移动</span> transform<span class="token punctuation">.</span>rotation <span class="token operator">=</span> Quaternion<span class="token punctuation">.</span>identity<span class="token punctuation">;</span> <span class="token comment">// 将卡牌旋转回初始状态</span> <span class="token generic-method"><span class="token function">GetComponent</span><span class="token generic class-name"><span class="token punctuation"><</span>SortingGroup<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>sortingOrder <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/// <summary></span><span class="token comment">/// 鼠标离开卡牌时触发</span><span class="token comment">/// </summary></span><span class="token comment">/// <param name="eventData"></param></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnPointerExit</span><span class="token punctuation">(</span><span class="token class-name">PointerEventData</span> eventData<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>isAnimation<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token comment">// 如果正在动画中,则不执行</span> exitCardScaleEvent<span class="token punctuation">.</span><span class="token function">RaisEvent</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 触发离开卡牌的动画事件</span> <span class="token function">ResetCardTransform</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/// <summary></span><span class="token comment">/// 重置卡牌位置和旋转</span><span class="token comment">/// </summary></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">ResetCardTransform</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> transform<span class="token punctuation">.</span><span class="token function">DOScale</span><span class="token punctuation">(</span>Vector3<span class="token punctuation">.</span>one<span class="token punctuation">,</span> <span class="token number">0.2f</span><span class="token punctuation">)</span><span class="token punctuation">;</span> transform<span class="token punctuation">.</span><span class="token function">SetPositionAndRotation</span><span class="token punctuation">(</span>originalPosition <span class="token punctuation">,</span> originalRotation<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token generic-method"><span class="token function">GetComponent</span><span class="token generic class-name"><span class="token punctuation"><</span>SortingGroup<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>sortingOrder <span class="token operator">=</span> originalLayerOrder<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>其中在进入和移出的事件函数里还分别触发呼叫了<code>enterCardScaleEvent</code>和<code>exitCardScaleEvent</code>,这两个事件分别绑定在CardDeck.cs上面,用于处理卡牌进入时,将这张相邻的卡牌往当前移动进入的卡牌反方向移动一些距离。而处理卡牌离开时,需要执行一下<code>CardLayoutReset()</code>,将所有卡牌恢复到初始的位置和旋转,重新布局。</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">/// <summary></span><span class="token comment">/// 重置卡牌布局</span><span class="token comment">/// </summary></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">CardLayoutReset</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">int</span></span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> handCardList<span class="token punctuation">.</span>Count<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Card</span> currentCard <span class="token operator">=</span> handCardList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token class-name">CardTransform</span> cardTransform <span class="token operator">=</span> cardLayoutManager<span class="token punctuation">.</span><span class="token function">GetCardTransform</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> handCardList<span class="token punctuation">.</span>Count<span class="token punctuation">)</span><span class="token punctuation">;</span> currentCard<span class="token punctuation">.</span>transform<span class="token punctuation">.</span><span class="token function">DOMove</span><span class="token punctuation">(</span>cardTransform<span class="token punctuation">.</span>pos<span class="token punctuation">,</span> <span class="token number">0.2f</span><span class="token punctuation">)</span><span class="token punctuation">.</span>onComplete <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> currentCard<span class="token punctuation">.</span>isAnimation <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment">/// <summary></span><span class="token comment">/// 检测鼠标放到手牌的某一张卡牌时触发的事件</span><span class="token comment">/// </summary></span><span class="token comment">/// <param name="obj"></param></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnMouseEnterTorCard</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">object</span></span> obj<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token class-name"><span class="token keyword">var</span></span> card <span class="token operator">=</span> <span class="token punctuation">(</span>Card<span class="token punctuation">)</span>obj<span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">int</span></span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> handCardList<span class="token punctuation">.</span>Count<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Card</span> currentCard <span class="token operator">=</span> handCardList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token class-name">CardTransform</span> cardTransform <span class="token operator">=</span> cardLayoutManager<span class="token punctuation">.</span><span class="token function">GetCardTransform</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> handCardList<span class="token punctuation">.</span>Count<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>handCardList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>cardIndex <span class="token operator">==</span> card<span class="token punctuation">.</span>cardIndex<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// card.isEventAnimation = true;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> currentCard<span class="token punctuation">.</span>transform<span class="token punctuation">.</span><span class="token function">DOMoveX</span><span class="token punctuation">(</span>handCardList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>cardIndex <span class="token operator"><</span> card<span class="token punctuation">.</span>cardIndex <span class="token punctuation">?</span> cardTransform<span class="token punctuation">.</span>pos<span class="token punctuation">.</span>x <span class="token operator">-</span> <span class="token number">0.6f</span> <span class="token punctuation">:</span> cardTransform<span class="token punctuation">.</span>pos<span class="token punctuation">.</span>x <span class="token operator">+</span> <span class="token number">1f</span><span class="token punctuation">,</span> <span class="token number">0.2f</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment">/// <summary></span><span class="token comment">/// 检测鼠标从手牌的某一张卡牌移开时触发的事件</span><span class="token comment">/// </summary></span><span class="token comment">/// <param name="obj"></param></span><span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnMouseExitTorCard</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">object</span></span> obj<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token function">CardLayoutReset</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>展示出来的效果就是这样了<br><img src="/2025/02/13/25-02-12-gamedevelopment/game-CardDragHander.gif" alt="自己修改后卡牌拖拽的效果"></p></li></ul><p><strong>今天暂时就写到这里了,后面有时间还会继续发文章到博客这里。</strong></p>]]></content>
<categories>
<category> 游戏开发 </category>
</categories>
<tags>
<tag> Unity </tag>
<tag> 游戏开发 </tag>
<tag> C# </tag>
</tags>
</entry>
<entry>
<title>时隔两年,我的博客又回来了!借此记录一下这两年中发生的事情</title>
<link href="/2025/01/10/shi-ge-liang-nian-wo-de-bo-ke-you-hui-lai-liao/"/>
<url>/2025/01/10/shi-ge-liang-nian-wo-de-bo-ke-you-hui-lai-liao/</url>
<content type="html"><![CDATA[<h2 id="这两年工作的经历"><a href="#这两年工作的经历" class="headerlink" title="这两年工作的经历"></a>这两年工作的经历</h2><h3 id="工作是怎么找到的"><a href="#工作是怎么找到的" class="headerlink" title="工作是怎么找到的"></a>工作是怎么找到的</h3><p> 在刚开始建立这个博客后的两个月,我就在2022年的8月11号,正式找到了工作,可是工作岗位并不是我心向依旧的游戏开发相关的岗位,而是我从来没有接触过也没有了解过的行业岗位 —— 物联网嵌入式开发工程师,公司名称是 【开封悦颖信息科技有限公司】,但实际上是属于【上海合宙通讯科技有限公司】的分公司,或者说是外包? (但上海总部的老板说是分公司)</p><p> 这份工作是我的一位同学介绍给我的,当我了解到工作岗位和内容是 一家做4G通讯模块,并且拥有自做的LuatOS架构,对自家的模块进行二次开发的物联网公司。这和我想要找的工作并不一样,但由于当时处于疫情期间,我在线上投简联系的游戏开发岗位的工作,也有4家得到了面试的机会,而其中只有两家同意了线上面试,由于当时有很多公司因为疫情,工作效率和支出不成正比,而采用公司裁员或降薪的手段,只留了业务/能力出众的人员,招聘也相比要找一些经验丰富更容易上手的人,我那时也只是一个应届毕业生,并没有什么出众的能力,况且因为疫情只能线上办公,远程沟通的效率又很低下,这让本就没有经验的应届生更难融入工作,所以被拒绝了。</p><p> 而当时不能远程办公所以导致找工作很难,正好我的一个同学,他在我们学校老师的介绍下,4/5月份就找到了一份开封本地工作。一天我们两个正在玩游戏,互相了解到工作上的情况,他就想到帮我介绍一下,试着投个简历看看,先找份工作,赚分钱。</p><p> 我就将写有一份制作过游戏的项目经历的简历发给了他,简历中也有这个博客和github上的项目代码链接。第二天去了公司办公地点由开封分公司的老板进行了一面,随后通过微信视频,上海的技术负责人对我进行了二面,了解到虽然没有嵌入式的开发经验,但是通过项目了解到了我的学习能力,还是给予了我一个实习的机会,就这样得到了对我来说在当时很重要的一份工作。</p><h3 id="工作的第一年"><a href="#工作的第一年" class="headerlink" title="工作的第一年"></a>工作的第一年</h3><h4 id="学习期-1个月-8月份"><a href="#学习期-1个月-8月份" class="headerlink" title="学习期 1个月 8月份"></a>学习期 1个月 8月份</h4><p> 在2022年8月11号,正式入职,然后进入了1个月的学习期(薪资一个月2k),早上9点上班,晚上6点下班,中午12点-13点休息一小时,有双休,工作内容是通过公司内部的培训视频进行新人学习,并完成每章节的作业,最后通过考核,进入实习期。</p><h4 id="实习期-2个月-9-10月份"><a href="#实习期-2个月-9-10月份" class="headerlink" title="实习期 2个月 9-10月份"></a>实习期 2个月 9-10月份</h4><p> 进入实习期后,薪资变为3k5,工作内容变为与销售客户沟通,了解客户需求,来解决客户遇到的技术性问题,并熟悉公司产品,学习嵌入式和网络协议层(Http、TCP、MQTT)开发相关的知识。在实习期的最后一个月(10月),由于工作需求,将我和我的同学一起外派到了深圳分公司进行了3个月的学习。</p><h4 id="转正后"><a href="#转正后" class="headerlink" title="转正后"></a>转正后</h4><p> 在深圳转正,深圳办公室是我们公司重要的团队,有两位资深的老员工,周工 —— 负责软件和技术支持(也了解硬件,比较全面的大佬)、祝工 —— 硬件工程师(专负责硬件),有着两位大佬,很难学习不到东西(哈哈哈) 在出差外派期间,也有很多福利,比如这种外派需要常驻,待两三个月什么的,会提供出差补助一个月1500,并且可以自己租房,公司报销房租(月租不超过2000)和水电。转正后的基础薪资是5000,出差补助再加上1500,这就变成了6500。</p><p> 10月份时,也被外派到福州出差,为两家公司进行驻厂技术支持和沟通帮助,两家都是做POS机行业的公司【云码】和【新大陆】,差不多出差了2个星期的时间。</p><p> 而在22年12月份,福州这两家公司的业务需求安排 提高了优先级,好像是为了投标。我们公司也为了他们能稳定出货(买我们的模块也会变多),就打算在过年后,再安排我到福州常驻待3个月时间,专负责这两家公司的技术支持,并且能实时做到现场支持。</p><p> 在年后2月3号前往了福州,而在福州的这三个月,也是我在这工作的两年里学到东西最多的三个月。</p><ol><li>由于这两家客户用到的都是 AT开发,所以对 AT指令集进行了深入学习,并且介入学习到了AT固件的修改。</li><li>在23年3月份左右公司制度发生了变化,技术支持岗位从一开始的4名CPM,变为了10名,而我也成为了其中之一。CPM和一般的技术支持人员属于上下级,CPM需要负责几十或者上百企业微信群中客户遇到的问题,提供相对于的技术支持,而技术支持的人员,一般是在CPM忙不过来、一些多次遇到或容易解答的问题或需要花费长时间测试的问题的时候,由CPM分配帮忙提供支持。</li><li>在做CPM的期间,有很多客户遇到的都是关于LuatOS开发的问题,所以也接触了解到很多和lua相关的知识,并且参与了修复LuatOS底层固件的bug和gitee issue的需求。</li><li>当然平时最重要的任务是在【云码】和【新大陆】两家出现技术问题的时候,到他们公司现场支持。</li></ol><p> 以此来看,这么多工作内容,也很难不提升吧,也正是如此,在福州出差结束后,回到开封继续做着CPM和AT、LuatOS研发相关的工作,持续到8月份,满第一年时,我提出了涨薪的申请,领导说目前公司经济并不好,所以让我再晚几个月提,随后到了9月份,公司安排我到合肥的分公司学习AT研发的工作,也同意了涨薪的申请,薪资变为8k,并且加上1500的出差补助,也就是9k5。</p><h3 id="工作的第二年"><a href="#工作的第二年" class="headerlink" title="工作的第二年"></a>工作的第二年</h3><p> 24年3月份时,公司提出了新的制度,将之前的10个CPM分为5个团队,分有5个Leader,我被赴任了其中之一,带领5个同事一起工作,平时需要分配任务,安排负责CPM、技术支持、后端AT固件研发的工作。</p><p> 我在合肥,从23年的9月份一直待到24年的5月,在5月份时,开封工作室出现了大变动,很多同事提出了离职,在老板和领导的提议下,最终离开了两人,其中一人是开封团队的负责人,他走了之后,岗位也发生了变化,上海的技术团队负责人朱老师是想让我回开封担任这个职位,并且基础薪资涨到1w,但是考虑到我现在身上的工作内容已经很多了,而且在合肥通过基础薪资和出差补助,薪资也接近小1w块钱,所以并不想在往身上压重力,以此就推给了拉我进公司的同学担任。</p><p> 而公司考虑到我的工作内容,也做了重新分配,我也从AT研发,转变为了我们公司技术文档的负责人,当然也在帮忙培养1名AT的研发成员,至此公司所有产品的技术文档编写和更新,都交由我负责,并且负责一些技术文档的审核和修改。</p><p> 在5月底,将我安排回到了深圳办公室,借此帮深圳的大佬分担一些压力,而且深圳的销售也是我们公司的核心成员们,和他们沟通相处也助于我了解公司的业务,和客户对我们公司的需求、痛点等,从而能更好的编写技术文档,帮助客户解决问题。</p><p> 6月底,与公司转签了外包协议,薪资增长50%,从8k变为1.2w。</p><h3 id="离职"><a href="#离职" class="headerlink" title="离职"></a>离职</h3><p> 直到 — 24年9月底,我主动提出了离职申请,原因很简单,觉得钱攒了一些了,认为可以继续追逐梦想,找一份游戏开发的工作,而目前的工作内容,虽然有很多收获,但是并不能让我有更多时间学习游戏开发,所以提出了离职申请,秦总在深圳与我进行了一次谈话,最终也是同意了,就这样我就离开了工作了两年的这家公司,开始了新的征程。</p><h2 id="工作后的感悟"><a href="#工作后的感悟" class="headerlink" title="工作后的感悟"></a>工作后的感悟</h2><p> 在这两年中,我自认为已经是属于很幸运的那一类人了,从薪资幅度上来看,也相比于我的同事,在开封这个地方(虽然我的工作一直在出差在外地,2年里在开封待得时间还没6个月,但合同还是属于开封公司的),从一开始的转正5k工资,到一个月1.2w,而且有五险一金+双休,已经是完美级别的工作了,这份工作让我收获了很多,在这份工作中,让我了解到了职场,或者说领导者喜欢的是怎样的员工,如果想涨薪或者被关注,就是要付出比其他人更多的努力,只有你的能力够高,才有资格去争取,在我离职之前,我们同事之间已经谈到说我打破了这个行业的涨薪标准,太卷了,影响到了他们。</p><p> 比如和我同时期一起进来的同事还是6k、7k工资的时候,我已经是1.2w薪资了,而我也确实付出了很多,例如:领导安排的任务、出差需求 都没有推脱过,如果是我不懂或者不会的任务安排,接到手后也会先自己学习了解,只有在判断自己确实无法解决时,才会去求助公司大佬,平时工作没解决的任务,马上超过时间预期,就自主加班解决,不做拖延。这些是我认为能提高工资最有效的方式,也是最基本的,来到这个公司时的目的,就是为了赚钱,所以才会刻苦的学习这个我本就不熟悉的工作岗位。</p><p><img src="/2025/01/10/shi-ge-liang-nian-wo-de-bo-ke-you-hui-lai-liao/image-20250110205334985.png" alt="2023年的提交记录"><br><img src="/2025/01/10/shi-ge-liang-nian-wo-de-bo-ke-you-hui-lai-liao/image-20250110205402751.png" alt="2024年的提交记录"></p><p> 也就是这样忙碌度过的这两年里,我都忘了之前我还建立过博客,今天在做游戏demo的时候偶然想起来了。但是这也让我明白,工作并不是生活的全部,人总要去做些自己感兴趣的事,缓解自身的压力,所以我当时决定了离职,选择继续追逐梦想。</p>]]></content>
<categories>
<category> 日常 </category>
</categories>
<tags>
<tag> 日常 </tag>
</tags>
</entry>
<entry>
<title>宝可梦同人游戏开发日记 22-07-02</title>
<link href="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/"/>
<url>/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/</url>
<content type="html"><![CDATA[<p>通过 Unity 2021.2 版本起内置的 UI Toolkit 和 UI Builder 制作了一个物品编辑器,过程参考学习了 B 站 Up 主<a href="https://space.bilibili.com/370283072">M_Studio</a>老师在 Unity 中文课堂发布的 “<a href="https://learn.u3d.cn/tutorial/MFarmCourse">《麦田物语》模拟经营游戏开发教程</a>” 中第 13~17 讲,然后额外增加了查询和排序功能,虽然我实现的很简单,但这也算是我在博客第一次写游戏开发的日记,主要记录我的成长历程和开发经验,便于我以后的总结。</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/%E7%89%A9%E5%93%81%E7%BC%96%E8%BE%91%E5%99%A8.gif" alt="物品/道具编辑器"></p><hr><h3 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h3><h4 id="创建存储物品-Item-的数据库(ScriptableObject)"><a href="#创建存储物品-Item-的数据库(ScriptableObject)" class="headerlink" title="创建存储物品 Item 的数据库(ScriptableObject)"></a>创建存储物品 Item 的数据库(ScriptableObject)</h4><p>我们这个编辑器因为是要基于 <strong>ScriptableObject</strong> 数据进行展示和操作的,所以要先创建一个存储物品数据库的 ScriptableObject 文件</p><p>创建 ScriptableObject 文件过程,先创建一个 c#脚本,打开脚本后将当前类继承与<strong>ScriptableObject</strong>类,并且还需添加“[CreateAssetMenu()]”特性(Attribute),</p><p>其中的参数 <strong>fileName</strong>:新建出来的 ScriptableObject 文件的名称;<strong>menuName</strong>:创建菜单的级别目录</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">using</span> <span class="token namespace">System<span class="token punctuation">.</span>Collections<span class="token punctuation">.</span>Generic</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEngine</span><span class="token punctuation">;</span><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">CreateAssetMenu</span><span class="token attribute-arguments"><span class="token punctuation">(</span>fileName <span class="token operator">=</span> <span class="token string">"ItemDatabse_SO"</span><span class="token punctuation">,</span> menuName <span class="token operator">=</span> <span class="token string">"ScriptableObject/ItemDatabse_SO"</span><span class="token punctuation">)</span></span></span><span class="token punctuation">]</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ItemDatabse_SO</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">ScriptableObject</span></span><span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> itemList<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">// *道具</span><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">System<span class="token punctuation">.</span>Serializable</span></span><span class="token punctuation">]</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Item</span><span class="token punctuation">{</span> <span class="token comment">// 尽量用不同的数据类型展示</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">int</span></span> id<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">string</span></span> itemName<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name">Sprite</span> image<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name">ItemActionType</span> actionType<span class="token punctuation">;</span> <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">TextArea</span></span><span class="token punctuation">]</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">string</span></span> details<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">// *物品操作类型</span><span class="token keyword">public</span> <span class="token keyword">enum</span> <span class="token class-name">ItemActionType</span><span class="token punctuation">{</span> None<span class="token punctuation">,</span> <span class="token comment">// 无操作</span> Use <span class="token comment">// 使用</span><span class="token punctuation">}</span></code></pre><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702114423137.png" alt="创建物品数据库"></p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702114448205.png" alt="创建出来的ItemDatabase_SO文件"></p><p>还需要添加一些物品数据,这样数据就准备完成了!</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702161914151.png" alt="添加物品数据"></p><hr><h3 id="创建-Editor-Window"><a href="#创建-Editor-Window" class="headerlink" title="创建 Editor Window"></a>创建 Editor Window</h3><p>在 Unity 你现有的项目或者新项目中找到 Assets/Editor 文件夹,没有的话可以手动创建,然后在 Editor 文件夹中最好再创建一个文件夹便于管理,然后再新建的文件夹上右键—>Create—>UI Toolkit—>Editor Window</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702105414388.png" alt="创建Editor Window过程"></p><p>然后输入名称点击 Confirm 确定</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702105546150.png" alt="输入名称、确认"></p><p>接下来会自动创建三个文件,并弹出一个编辑器的窗口,这三个文件分别以.cs、.uss、.uxml 为后缀名</p><ul><li><strong>.cs</strong>:当然就是 C#的脚本文件了</li><li><a href="https://docs.unity3d.com/cn/current/Manual/UIE-USS.html"><strong>.uss</strong></a>:可以修改 UI Toolkit 控件的样式,用于设置元素的尺寸以及元素在屏幕上的绘制方式,例如 <code>backgroundColor</code> 或 <code>borderColor</code>。,类似于 html 中的 css</li><li><a href="https://docs.unity3d.com/cn/current/Manual/UIE-UXML.html"><strong>.uxml</strong></a>:可扩展标记语言 (UXML) 文件是定义用户界面逻辑结构的文本文件,用于做出编辑器的 UI 界面</li></ul><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702105943206.png" alt="弹出的编辑器的窗口"></p><p>这样就相当于 Editor Window 创建成功了,还需要使用 UI Builder 通过图形化的方式对编辑器进行数据显示的布局。</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220702223851857.png" alt="UI Builder窗口布局"></p><hr><h3 id="设计布局"><a href="#设计布局" class="headerlink" title="设计布局"></a>设计布局</h3><h4 id="编辑界面"><a href="#编辑界面" class="headerlink" title="编辑界面"></a>编辑界面</h4><p>可以选择在这个 UI Builder 界面自己拖组件形成界面,也可以通过敲代码的形成界面,就像写 html 代码一样,我这里先贴出来我的最终效果的代码。</p><p>使用方式就是复制粘贴到.uxml 文件下的 inlineStyle 文件中。</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703103355560.png" alt="粘贴到这个inlineStyle文件中"></p><pre class="language-markup" data-language="markup"><code class="language-markup"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>UXML</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>ui</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UnityEngine.UIElements<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>uie</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UnityEditor.UIElements<span class="token punctuation">"</span></span> <span class="token attr-name">xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name">engine</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UnityEngine.UIElements<span class="token punctuation">"</span></span> <span class="token attr-name">editor</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UnityEditor.UIElements<span class="token punctuation">"</span></span> <span class="token attr-name">noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>../../../UIElementsSchema/UIElements.xsd<span class="token punctuation">"</span></span> <span class="token attr-name">editor-extension-mode</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>True<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Container<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-grow</span><span class="token punctuation">:</span> 1<span class="token punctuation">;</span> <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">min-width</span><span class="token punctuation">:</span> 700px<span class="token punctuation">;</span> <span class="token property">min-height</span><span class="token punctuation">:</span> 550px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Left<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> column<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 30%<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">-unity-font-definition</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span> <span class="token property">-unity-font</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span><span class="token string url">'project://database/Library/unity%20default%20resources?fileID=10102&amp;guid=0000000000000000e000000000000000&amp;type=0#Arial'</span><span class="token punctuation">)</span></span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Header<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">justify-content</span><span class="token punctuation">:</span> space-between<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Label</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>物品列表<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>itemList<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">font-size</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">-unity-font-style</span><span class="token punctuation">:</span> bold<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>DropdownField</span> <span class="token attr-name">index</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>-1<span class="token punctuation">"</span></span> <span class="token attr-name">choices</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>升序(ID),降序(ID)<span class="token punctuation">"</span></span> <span class="token attr-name">tabindex</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>0<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Sort<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-left</span><span class="token punctuation">:</span> 100px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 175px<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 12px<span class="token punctuation">;</span> <span class="token property">-unity-font-style</span><span class="token punctuation">:</span> normal<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>Label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Button</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>+<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>AddButton<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">width</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">picking-mode</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Ignore<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>SearchBar<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">height</span><span class="token punctuation">:</span> 25px<span class="token punctuation">;</span> <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>TextField</span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>搜索:<span class="token punctuation">"</span></span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>在这里输入<span class="token punctuation">"</span></span> <span class="token attr-name">tooltip</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>输入你要搜索的物品名或者ID<span class="token punctuation">"</span></span> <span class="token attr-name">focusable</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">max-length</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>-1<span class="token punctuation">"</span></span> <span class="token attr-name">password</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>false<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Search<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>ListView</span> <span class="token attr-name">focusable</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">show-border</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ListView<span class="token punctuation">"</span></span> <span class="token attr-name">reorderable</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">show-add-remove-footer</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>false<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-grow</span><span class="token punctuation">:</span> 1<span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>135<span class="token punctuation">,</span> 135<span class="token punctuation">,</span> 135<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">-unity-text-outline-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>210<span class="token punctuation">,</span> 210<span class="token punctuation">,</span> 210<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-left-width</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">border-right-width</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">border-top-width</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">border-bottom-width</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Right<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">max-width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">max-height</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 70%<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>ScrollView</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ScrollView<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">border-left-width</span><span class="token punctuation">:</span> 2px<span class="token punctuation">;</span> <span class="token property">border-right-width</span><span class="token punctuation">:</span> 2px<span class="token punctuation">;</span> <span class="token property">border-top-width</span><span class="token punctuation">:</span> 2px<span class="token punctuation">;</span> <span class="token property">border-bottom-width</span><span class="token punctuation">:</span> 2px<span class="token punctuation">;</span> <span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>101<span class="token punctuation">,</span> 101<span class="token punctuation">,</span> 101<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>101<span class="token punctuation">,</span> 101<span class="token punctuation">,</span> 101<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>101<span class="token punctuation">,</span> 101<span class="token punctuation">,</span> 101<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>101<span class="token punctuation">,</span> 101<span class="token punctuation">,</span> 101<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-left-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-bottom-left-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-top-right-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-bottom-right-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Header<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">justify-content</span><span class="token punctuation">:</span> space-between<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Label</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span> 详情<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ItemDescription<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">font-size</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">-unity-font-style</span><span class="token punctuation">:</span> bold<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Button</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>-<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>DeleteButton<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">font-size</span><span class="token punctuation">:</span> 16px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ItemContent<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-grow</span><span class="token punctuation">:</span> 1<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Row1<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">margin-left</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-right</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-top</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-left-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-right-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-top-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-bottom-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span> <span class="token property">justify-content</span><span class="token punctuation">:</span> space-between<span class="token punctuation">;</span> <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">min-width</span><span class="token punctuation">:</span> 372px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> auto<span class="token punctuation">;</span> <span class="token property">flex-shrink</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">left</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">top</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">right</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">bottom</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">opacity</span><span class="token punctuation">:</span> 1<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Label</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>General<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Title<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">-unity-text-outline-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>43<span class="token punctuation">,</span> 42<span class="token punctuation">,</span> 42<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 16px<span class="token punctuation">;</span> <span class="token property">padding-left</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">justify-content</span><span class="token punctuation">:</span> flex-end<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> flex-start<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Container<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Icon<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-image</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span><span class="token string url">'project://database/Assets/Image/Item/001-%E7%B2%BE%E7%81%B5%E7%90%83%E9%81%93%E5%85%B7%E7%AE%B1.png?fileID=21300000&amp;guid=40bde5622593270468b52d158f5baff4&amp;type=3#001-精灵球道具箱'</span><span class="token punctuation">)</span></span><span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 80px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 80px<span class="token punctuation">;</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">margin-right</span><span class="token punctuation">:</span> 20px<span class="token punctuation">;</span> <span class="token property">align-items</span><span class="token punctuation">:</span> stretch<span class="token punctuation">;</span> <span class="token property">-unity-font-definition</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Gerneral<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">margin-top</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-right</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-left-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-right-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-top-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-bottom-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-top-left-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-bottom-left-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-top-right-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-bottom-right-radius</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">uie:</span>IntegerField</span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ID<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>17<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ItemID<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">padding-left</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-right</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-unity-text-align</span><span class="token punctuation">:</span> middle-left<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>TextField</span> <span class="token attr-name">picking-mode</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Ignore<span class="token punctuation">"</span></span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>名称<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>filler text<span class="token punctuation">"</span></span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>精灵球<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ItemName<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">padding-left</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-right</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-unity-text-align</span><span class="token punctuation">:</span> middle-left<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">uie:</span>ObjectField</span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>图像<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UnityEngine.Sprite, UnityEngine.CoreModule<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Image<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">padding-left</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-right</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 23px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">uie:</span>EnumField</span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>操作类型<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Center<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ActionType<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">padding-left</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-right</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">-unity-text-align</span><span class="token punctuation">:</span> middle-left<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Row2<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">border-left-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-right-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-top-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-bottom-width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span> <span class="token property">border-left-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-right-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-top-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">border-bottom-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-right</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-top</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>Label</span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Description<span class="token punctuation">"</span></span> <span class="token attr-name">display-tooltip-when-elided</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Title<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">-unity-text-outline-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>0<span class="token punctuation">,</span> 0<span class="token punctuation">,</span> 0<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token function">rgb</span><span class="token punctuation">(</span>43<span class="token punctuation">,</span> 42<span class="token punctuation">,</span> 42<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 16px<span class="token punctuation">;</span> <span class="token property">padding-left</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">padding-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">padding-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>VisualElement</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Container<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">ui:</span>TextField</span> <span class="token attr-name">picking-mode</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Ignore<span class="token punctuation">"</span></span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>说明<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>filler text<span class="token punctuation">"</span></span> <span class="token attr-name">text</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>filler text<span class="token punctuation">"</span></span> <span class="token attr-name">multiline</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Info<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> column<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 14px<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 100px<span class="token punctuation">;</span> <span class="token property">margin-left</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-right</span><span class="token punctuation">:</span> 5px<span class="token punctuation">;</span> <span class="token property">margin-top</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span> <span class="token property">margin-bottom</span><span class="token punctuation">:</span> 3px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>ScrollView</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>VisualElement</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">ui:</span>UXML</span><span class="token punctuation">></span></span></code></pre><p></p><p>记得先把.cs 脚本中将使用 C#和 USS 添加的两个 Hello World 的代码注释掉或者删除</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703131155266.png" alt="注释或者删除这个区域的代码"></p><p>实现的效果就是这样的:</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703103901198.png" alt="实现效果"></p><hr><h4 id="每条物品的显示模板"><a href="#每条物品的显示模板" class="headerlink" title="每条物品的显示模板"></a>每条物品的显示模板</h4><p>这样还没有完,还需要设计一个在左侧列表每条道具数据展示的 Slot 模板,由道具<strong>图片</strong>+ID_Name 的<strong>文本</strong>组成</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703104256899.png" alt="实际效果图"></p><p>通过同样的方式,创建一个 UI Document,命名为 ItemSlotTemplate(命名无所谓)</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703104822653.png" alt="UI Document的创建过程"></p><p>大家可以按照自己的需求自行发挥,或者参考我这个现有的。(使用方式参考上面)</p><pre class="language-none"><code class="language-none"><ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:VisualElement name="Row" style="height: 50px; -unity-text-align: middle-left; justify-content: flex-start; flex-direction: row; align-items: center;"> <ui:VisualElement name="Icon" style="background-image: none; width: 30px; height: 30px; -unity-text-align: middle-left; align-items: flex-start; justify-content: flex-start; flex-direction: column; -unity-font-definition: none;" /> <ui:Label text="Label" display-tooltip-when-elided="true" name="Name" style="font-size: 16px;" /> </ui:VisualElement></ui:UXML></code></pre><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703105902390.png" alt="实现效果"></p><p>这些弄完设计界面的工作就做完了,下面开始实现功能。</p><hr><h3 id="功能实现"><a href="#功能实现" class="headerlink" title="功能实现"></a>功能实现</h3><h4 id="显示左侧的物品列表"><a href="#显示左侧的物品列表" class="headerlink" title="显示左侧的物品列表"></a>显示左侧的物品列表</h4><p>读取 ItemDatabase_SO 中所有物品数据,然后显示在左侧区域</p><p>首先声明变量(List 的命名空间 using <strong>System</strong>.<strong>Collections</strong>.<strong>Generic</strong>;)</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">private</span> <span class="token class-name">ItemDatabse_SO</span> dataBase<span class="token punctuation">;</span> <span class="token comment">// 受到编辑的ScriptableObject文件</span><span class="token keyword">private</span> <span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> itemList<span class="token punctuation">;</span> <span class="token comment">// 当前编辑器展示的列表数据</span><span class="token keyword">private</span> <span class="token class-name">VisualTreeAsset</span> itemRowTemplate<span class="token punctuation">;</span> <span class="token comment">// 物品列表中 每条物品的模板文件</span><span class="token keyword">private</span> <span class="token class-name">ListView</span> itemListView<span class="token punctuation">;</span> <span class="token comment">// 左侧的物品列表视图</span><span class="token keyword">private</span> <span class="token class-name">ScrollView</span> itemDetailsSection<span class="token punctuation">;</span> <span class="token comment">// 右侧信息面板视图</span><span class="token keyword">private</span> <span class="token class-name">Item</span> activeItem<span class="token punctuation">;</span> <span class="token comment">// 当前选择激活的道具</span><span class="token comment">// *默认预览图片</span><span class="token keyword">private</span> <span class="token class-name">Sprite</span> defaultIcon<span class="token punctuation">;</span><span class="token keyword">private</span> <span class="token class-name">VisualElement</span> iconPreview<span class="token punctuation">;</span> <span class="token comment">// 展示图标的视图组件</span></code></pre><p>在 <strong>CreateGUI()</strong> 方法中输入以下代码,–<strong>注意获取模板和图片路径要改成你项目中的路径</strong>–</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 拿到物品列表中 物品的模板</span>itemRowTemplate <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">LoadAssetAtPath</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualTreeAsset<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Assets/Editor/ItemDB_Editor/ItemSlotTemplate.uxml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 拿到默认Icon图片</span>defaultIcon <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">LoadAssetAtPath</span><span class="token generic class-name"><span class="token punctuation"><</span>Sprite<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Assets/Image/item/Bag_未知_Sprite.png"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 变量赋值-获取对应的组件</span>itemListView <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Left"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ListView<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ListView"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>itemDetailsSection <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ScrollView<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ScrollView"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>iconPreview <span class="token operator">=</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>创建两个方法,<strong>LoadDataBase()</strong> 和 <strong>GenerateListView()</strong> ,Func 和 Action 需要引入 <strong>using System</strong>; 命名空间的</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// *加载基本数据</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">LoadDataBase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">// 在本地Asset资源中查找名字是 ItemDatabse_SO 的文件路径,需要替换为你自己的ScriptableObject数据名称</span> <span class="token class-name"><span class="token keyword">var</span></span> dataArray <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token function">FindAssets</span><span class="token punctuation">(</span><span class="token string">"ItemDatabse_SO"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>dataArray<span class="token punctuation">.</span>Length <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name"><span class="token keyword">var</span></span> path <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token function">GUIDToAssetPath</span><span class="token punctuation">(</span>dataArray<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 通过路径加载ScriptableObject数据文件</span> dataBase <span class="token operator">=</span> <span class="token punctuation">(</span>ItemDatabse_SO<span class="token punctuation">)</span>AssetDatabase<span class="token punctuation">.</span><span class="token function">LoadAssetAtPath</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token keyword">typeof</span><span class="token punctuation">(</span><span class="token type-expression class-name">ItemDatabse_SO</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span>itemList<span class="token punctuation">;</span> <span class="token comment">// 保存数据,如果不标记则无法保存数据</span> EditorUtility<span class="token punctuation">.</span><span class="token function">SetDirty</span><span class="token punctuation">(</span>dataBase<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">// *生成ListView中的数据</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token class-name">Func<span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span> makeItem <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> itemRowTemplate<span class="token punctuation">.</span><span class="token function">CloneTree</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 复制</span> <span class="token class-name">Action<span class="token punctuation"><</span>VisualElement<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">></span></span> bindItem <span class="token operator">=</span> <span class="token punctuation">(</span>e<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator"><</span> itemList<span class="token punctuation">.</span>Count<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>image <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> e<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>image<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> e<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Label<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Name"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>text <span class="token operator">=</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> <span class="token string">"No Name"</span> <span class="token punctuation">:</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>id <span class="token operator">+</span> <span class="token string">"_"</span> <span class="token operator">+</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>itemName<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span>itemsSource <span class="token operator">=</span> itemList<span class="token punctuation">;</span> <span class="token comment">// 源文件</span> itemListView<span class="token punctuation">.</span>makeItem <span class="token operator">=</span> makeItem<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span>bindItem <span class="token operator">=</span> bindItem<span class="token punctuation">;</span> <span class="token comment">// 右侧信息面板不可见</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>这两个方法需要放到 <strong>CreateGUI()</strong> 中执行</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 加载数据</span><span class="token function">LoadDataBase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 生成ListView</span><span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703140645499.png" alt="物品列表实现效果"></p><hr><h4 id="右侧的物品信息展示"><a href="#右侧的物品信息展示" class="headerlink" title="右侧的物品信息展示"></a>右侧的物品信息展示</h4><p>创建 <strong>OnListSelectionChange()</strong> 和 <strong>GetItemDetails()</strong> 两个方法</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 当选择列表中物品时触发</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnListSelectionChange</span><span class="token punctuation">(</span><span class="token class-name">IEnumerable<span class="token punctuation"><</span><span class="token keyword">object</span><span class="token punctuation">></span></span> selectedItem<span class="token punctuation">)</span> <span class="token punctuation">{</span> activeItem <span class="token operator">=</span> <span class="token punctuation">(</span>Item<span class="token punctuation">)</span>selectedItem<span class="token punctuation">.</span><span class="token function">First</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">GetItemDetails</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> EditorUtility<span class="token punctuation">.</span><span class="token function">SetDirty</span><span class="token punctuation">(</span>dataBase<span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p><strong>OnListSelectionChange()</strong> 需要在 <strong>GenerateListView()</strong> 生成物品列表方法中添加触发函数</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 当点击物品时触发</span>itemListView<span class="token punctuation">.</span>onSelectionChange <span class="token operator">+=</span> OnListSelectionChange<span class="token punctuation">;</span></code></pre><p>需要先确认一下你的编辑器其中这几个需要展示修改的数据组件名是什么</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703135212380.png" alt="确认组件 Name"></p><p>然后方便通过 Q<组件类>(“组件名”)来获取它们,(IEnumerable<> First()的命名空间 using System.Linq;)</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// *获取物品的详情数据</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">GetItemDetails</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> itemDetailsSection<span class="token punctuation">.</span><span class="token function">MarkDirtyRepaint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>IntegerField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemID"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>id<span class="token punctuation">;</span> <span class="token comment">// 回调函数 如果有更改数据,随之更新</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>IntegerField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemID"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// 然后把选中物品的id改为输入框中的新值</span> activeItem<span class="token punctuation">.</span>id <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>itemName<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>itemName <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Init</span><span class="token punctuation">(</span>activeItem<span class="token punctuation">.</span>actionType<span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>actionType<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>actionType <span class="token operator">=</span> <span class="token punctuation">(</span>ItemActionType<span class="token punctuation">)</span>evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> iconPreview<span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>image <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> defaultIcon<span class="token punctuation">.</span>texture <span class="token punctuation">:</span> activeItem<span class="token punctuation">.</span>image<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ObjectField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Image"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>image<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ObjectField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Image"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token class-name">Sprite</span> newIcon <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue <span class="token keyword">as</span> <span class="token class-name">Sprite</span><span class="token punctuation">;</span> activeItem<span class="token punctuation">.</span>image <span class="token operator">=</span> newIcon<span class="token punctuation">;</span> <span class="token comment">// 这里是更新预览图的组件</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> newIcon <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> defaultIcon<span class="token punctuation">.</span>texture <span class="token punctuation">:</span> newIcon<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Info"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>details<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Info"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>details <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703140815164.png" alt="物品信息展示效果"></p><p>这样就可以实现显示和修改 ScriptableObject 中的物品列表数据了!</p><hr><h4 id="添加物品"><a href="#添加物品" class="headerlink" title="添加物品"></a>添加物品</h4><p>当然需要先添加一个添加的按钮了,并且记住这个 Button 的 Name,便于后面代码获取。</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703141948668.png" alt="添加按钮"></p><p>在 <strong>CreateGUI()</strong> 中获取添加按钮的 Button 并且添加点击触发事件函数</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp">root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Button<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"AddButton"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>clicked <span class="token operator">+=</span> OnAddItemClicked<span class="token punctuation">;</span></code></pre><p>然后来写 <strong>OnAddItemClicked()</strong></p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnAddItemClicked</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token class-name">Item</span> newItem <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token constructor-invocation class-name">Item</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> newItem<span class="token punctuation">.</span>id <span class="token operator">=</span> itemList<span class="token punctuation">[</span>itemList<span class="token punctuation">.</span>Count <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>id <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 当前列表中最后一个物品的ID往后+1</span> newItem<span class="token punctuation">.</span>itemName <span class="token operator">=</span> <span class="token string">"New Item"</span><span class="token punctuation">;</span> itemList<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span>newItem<span class="token punctuation">)</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>好的,然后打开编辑器测试一下,成功添加!</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/%E6%B7%BB%E5%8A%A0%E7%89%A9%E5%93%81.gif" alt="添加物品"></p><hr><h4 id="删除物品"><a href="#删除物品" class="headerlink" title="删除物品"></a>删除物品</h4><p>同样添加一个删除的 Button</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703143634508.png" alt="删除按钮"></p><p>在 <strong>CreateGUI()</strong> 中获取删除按钮的 Button 并且添加点击触发事件函数</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp">root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Button<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"DeleteButton"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>clicked <span class="token operator">+=</span> OnDelItemClicked<span class="token punctuation">;</span></code></pre><p>然后来写 <strong>OnDelItemClicked()</strong></p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnDelItemClicked</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> itemList<span class="token punctuation">.</span><span class="token function">Remove</span><span class="token punctuation">(</span>activeItem<span class="token punctuation">)</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>打开编辑器测试一下,也删除成功!</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/%E5%88%A0%E9%99%A4%E7%89%A9%E5%93%81.gif" alt="删除物品"></p><hr><h4 id="列表排序"><a href="#列表排序" class="headerlink" title="列表排序"></a>列表排序</h4><p>在编辑器添加一个 Dropdown 的组件,有下拉框的功能,其中有两个属性的参数需要注意</p><p><strong>Index</strong>:是在打开编辑器时默认选择的下拉列表中选项的索引,这里默认的-1 代表什么都不选为空,如果是 0 则是选择下拉列表中第一个选项</p><p><strong>Choices</strong>:下拉列表中的选项,中间用英文逗号”,”隔开</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703145846819.png" alt="添加Dropdown组件"></p><p>先声明三个变量</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">private</span> <span class="token class-name">DropdownField</span> sortDropdown<span class="token punctuation">;</span> <span class="token comment">// 排序的下拉框组件</span><span class="token keyword">private</span> <span class="token class-name"><span class="token keyword">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span></span> sortMode<span class="token punctuation">;</span> <span class="token comment">// 所有排序模式</span><span class="token keyword">private</span> <span class="token class-name"><span class="token keyword">string</span></span> currentSortMode<span class="token punctuation">;</span> <span class="token comment">// 当前的排序模式</span></code></pre><p>在 <strong>CreateGUI()</strong> 中对声明的那三个变量赋值,并给下拉框注册回调函数事件,</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 列表排序</span>sortDropdown <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>DropdownField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Sort"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>sortDropdown<span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>OnSortModeChange<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 当值发生变化时调用</span>sortMode <span class="token operator">=</span> sortDropdown<span class="token punctuation">.</span>choices<span class="token punctuation">.</span><span class="token function">ToArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>currentSortMode <span class="token operator">=</span> sortDropdown<span class="token punctuation">.</span>choices<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span></code></pre><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// *物品列表排序</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnSortModeChange</span><span class="token punctuation">(</span><span class="token class-name">ChangeEvent<span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span> evt<span class="token punctuation">)</span><span class="token punctuation">{</span> currentSortMode <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token comment">//? 升序(按ID)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">==</span> sortMode<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 先降序排序</span> itemList<span class="token punctuation">.</span><span class="token function">Sort</span><span class="token punctuation">(</span><span class="token keyword">delegate</span> <span class="token punctuation">(</span><span class="token class-name">Item</span> a<span class="token punctuation">,</span> <span class="token class-name">Item</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>id <span class="token operator">></span> b<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">?</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//? 降序(按ID)</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">==</span> sortMode<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 降序排序</span> itemList<span class="token punctuation">.</span><span class="token function">Sort</span><span class="token punctuation">(</span><span class="token keyword">delegate</span> <span class="token punctuation">(</span><span class="token class-name">Item</span> a<span class="token punctuation">,</span> <span class="token class-name">Item</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>id <span class="token operator">></span> a<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">?</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>打开编辑器测试一下,成功!</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/%E7%89%A9%E5%93%81%E5%88%97%E8%A1%A8%E6%8E%92%E5%BA%8F.gif" alt="物品列表排序"></p><hr><h4 id="搜索"><a href="#搜索" class="headerlink" title="搜索"></a>搜索</h4><p>老样子,先添加 Text Field 组件,是一个文本+输入框的组合,正好符合基础搜索框的条件。</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/image-20220703151348039.png" alt="添加Text Field组件"></p><p>在 <strong>CreateGUI()</strong> 中为搜索栏注册回调函数事件</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// 物品搜索栏</span>root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Search"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token generic-method"><span class="token function">RegisterValueChangedCallback</span><span class="token generic class-name"><span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span></span><span class="token punctuation">(</span>OnSearchBarTextChange<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token comment">// *搜索物品</span><span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnSearchBarTextChange</span><span class="token punctuation">(</span><span class="token class-name">ChangeEvent<span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span> evt<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">!=</span> <span class="token keyword">string</span><span class="token punctuation">.</span>Empty <span class="token operator">||</span> evt<span class="token punctuation">.</span>newValue <span class="token operator">!=</span> <span class="token string">""</span><span class="token punctuation">)</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span><span class="token function">SearchItemBy_ID_ItemName</span><span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">else</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span>itemList<span class="token punctuation">;</span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>里面涉及到了对物品数据库调用的方法,我们到 ScriptableObject 数据文件中创建一个存储查询物品列表的变量和 <strong>SearchItemBy_ID_ItemName()</strong> 方法。</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> searchItems <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token constructor-invocation class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 存储查询到的新物品列表</span><span class="token comment">/// <summary></span><span class="token comment">/// 使用ID或者名称查询物品 模糊查询</span><span class="token comment">/// </summary></span><span class="token comment">/// <param name="searchStr">输入查询的字符串</param></span><span class="token comment">/// <returns></returns></span><span class="token keyword">public</span> <span class="token return-type class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> <span class="token function">SearchItemBy_ID_ItemName</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">string</span></span> searchStr<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 如果查询物品列表不为空,就先将它清空</span> <span class="token keyword">if</span><span class="token punctuation">(</span>searchItems<span class="token punctuation">.</span>Count <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span> searchItems<span class="token punctuation">.</span><span class="token function">Clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 使用foreach循环遍历</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">var</span></span> item <span class="token keyword">in</span> itemList<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 如果当前遍历的道具id或者name,含有输入的字符,就将它添加到查询列表中</span> <span class="token keyword">if</span><span class="token punctuation">(</span>item<span class="token punctuation">.</span>id<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Contains</span><span class="token punctuation">(</span>searchStr<span class="token punctuation">)</span> <span class="token operator">||</span> item<span class="token punctuation">.</span>itemName<span class="token punctuation">.</span><span class="token function">Contains</span><span class="token punctuation">(</span>searchStr<span class="token punctuation">)</span><span class="token punctuation">)</span> searchItems<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> searchItems<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>OK,然后我们再打开编辑器测试一下,没有问题</p><p><img src="/2022/07/02/bao-ke-meng-tong-ren-you-xi-kai-fa-ri-ji-22-07-01/%E7%89%A9%E5%93%81%E6%90%9C%E7%B4%A2.gif" alt="物品搜索"></p><hr><hr><h3 id="完整源码"><a href="#完整源码" class="headerlink" title="完整源码"></a>完整源码</h3><p><strong>一定要注意脚本文件名要和类名一致!! 还有里面文件的路径不一定和你自己项目中的文件路径一致,包括组件名</strong></p><p>ItemEditor.cs</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">using</span> <span class="token namespace">System</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">System<span class="token punctuation">.</span>Linq</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">System<span class="token punctuation">.</span>Collections<span class="token punctuation">.</span>Generic</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEditor</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEngine</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEngine<span class="token punctuation">.</span>UIElements</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEditor<span class="token punctuation">.</span>UIElements</span><span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ItemEditor</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">EditorWindow</span></span><span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token class-name">ItemDatabse_SO</span> dataBase<span class="token punctuation">;</span> <span class="token comment">// 受到编辑的ScriptableObject文件</span> <span class="token keyword">private</span> <span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> itemList<span class="token punctuation">;</span> <span class="token comment">// 当前编辑器展示的列表数据</span> <span class="token keyword">private</span> <span class="token class-name">VisualTreeAsset</span> itemRowTemplate<span class="token punctuation">;</span> <span class="token comment">// 物品列表中 每条物品的模板文件</span> <span class="token keyword">private</span> <span class="token class-name">ListView</span> itemListView<span class="token punctuation">;</span> <span class="token comment">// 左侧的物品列表视图</span> <span class="token keyword">private</span> <span class="token class-name">ScrollView</span> itemDetailsSection<span class="token punctuation">;</span> <span class="token comment">// 右侧信息面板视图</span> <span class="token keyword">private</span> <span class="token class-name">Item</span> activeItem<span class="token punctuation">;</span> <span class="token comment">// 当前选择激活的道具</span> <span class="token keyword">private</span> <span class="token class-name">TextField</span> searchBar<span class="token punctuation">;</span> <span class="token comment">// 搜索栏</span> <span class="token keyword">private</span> <span class="token class-name">DropdownField</span> sortDropdown<span class="token punctuation">;</span> <span class="token comment">// 排序的下拉框</span> <span class="token keyword">private</span> <span class="token class-name"><span class="token keyword">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span></span> sortMode<span class="token punctuation">;</span> <span class="token comment">// 所有排序模式</span> <span class="token keyword">private</span> <span class="token class-name"><span class="token keyword">string</span></span> currentSortMode<span class="token punctuation">;</span> <span class="token comment">// 当前的排序模式</span> <span class="token comment">// *默认预览图片</span> <span class="token keyword">private</span> <span class="token class-name">Sprite</span> defaultIcon<span class="token punctuation">;</span> <span class="token keyword">private</span> <span class="token class-name">VisualElement</span> iconPreview<span class="token punctuation">;</span> <span class="token comment">// 展示图标的视图组件</span> <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">MenuItem</span><span class="token attribute-arguments"><span class="token punctuation">(</span><span class="token string">"My Editor/ItemEditor"</span><span class="token punctuation">)</span></span></span><span class="token punctuation">]</span> <span class="token comment">// 这个编辑器的菜单层级位置</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">ShowExample</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">ItemEditor</span> wnd <span class="token operator">=</span> <span class="token generic-method"><span class="token function">GetWindow</span><span class="token generic class-name"><span class="token punctuation"><</span>ItemEditor<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> wnd<span class="token punctuation">.</span>titleContent <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token constructor-invocation class-name">GUIContent</span><span class="token punctuation">(</span><span class="token string">"ItemEditor"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">CreateGUI</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Each editor window contains a root VisualElement object</span> <span class="token class-name">VisualElement</span> root <span class="token operator">=</span> rootVisualElement<span class="token punctuation">;</span> <span class="token comment">/** 因为我只使用了UXML没有用到UCSS所以就删了,其实注释掉也可以 **/</span> <span class="token comment">// Import UXML</span> <span class="token class-name"><span class="token keyword">var</span></span> visualTree <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">LoadAssetAtPath</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualTreeAsset<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Assets/Editor/ItemDB_Editor/ItemEditor.uxml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">VisualElement</span> labelFromUXML <span class="token operator">=</span> visualTree<span class="token punctuation">.</span><span class="token function">Instantiate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> root<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span>labelFromUXML<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 拿到物品列表中 物品的模板</span> itemRowTemplate <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">LoadAssetAtPath</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualTreeAsset<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Assets/Editor/ItemDB_Editor/ItemSlotTemplate.uxml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 拿到默认Icon图片</span> defaultIcon <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">LoadAssetAtPath</span><span class="token generic class-name"><span class="token punctuation"><</span>Sprite<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Assets/Image/item/Bag_未知_Sprite.png"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 变量赋值-获取组件</span> itemListView <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Left"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ListView<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ListView"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ScrollView<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ScrollView"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> iconPreview <span class="token operator">=</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 物品搜索栏</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Search"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token generic-method"><span class="token function">RegisterValueChangedCallback</span><span class="token generic class-name"><span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span></span><span class="token punctuation">(</span>OnSearchBarTextChange<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 列表排序</span> sortDropdown <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>DropdownField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Sort"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>DropdownField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Sort"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>OnSortModeChange<span class="token punctuation">)</span><span class="token punctuation">;</span> sortMode <span class="token operator">=</span> sortDropdown<span class="token punctuation">.</span>choices<span class="token punctuation">.</span><span class="token function">ToArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> currentSortMode <span class="token operator">=</span> sortDropdown<span class="token punctuation">.</span>choices<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 获得按钮</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Button<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"AddButton"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>clicked <span class="token operator">+=</span> OnAddItemClicked<span class="token punctuation">;</span> root<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Button<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"DeleteButton"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>clicked <span class="token operator">+=</span> OnDelItemClicked<span class="token punctuation">;</span> <span class="token comment">// 加载数据</span> <span class="token function">LoadDataBase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 生成ListView</span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// *搜索物品</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnSearchBarTextChange</span><span class="token punctuation">(</span><span class="token class-name">ChangeEvent<span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span> evt<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">!=</span> <span class="token keyword">string</span><span class="token punctuation">.</span>Empty <span class="token operator">||</span> evt<span class="token punctuation">.</span>newValue <span class="token operator">!=</span> <span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span><span class="token function">SearchItemBy_ID_ItemName</span><span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span>itemList<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// *物品列表排序</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnSortModeChange</span><span class="token punctuation">(</span><span class="token class-name">ChangeEvent<span class="token punctuation"><</span><span class="token keyword">string</span><span class="token punctuation">></span></span> evt<span class="token punctuation">)</span> <span class="token punctuation">{</span> currentSortMode <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token comment">//? 升序(按ID)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">==</span> sortMode<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 先降序排序</span> itemList<span class="token punctuation">.</span><span class="token function">Sort</span><span class="token punctuation">(</span><span class="token keyword">delegate</span> <span class="token punctuation">(</span><span class="token class-name">Item</span> a<span class="token punctuation">,</span> <span class="token class-name">Item</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>id <span class="token operator">></span> b<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">?</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//? 降序(按ID)</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>evt<span class="token punctuation">.</span>newValue <span class="token operator">==</span> sortMode<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 降序排序</span> itemList<span class="token punctuation">.</span><span class="token function">Sort</span><span class="token punctuation">(</span><span class="token keyword">delegate</span> <span class="token punctuation">(</span><span class="token class-name">Item</span> a<span class="token punctuation">,</span> <span class="token class-name">Item</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>id <span class="token operator">></span> a<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">?</span> <span class="token number">1</span> <span class="token punctuation">:</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// *加载基本数据</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">LoadDataBase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 在本地Asset资源中查找名字是 ItemDatabse_SO 的文件路径</span> <span class="token class-name"><span class="token keyword">var</span></span> dataArray <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token function">FindAssets</span><span class="token punctuation">(</span><span class="token string">"ItemDatabse_SO"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>dataArray<span class="token punctuation">.</span>Length <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name"><span class="token keyword">var</span></span> path <span class="token operator">=</span> AssetDatabase<span class="token punctuation">.</span><span class="token function">GUIDToAssetPath</span><span class="token punctuation">(</span>dataArray<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 通过路径加载ScriptableObject数据文件</span> dataBase <span class="token operator">=</span> <span class="token punctuation">(</span>ItemDatabse_SO<span class="token punctuation">)</span>AssetDatabase<span class="token punctuation">.</span><span class="token function">LoadAssetAtPath</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token keyword">typeof</span><span class="token punctuation">(</span><span class="token type-expression class-name">ItemDatabse_SO</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> itemList <span class="token operator">=</span> dataBase<span class="token punctuation">.</span>itemList<span class="token punctuation">;</span> <span class="token comment">// 如果不标记则无法保存数据</span> EditorUtility<span class="token punctuation">.</span><span class="token function">SetDirty</span><span class="token punctuation">(</span>dataBase<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// *生成ListView中的数据</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">GenerateListView</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Func<span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span> makeItem <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> itemRowTemplate<span class="token punctuation">.</span><span class="token function">CloneTree</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 复制</span> <span class="token class-name">Action<span class="token punctuation"><</span>VisualElement<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">></span></span> bindItem <span class="token operator">=</span> <span class="token punctuation">(</span>e<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator"><</span> itemList<span class="token punctuation">.</span>Count<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>image <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> e<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>image<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> e<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>Label<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Name"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>text <span class="token operator">=</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> <span class="token string">"No Name"</span> <span class="token punctuation">:</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>id <span class="token operator">+</span> <span class="token string">"_"</span> <span class="token operator">+</span> itemList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>itemName<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span>itemsSource <span class="token operator">=</span> itemList<span class="token punctuation">;</span> <span class="token comment">// 源文件</span> itemListView<span class="token punctuation">.</span>makeItem <span class="token operator">=</span> makeItem<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span>bindItem <span class="token operator">=</span> bindItem<span class="token punctuation">;</span> <span class="token comment">// 当点击物品时触发</span> itemListView<span class="token punctuation">.</span>onSelectionChange <span class="token operator">+=</span> OnListSelectionChange<span class="token punctuation">;</span> <span class="token comment">// 右侧信息面板不可见</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token preprocessor property">#<span class="token directive keyword">region</span> 按钮事件</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnDelItemClicked</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> itemList<span class="token punctuation">.</span><span class="token function">Remove</span><span class="token punctuation">(</span>activeItem<span class="token punctuation">)</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnAddItemClicked</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Item</span> newItem <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token constructor-invocation class-name">Item</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> newItem<span class="token punctuation">.</span>id <span class="token operator">=</span> itemList<span class="token punctuation">[</span>itemList<span class="token punctuation">.</span>Count <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>id <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 当前列表中最后一个物品的ID往后+1</span> newItem<span class="token punctuation">.</span>itemName <span class="token operator">=</span> <span class="token string">"New Item"</span><span class="token punctuation">;</span> itemList<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span>newItem<span class="token punctuation">)</span><span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token preprocessor property">#<span class="token directive keyword">endregion</span></span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnListSelectionChange</span><span class="token punctuation">(</span><span class="token class-name">IEnumerable<span class="token punctuation"><</span><span class="token keyword">object</span><span class="token punctuation">></span></span> selectedItem<span class="token punctuation">)</span> <span class="token punctuation">{</span> activeItem <span class="token operator">=</span> <span class="token punctuation">(</span>Item<span class="token punctuation">)</span>selectedItem<span class="token punctuation">.</span><span class="token function">First</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">GetItemDetails</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> EditorUtility<span class="token punctuation">.</span><span class="token function">SetDirty</span><span class="token punctuation">(</span>dataBase<span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span>visible <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// *获取物品的详情数据</span> <span class="token keyword">private</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">GetItemDetails</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> itemDetailsSection<span class="token punctuation">.</span><span class="token function">MarkDirtyRepaint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>IntegerField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemID"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>id<span class="token punctuation">;</span> <span class="token comment">// 回调函数 如果有更改数据,随之更新</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>IntegerField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemID"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>id <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>itemName<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ItemName"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>itemName <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Init</span><span class="token punctuation">(</span>activeItem<span class="token punctuation">.</span>actionType<span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>actionType<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>EnumField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"ActionType"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// Debug.Log(evt.newValue);</span> activeItem<span class="token punctuation">.</span>actionType <span class="token operator">=</span> <span class="token punctuation">(</span>ItemActionType<span class="token punctuation">)</span>evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> iconPreview<span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>image <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> defaultIcon<span class="token punctuation">.</span>texture <span class="token punctuation">:</span> activeItem<span class="token punctuation">.</span>image<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ObjectField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Image"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>image<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>ObjectField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Image"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token class-name">Sprite</span> newIcon <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue <span class="token keyword">as</span> <span class="token class-name">Sprite</span><span class="token punctuation">;</span> activeItem<span class="token punctuation">.</span>image <span class="token operator">=</span> newIcon<span class="token punctuation">;</span> <span class="token comment">// 这里是更新预览图的组件</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>VisualElement<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Icon"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>style<span class="token punctuation">.</span>backgroundImage <span class="token operator">=</span> newIcon <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">?</span> defaultIcon<span class="token punctuation">.</span>texture <span class="token punctuation">:</span> newIcon<span class="token punctuation">.</span>texture<span class="token punctuation">;</span> itemListView<span class="token punctuation">.</span><span class="token function">Rebuild</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Info"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">value</span> <span class="token operator">=</span> activeItem<span class="token punctuation">.</span>details<span class="token punctuation">;</span> itemDetailsSection<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">Q</span><span class="token generic class-name"><span class="token punctuation"><</span>TextField<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token string">"Info"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">RegisterValueChangedCallback</span><span class="token punctuation">(</span>evt <span class="token operator">=></span> <span class="token punctuation">{</span> activeItem<span class="token punctuation">.</span>details <span class="token operator">=</span> evt<span class="token punctuation">.</span>newValue<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><hr><p>ItemDatabse_SO.cs</p><pre class="language-csharp" data-language="csharp"><code class="language-csharp"><span class="token keyword">using</span> <span class="token namespace">System<span class="token punctuation">.</span>Collections<span class="token punctuation">.</span>Generic</span><span class="token punctuation">;</span><span class="token keyword">using</span> <span class="token namespace">UnityEngine</span><span class="token punctuation">;</span><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">CreateAssetMenu</span><span class="token attribute-arguments"><span class="token punctuation">(</span>fileName <span class="token operator">=</span> <span class="token string">"ItemDatabse_SO"</span><span class="token punctuation">,</span> menuName <span class="token operator">=</span> <span class="token string">"ScriptableObject/ItemDatabse_SO"</span><span class="token punctuation">)</span></span></span><span class="token punctuation">]</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ItemDatabse_SO</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">ScriptableObject</span></span><span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> itemList<span class="token punctuation">;</span> <span class="token class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> searchItems <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token constructor-invocation class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 存储查询到的新物品列表</span> <span class="token comment">/// <summary></span> <span class="token comment">/// 使用ID或者名称查询物品 模糊查询</span> <span class="token comment">/// </summary></span> <span class="token comment">/// <param name="searchStr">输入查询的字符串</param></span> <span class="token comment">/// <returns></returns></span> <span class="token keyword">public</span> <span class="token return-type class-name">List<span class="token punctuation"><</span>Item<span class="token punctuation">></span></span> <span class="token function">SearchItemBy_ID_ItemName</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">string</span></span> searchStr<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 如果查询物品列表不为空,就先将它清空</span> <span class="token keyword">if</span><span class="token punctuation">(</span>searchItems<span class="token punctuation">.</span>Count <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span> searchItems<span class="token punctuation">.</span><span class="token function">Clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 使用foreach循环遍历</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">var</span></span> item <span class="token keyword">in</span> itemList<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 如果当前遍历的道具id或者name,含有输入的字符,就将它添加到查询列表中</span> <span class="token keyword">if</span><span class="token punctuation">(</span>item<span class="token punctuation">.</span>id<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Contains</span><span class="token punctuation">(</span>searchStr<span class="token punctuation">)</span> <span class="token operator">||</span> item<span class="token punctuation">.</span>itemName<span class="token punctuation">.</span><span class="token function">Contains</span><span class="token punctuation">(</span>searchStr<span class="token punctuation">)</span><span class="token punctuation">)</span> searchItems<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> searchItems<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment">// *道具</span><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">System<span class="token punctuation">.</span>Serializable</span></span><span class="token punctuation">]</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Item</span><span class="token punctuation">{</span> <span class="token comment">// 我这是演示所以尽量用的不同的数据类型展示</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">int</span></span> id<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">string</span></span> itemName<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name">Sprite</span> image<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token class-name">ItemActionType</span> actionType<span class="token punctuation">;</span> <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">TextArea</span></span><span class="token punctuation">]</span> <span class="token keyword">public</span> <span class="token class-name"><span class="token keyword">string</span></span> details<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">// *物品操作类型</span><span class="token keyword">public</span> <span class="token keyword">enum</span> <span class="token class-name">ItemActionType</span><span class="token punctuation">{</span> None<span class="token punctuation">,</span> <span class="token comment">// 无操作</span> Use <span class="token comment">// 使用</span><span class="token punctuation">}</span></code></pre>]]></content>
<categories>
<category> 宝可梦同人游戏开发日记 </category>
</categories>
<tags>
<tag> Unity </tag>
<tag> 游戏开发 </tag>
<tag> C# </tag>
</tags>
</entry>
<entry>
<title>我的驾照拿到手了!还有我之后的安排</title>
<link href="/2022/06/30/wo-de-jia-zhao-na-dao-shou-liao/"/>
<url>/2022/06/30/wo-de-jia-zhao-na-dao-shou-liao/</url>
<content type="html"><![CDATA[<h3 id="考完驾照!"><a href="#考完驾照!" class="headerlink" title="考完驾照!"></a>考完驾照!</h3><p>我的驾照终于考完了!我是在3月9号的科一,4月1号考的科二,前面都挺顺利的结果到了科三,5月10号的好不容易成功约上了一次,但在第二天马上要考试的时候,通知说因为疫情还是啥原因,考场给考试取消了,结果考场恢复考试了之后,取消考试又要重新约,一直约到6月21号的才终于又约上了,6月29号的科四,相当于驾照推迟了一个月才拿到。害~</p><hr><h3 id="之后的安排-专心准备找工作"><a href="#之后的安排-专心准备找工作" class="headerlink" title="之后的安排-专心准备找工作"></a>之后的安排-专心准备找工作</h3><p>驾照到手了,那么接下来就要开始面临找工作的困境了,因为现在已经大学毕业了,身边有的和我一样没有参加专升本的同学已经找到了工作,还时不时一边催促我快点找工作一边又叫我打LOL。也有专升本考试分数不理想,而又需要投身学习提升专业技能的同学,有明确目标的,也有还在迷茫的,不过只要知道还需要学习提升自己的能力总没错。</p><p>我呢应该算是个特别没有自信或者说是没有安全感的一个人,在做重要的事情如果我没有把握,我一定要准备到心里有底的时候才会去做。就比如找工作,我对自己还是有些自知,知道自己目前掌握的能力确实很难找到游戏开发的工作,我觉得盲目的去投简历有点浪费时间,就算简历包装的再好,如果进到了面试环节被揭穿,也只会让别人留下更坏的印象,我不希望这样。</p><p>我希望我简历中的内容是真实的,让HR看到后能够感受到真诚。虽然现在我主要就怕会因为紧张加上有些缺乏沟通,可能在面试时我没能将我真实的想法说明白,不过我现在写博客也是为了锻炼我这方面的能力。</p><p>人都是有缺点的,有的缺点可能一辈子都无法改掉,有的缺点可能会因为一句话、一件事或者一个人,就能让你萌生出现在的自己必须做出改变的觉悟,然后产生动力,经过自身锻炼和时间的打磨慢慢进步或者改善。而我说白了就是为了进入社会、找到工作,现在就需要学习和锻炼,慢慢的改进!</p><hr><h3 id="写博客的好处"><a href="#写博客的好处" class="headerlink" title="写博客的好处"></a>写博客的好处</h3><p>之前也有听过,说程序员坚持写博客一定是百利无一害的,我现在可以完全理解这句话的含义了。</p><h4 id="1-对于我来说最重要的当然还是锻炼总结能力"><a href="#1-对于我来说最重要的当然还是锻炼总结能力" class="headerlink" title="1.对于我来说最重要的当然还是锻炼总结能力"></a>1.对于我来说最重要的当然还是锻炼总结能力</h4><p>如果想要通过教学帮助其他遇到同样问题的人,出教程,一定要完全的了解其中每段代码的含义,要是自己都不懂,何来的教会别人呢,所以这也是一个锻炼的机会。可以通过每次的经历,总结出好的内容,便于积累经验和内容扩展,总结出遇到的问题,可以便于以后的改进以及避免。</p><h4 id="2-可以记录各种方面的文章"><a href="#2-可以记录各种方面的文章" class="headerlink" title="2.可以记录各种方面的文章"></a>2.可以记录各种方面的文章</h4><p>方便以后要是有哪些功能代码或者某个日期做了什么事给忘了,这样就可以在博客中看到你记录写下的文章,可以帮助你大脑记忆事情,人嘛,脑容量始终是有限的,难免会忘掉或者想不起来某一段记忆,现在互联网可以帮你记录。</p><h4 id="3-对于程序员来说博客是一个很好的推销手段"><a href="#3-对于程序员来说博客是一个很好的推销手段" class="headerlink" title="3.对于程序员来说博客是一个很好的推销手段"></a>3.对于程序员来说博客是一个很好的<strong>推销手段</strong></h4><p>在博客中写的每一篇文章都是对于你技术、能力的展现,别人从你的博客中,通过这些文章,可以知道你拥有掌握了哪些知识和技能,更加了解你,并且在一定程度上可以体现了你的能力水平。</p>]]></content>
<categories>
<category> 日常 </category>
</categories>
<tags>
<tag> 日常 </tag>
</tags>
</entry>
<entry>
<title>推荐Win10系统的5个实用小软件</title>
<link href="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/"/>
<url>/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/</url>
<content type="html"><![CDATA[<p>目前经常使用的一些基于Windows10系统的功能软件,如果你还没有安装使用过,并且感兴趣的可以尝试用用看。</p><h2 id="1-Snipaste-截图工具(强烈推荐)"><a href="#1-Snipaste-截图工具(强烈推荐)" class="headerlink" title="1.Snipaste 截图工具(强烈推荐)"></a>1.Snipaste 截图工具(强烈推荐)</h2><p>这个截图工具是真的实用,我最喜欢这个软件里的贴图功能,可以直接把你刚刚截下的图再贴到屏幕上,使用最多的地方一般是代码遇到问题在网上已经找到解决问题的时候,可以把解决问题的答案截下来并贴到屏幕上,然后再切回代码编辑器解决问题,这样就不用浏览器跟编辑器来回切换了。又或者是需要数据或者代码对比的时候也可以把其中一个截下来贴到屏幕上直接和另外一个对比,省去来回切换的时间。<img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628013334137.png" alt="贴图功能"></p><p>当然也有一些其他功能可以慢慢研究,比如在截图窗口可以直接查看当前光标位置的颜色值并且复制,对于前端开发需要提取页面某个元素的颜色的时候也很有用。</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628012749709.png" alt="颜色值取样"></p><p>下载方式:</p><p>推荐到<a href="https://www.snipaste.com/download.html">官网</a>下载,或者微软商店搜索”Snipaste”下载安装<img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628013721150.png" alt="Snipaste 官网"></p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628014024872.png" alt="微软商店搜索"Snipaste""></p><hr><h2 id="2-TranslucentTB-任务栏美化"><a href="#2-TranslucentTB-任务栏美化" class="headerlink" title="2.TranslucentTB 任务栏美化"></a>2.TranslucentTB 任务栏美化</h2><p>主要作用是可以将任务栏背景变为透明化或者毛玻璃样式的半透明,可能有的人最开始就认为Win10默认的任务栏背景颜色太丑太多余,就直接设置成了自动隐藏任务栏,但不能直接查看到当前已执行的程序任务以及时间等等任务栏上的信息,用了这个软件就可以让任务栏的背景颜色透明化,桌面看起来更整洁好看。</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628005510371.png" alt="任务栏透明化"></p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628010313335.png" alt="任务栏背景可设置的类型模式"><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628010332541.png" alt="在桌面与焦点窗口最大化||全屏(无边框)之间切换任务栏显示模式"> </p><p>下载方式:</p><p>可以在Microsoft Store 微软商店搜索”TranslucentTB”下载或者<a href="https://translucenttb.en.softonic.com/">https://translucenttb.en.softonic.com</a>,当然网上也有很多资源也可以直接搜,但是官方版的是没有中文的</p><p>推荐到微软商店中搜索”TranslucentTB(汉化 by tpxxn)”这个是带有汉化的</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628011517440.png" alt="微软商店搜索"TranslucentTB""></p><hr><h2 id="3-EarTrumpet-可替代Windows10自带的音量控制器"><a href="#3-EarTrumpet-可替代Windows10自带的音量控制器" class="headerlink" title="3.EarTrumpet 可替代Windows10自带的音量控制器"></a>3.EarTrumpet 可替代Windows10自带的音量控制器</h2><p>EarTrumpet 是一款功能强大的 Windows 音量控制应用,可以很直接、直观的“控制”和”观察”你每个应用的音量。</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628025218232.png" alt="EarTrumpet音量控制面板"></p><p>下载方式:<a href="https://eartrumpet.en.softonic.com/">https://eartrumpet.en.softonic.com/</a>或者微软商店搜索”EarTrumpet”</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628030413614.png" alt="微软商店搜索"EarTrumpet""></p><p>安装打开之后你的任务栏可能会显示有两个音量图标,其中一个是EarTrumpet,另一个就是系统默认自带的</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628025653729.png" alt="任务栏中显示两个音量控制器"></p><p>想要隐藏系统默认的音量控制器的图标可以打开系统设置->个性化->任务栏->打开或关闭系统图标 找到”音量”关闭即可</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628030053228.png" alt="打开系统设置->个性化->任务栏->打开或关闭系统图标"></p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628030117389.png" alt="关闭系统默认音量图标"></p><hr><h2 id="4-Steam-加速器"><a href="#4-Steam-加速器" class="headerlink" title="4.Steam++ 加速器"></a>4.Steam++ 加速器</h2><p>不要被名字迷惑了,它可不只是可以加速Steam,还可以加速Twitch、Discord、Github、Origin等等很多平台,而且还附有许多功能脚本,可以增加更多的体验,总之很Nice!</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628020739812.png" alt="Steam++ Steam服务"></p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628020719616.png" alt="Steam++ Github网站"></p><p>下载方式:<a href="https://steampp.net/">Steam++ 官网</a></p><hr><h2 id="5-小孩桌面便签"><a href="#5-小孩桌面便签" class="headerlink" title="5.小孩桌面便签"></a>5.小孩桌面便签</h2><p>这个软件我也是才开始用,觉得很小巧方便而且好用。主要现在拖延症有点严重,得需要天天时刻提醒一下自己还有啥需要干的(虽然主要还是得靠自制力,不然也就只是作为一个提醒的装饰罢了)。</p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628014808986.png" alt="小孩桌面便签-1"></p><p><img src="/2022/06/28/22-06-28-win10-shi-yong-xiao-ruan-jian-tui-jian/image-20220628015630963.png" alt="小孩桌面便签-2"></p><p>下载方式:<a href="http://www.notesmaker.com/">小孩桌面便签官网</a></p>]]></content>
<categories>
<category> 实用软件or工具分享 </category>
</categories>
<tags>
<tag> 实用软件 </tag>
</tags>
</entry>
<entry>
<title>我有了自己的博客网站</title>
<link href="/2022/06/06/myfirstblog/"/>
<url>/2022/06/06/myfirstblog/</url>
<content type="html"><![CDATA[<p>为了更好的记录自己能力的成长,所以用了Hexo框架 + <a href="https://github.com/blinkfox/hexo-theme-matery">Matery</a>主题 + GitHub Pages 做了一个自己的博客网站,以后会记录一些开发游戏的进度、遇到的一些问题及解决方法或者一些有趣的软件和游戏分享。</p><h2 id="创建博客的过程"><a href="#创建博客的过程" class="headerlink" title="创建博客的过程"></a>创建博客的过程</h2><h3 id="1-安装Nods-js"><a href="#1-安装Nods-js" class="headerlink" title="1. 安装Nods.js"></a>1. 安装Nods.js</h3><p>node.js下载官网: <a href="http://nodejs.cn/download/">nodejs官网</a>. </p><p><img src="/2022/06/06/myfirstblog/20220607131352.png" alt="Node.js官网"></p><hr><h3 id="2-安装Git"><a href="#2-安装Git" class="headerlink" title="2. 安装Git"></a>2. 安装Git</h3><p>在Windows上使用Git,可以从Git官网直接<a href="https://git-scm.com/downloads">https://git-scm.com/downloads</a> 然后按默认选项安 装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就 说明Git安装成功!</p><ul><li>在Git中绑定Github账号,打开“Git Bash”,在命令框中依次输入两行命令:</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> config <span class="token parameter variable">--global</span> user.name <span class="token string">"Your Name"</span><span class="token function">git</span> config <span class="token parameter variable">--global</span> user.email [email protected]<span class="token comment"># 其中Your Name和[email protected]替换成上面注册时的账户名和邮箱</span></code></pre><p>安装之后可以输入以下命令查看是否安装成功:</p><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> version <span class="token comment"># 验证git版本</span><span class="token function">node</span> <span class="token parameter variable">-v</span> <span class="token comment"># 验证node版本</span><span class="token function">npm</span> <span class="token parameter variable">-v</span> <span class="token comment"># 验证npm版本</span></code></pre><hr><h3 id="3-安装Hexo"><a href="#3-安装Hexo" class="headerlink" title="3. 安装Hexo"></a>3. 安装Hexo</h3><ul><li>以上环境准备好了就可使用 npm 开始安装 Hexo 了,在命令行输入执行如下命令:</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-g</span> hexo-cli</code></pre><ul><li>安装 Hexo 完成后,在指定文件夹下打开“Git Bash”,再执行下列命令,Hexo 将会在该文件夹路径下新建所须要的文件:</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash">hexo init myBlog<span class="token builtin class-name">cd</span> myBlog<span class="token function">npm</span> <span class="token function">install</span><span class="token comment"># myBlog 是新建出来的文件夹项目名,可随意</span></code></pre><ul><li>若是上面的命令都没报错的话,就恭喜了,运行 hexo s 命令,其中 s 是 server 的缩写,</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash">hexo s 或者 hexo server <span class="token comment"># 运行服务</span>其他命令(需了解):hexo g 或者 hexo generate <span class="token comment"># 生成静态文件</span>hexo d 或者 hexo deploy <span class="token comment"># 项目部署到Github 需要做好部署环境</span></code></pre><p>在浏览 器中输入 <a href="http://localhost:4000/">http://localhost:4000</a> 回车就能够在本地预览效果了。</p><p><img src="/2022/06/06/myfirstblog/1188507-20210130123625480-579458690.png" alt="Hexo部署后预览"></p><hr><h3 id="4-安装Matery主题"><a href="#4-安装Matery主题" class="headerlink" title="4. 安装Matery主题"></a>4. 安装Matery主题</h3><p>可以选择到 <a href="https://hexo.io/themes/">Hexo主题官网</a> 挑选一个其他你认为好看的主题,我使用的是 <a href="https://github.com/blinkfox/hexo-theme-matery">Matery主题</a> 按照页面中下方的教程,就可以完成Matery主题的安装。</p><hr><h3 id="5-将项目搭建到GitHub-Pages"><a href="#5-将项目搭建到GitHub-Pages" class="headerlink" title="5. 将项目搭建到GitHub Pages"></a>5. 将项目搭建到GitHub Pages</h3><h4 id="5-1-创建一个-Github-项目"><a href="#5-1-创建一个-Github-项目" class="headerlink" title="5.1 创建一个 Github 项目"></a>5.1 创建一个 Github 项目</h4><ul><li>前往 <a href="https://github.com/">Github 官网</a>,登录Github之后,点击 <code>New repository</code> 创建新项目**(注意Github 仅能使用一个同 名仓库的代码托管一个静态站点,这里注意仓库名一定要是: 用户名.github.io,以后访问你的静态网站的地址)**,点击 <code>Create Repository</code> 确认.</li></ul><p><img src="/2022/06/06/myfirstblog/QQ%E5%9B%BE%E7%89%8720220607152101.png" alt="创建Github项目"></p><ul><li>接着配置SSH key,要使用git工具,输入以下指令,前两行如果已经在安装git时输入过了,就不用输入了</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> config <span class="token parameter variable">--global</span> user.name <span class="token string">"用户名"</span><span class="token function">git</span> config <span class="token parameter variable">--global</span> user.email <span class="token string">"邮箱地址"</span>ssh-keygen <span class="token parameter variable">-t</span> rsa <span class="token parameter variable">-C</span> <span class="token string">"上面的邮箱"</span></code></pre><ul><li>按照提示需要敲三次回车,就可以生成 ssh key,采用以下指令可以查看到自己的ssh:</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> ~/.ssh/id_rsa.pub</code></pre><ul><li>第一次使用还需要确认并添加GitHub到本机SSH可信列表。若返回 Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell access. 内容,则证实添加成功。</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">ssh</span> <span class="token parameter variable">-T</span> [email protected]</code></pre><h4 id="5-2-生成SSH-Key"><a href="#5-2-生成SSH-Key" class="headerlink" title="5.2 生成SSH Key"></a>5.2 生成SSH Key</h4><p>登陆 Github 上添加刚刚生成的SSH key,按如下步骤添加,右上角点击头像-> settings -> SSH and GPG keys,建立一个新的 SSH key, 标题随便,key 就填刚才生成那个,确认建立,这样在你 的 SSH keys 列表里就会看到你刚刚添加的密钥。</p><p><img src="/2022/06/06/myfirstblog/QQ%E6%88%AA%E5%9B%BE20220607152313.png" alt="生成新的SSH key"></p><h4 id="5-3-开始部署"><a href="#5-3-开始部署" class="headerlink" title="5.3 开始部署"></a>5.3 开始部署</h4><p>此时,本地和Github的工做作得差不了,是时候把它们两个链接起来了。你也能够查看官网的部署 教程。先不着急,部署以前还须要修改配置和安装部署插件。</p><ul><li>第一:打开项目根目录下的 _config.yml 配置文件配置参数。拉到文件末尾,填上以下配置。</li></ul><p><img src="/2022/06/06/myfirstblog/QQ%E5%9B%BE%E7%89%8720220607152344.png" alt="_config.yml 配置文件配置参数"></p><ul><li>第二:安装一个部署插件 hexo-deployer-git,打开“Git Bach”,输如以下指令:</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> hexo-deployer-git <span class="token parameter variable">--save</span></code></pre><ul><li>最后执行如下两条命令就能够部署上传啦,如下 g 是 generate 缩写,d 是 deploy 缩写</li></ul><pre class="language-bash" data-language="bash"><code class="language-bash">hexo g <span class="token comment"># 先生成文件</span>hexo d <span class="token comment"># 部署到Github上</span></code></pre><ul><li>这时如果一切正常,就可以直接打开浏览器输入 用户名.github.io (也就是规定设置的项目的名称)就可以访问刚才的网站啦。</li></ul>]]></content>
<categories>
<category> 日常 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> Git </tag>
<tag> GitHub </tag>
</tags>
</entry>
</search>