unity3d中用GUI展示物品背包,并在背包中显示一个3d物体 !!!并可以在背包中随意移动物品

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3d中用GUI展示物品背包,并在背包中显示一个3d物体 !!!并可以在背包中随意移动物品相关的知识,希望对你有一定的参考价值。

如题,求思路,求一个简单的demo ,也可以看看下面的代码为什么不能实现物品移动。求指导。在此万分感谢
private int btnclickCount=0; //打开背包按钮的次数
private GUIContent[] Contents; //背包的格子数
private int currentIndex=0; //当前选中
private int goodsIndex=2; //物品所在背包的索引
public Texture2D goodsimage; //当做物体了
private bool isgoodsSelect=false; //是否选中了物品
void OnGUI()

if(GUI.Button(new Rect(0,0,100,50),"打开背包"))

btnclickCount++;

if(btnclickCount%2==1)//按钮的次数是奇数 就打开背包

if(isgoodsSelect)

goodsIndex=currentIndex;
isgoodsSelect=false;

Contents=new GUIContent[9];
for(int i=0;i<9;i++)

if(i==goodsIndex)

Contents[i]=new GUIContent(goodsimage);

else

Contents[i]=new GUIContent("");


currentIndex=GUI.SelectionGrid(Rect(100,100,300,300),currentIndex,Contents,3);
if(currentIndex==goodsIndex) //如果当前选中的格子和物品所在格子是同一个则认为物品被选中了

isgoodsSelect=true;

if(GUI.Button(new Rect(100*4,100,100,50),"删除物品"))

if(currentIndex==goodsIndex)//物品被选中

goodsIndex=-1;
Debug.Log("物品删除成功")

else

Debug.Log("请选中将要删除的物品")



参考技术A gui的当然不能移动,除非每个都用window来做 参考技术B 物体移动 你需要点击按钮生成张GUI texture 绑定鼠标来进行移动。。。追问

你好,请问有这方面的demo吗?小弟刚开始学unity3d,多多关照,万分感谢了

背包整理(01背包,完全背包,多重背包,分组背包)(待更新)

01背包

有N件物品和一个容量为V的背包。第i件物品的价格(即体积,下同)是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

对于每个物品,我们有两种选择:把这个物品放进背包还是不放。
d[i][v]表示前i件物品,恰放入容积为v的背包时的价值总和。
状态转移方程为 \[d[i][v] = \max(d[i - 1][v],d[i - 1][v - w[i]] + c[i])\]

优化(空间)

\[d[v] = \max(d[v],d[v - w[i]] + c[i])(倒序枚举)\]

完全背包

有N件物品和一个容量为V的背包。第i种物品的价格(即体积,下同)是w[i],价值是c[i],每种物品有无限多个。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

用f[i][j]表示前i种背包装入容量为j的背包中所可以获得的最大价值
对于一种物品,只有两种情况
  情况一: 第i件不放进去,这时所得价值为:\[f[i-1][v]\]
  情况二: 第i件放进去,这时,我们需要枚举放进去多少件,设为K,所得价值为:\[f[i-1][v-K*c[i]]+K*w[i]\]
状态转移方程为:\(\max \limits_0<=K<=v/w[i] f[i-1][v-K*w[i]]+K*c[i]\)

//最暴力做法
for(int i = 1; i <= n; i++)
    for(int v = V; v >= w[i]; v--)
        for(int k = 1; k <= v/w[i]; k++)
            d[i][v] = max(d[i - 1][v - w[i]*k]+c[i]*k,d[i][v]);
         

优化

\[d[v] = max(d[v],d[v - w[i]] + c[i])(正序枚举/对于每种物品循环1次)\]
可以感性理解一下

多重背包

把多重背包转化为01背包 也就是说本来每种物品有有限个,我们把这有限个物品拆成有限个不同的物品。然后就转化成了01背包。

    //a[i]是拆开后第i件物品本来的序号
    int cnt = 0;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= num[i]; j++)
            a[++cnt] = i;
        

优化

考虑二进制拆分

分组背包

有N件物品和一个容量为V的背包。第i件物品的价格(即体积,下同)是w[i],价值是c[i]。这N个物品分成了若干个组,每个组里面的商品不可以同时选择。
求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

以上是关于unity3d中用GUI展示物品背包,并在背包中显示一个3d物体 !!!并可以在背包中随意移动物品的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d - RPG项目学习笔记(二十)

Unity3d - RPG项目学习笔记

Unity3d - RPG项目学习笔记

回溯算法背包问题(Java版)

Unity3d - RPG项目学习笔记

UE4 C++ 实现简易背包