![v2-a411d927f66eb5def2169842d439702b_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-a411d927f66eb5def2169842d439702b_1440w.jpg?source=172ae18b)
先展示一下最后的效果(模型也是Untiy的免费模型)
![v2-01d650566843fcc79c44b846dc5d7f69_b.gif](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-01d650566843fcc79c44b846dc5d7f69_b.gif)
参加了一个自定义学校的项目,其中有个建造系统需求,所以本着能偷懒就偷懒的原则,第一时间去找有没相关的插件,果然让我找到一个叫(buildSystem)的插件,顾名思义“建造系统”,关键是这插件是免费的!免费!好啦,啥也不说,开整!
![v2-9bda4281bd1b2c96048a623a1e3721d4_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-9bda4281bd1b2c96048a623a1e3721d4_b.jpg)
首先第一时间点开里面的案例(BuildSystemExampleScene文件夹) 发现例子还是挺详细的,里面集成了一个背包,具体的使用方法就是先在一个对象上挂一个叫做:ObjectPlacer的脚本,这个脚本是设置哪里是放置区的,里面只需要更改两个地方(选择摄像机,选定哪些层用于放置物品)
![v2-5005d09761550d0b42c6e5aab80fbd14_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-5005d09761550d0b42c6e5aab80fbd14_b.jpg)
其中Toggle Key用来设置打开背包的按键,默认是E
然后是Object Selector脚本,该脚本用于挂载道具列表以及背包菜单。
![v2-552a7b67d2acfbe5cacc3acf579bf3a4_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-552a7b67d2acfbe5cacc3acf579bf3a4_b.jpg)
先讲这个项目列表,实际就是一个个item的集合(Container),
![v2-bc0eeffdc665c2e5f77f42e81f100993_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-bc0eeffdc665c2e5f77f42e81f100993_b.jpg)
然后这每个item挂载的是要用来放置的道具,注意这里有两个坑。
1.挂载的如果直接是模型会无法设置这个模型的Layer,所以一般是先创建预制件,这个预制件要设置好Layer,这个层是用来标识这个物品的,方便后续删除物品时用,且要挂载好碰撞盒,因为后续放置物品在该模型上面时就是通过碰撞盒来标识的,如果没有碰撞盒则会穿模
![v2-91852f1a5ca53d2509e97cf8fd17298c_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-91852f1a5ca53d2509e97cf8fd17298c_b.jpg)
2.这个是item的坑,如果已经把物品挂载在item上了,要修改挂载的物品则最好重新创建一遍,不然无法识别,这应该是一个bug
![v2-4914468749eb4bb555ca23555d75c145_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-4914468749eb4bb555ca23555d75c145_b.jpg)
最后把这些创建好的item挂在ItemList上就完成背包列表了
![v2-1e4d827ca877522dc5ccf2117c21b27d_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-1e4d827ca877522dc5ccf2117c21b27d_b.jpg)
然后就是创建一个背包菜单预制件了,背包的基本结构是分成Item项目,容器
这是两个预制件,先讲容器
![v2-e665d13d5bd819c8ea73ecbb3402b196_b.png](http://img-01.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-e665d13d5bd819c8ea73ecbb3402b196_b.png)
如图,背包容器有两块是比较重要的,一个就是物品栏的容器,另一个就是关闭菜单的按钮
至于标题栏弄不弄看你,
![v2-2af7e802c0ea6dbb2e9a89290c516dda_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-2af7e802c0ea6dbb2e9a89290c516dda_b.jpg)
其中Animator和BuilderUi必须挂载,在动画器里选择
案例里默认创建的那个动画器就好了,然后BuilderUi有三个要填写的项,第一个是用于存放项目的容器,第二个是每个项目的预制件,第三个是关闭菜单按钮的Text(不是挂载按钮,是挂载按钮的那个text),第一个容器
![v2-47be61929acc6c5ac10237f1feeff6c6_b.png](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-47be61929acc6c5ac10237f1feeff6c6_b.png)
主要是用来遮挡列表的东西,以及提供拖动功能(写个背包的都懂)
![v2-e5951b196206d8b7c4fe17aab6f11cac_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-e5951b196206d8b7c4fe17aab6f11cac_b.jpg)
然后下面那个容器就单纯用来装到时候实例出来的item
![v2-df854f74a5066d47ac5c5fe1e7093275_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-df854f74a5066d47ac5c5fe1e7093275_b.jpg)
到此,背包的容器项就完成了,接下来的就是单个item(其实就是背包里的一个个格子,动态生成)的预制件,挂载一个Builder Object UI的脚本
![v2-2609be9fb4046cfc0b1aab553bb6fba1_b.png](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-2609be9fb4046cfc0b1aab553bb6fba1_b.png)
![v2-d682b28915e8ca7b8dd3e221f1f7e062_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-d682b28915e8ca7b8dd3e221f1f7e062_b.jpg)
这个预制件实际就是这个背包自动生成格子时会把item的图片和名字挂在这里填写的Text和image上。
到这里背包的预制件就做好了,把它挂在Object Selector脚本上就好了
然后是删除物体的脚本Object Remove,一样挂在控制器上
![v2-b0be33577a69658fa4a5327ba36fcc15_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=1ec2e769-8b2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-b0be33577a69658fa4a5327ba36fcc15_b.jpg)
下面分享两个控制器,第一个是第一人称的控制脚本(使用了unity的简单控制器组件,且物体挂了个相机为主物体),第二个是上帝视角控制摄像机移动的脚本
public
上帝视角的控制脚本
public