VR康复训练之逻辑推理之垃圾分类场景(Unity/VR/C#)

场景简述

垃圾分类简单难度场景截图
在这里插入图片描述

有collider、core、mysql三个cs文件

  • collider是用来检测碰撞的
  • Core使用来完成VR中的交互
  • Mysql是用来上传训练数据

在这里插入图片描述
在任务开始,场景中总共有五个垃圾,可以通过生成两个随机数,然后隐藏和这两个随机数相对应的垃圾,在每次训练时,可有做到随机的出现其中的三个垃圾,下图为两次训练情况
在这里插入图片描述

在这里插入图片描述
在训练过程中
1、首先需要判断哪些垃圾是可回收垃圾,哪些是不可回收垃圾,然后把他们放在相应的垃圾桶里,所以我们需要在垃圾桶的周围和底部进行碰撞检测
2、在丢入垃圾的同时对垃圾是否摆放正确进行判断,如果分类出错会提醒他,让他重新摆放
3、在全部垃圾都分类成功之后,提醒他完成训练,并把训练数据上传到数据库中去

注:
1、判断那个垃圾该放在那个垃圾桶通过碰撞板指定的正确类型correctbook来判断
2、在垃圾分类中设置操作垃圾数量通过层次结构中的databasemanager中的correctcounts来设置

简单程度场景中随机垃圾的生成代码
result数组即为随机数组,在获得从数组之后会显示与这些随机数相对应的垃圾

int[] index = new int[20];
for (int i = 0; i < 20; i++)
    index[i] = i;
Random r = new Random();
//用来保存随机生成的不重复的10个数
int[] result = new int[10];
int site = 20;//设置下限
int id;
for (int j = 0; j < 10; j++)
{
    id = r.Next(0, site - 1);
    //在随机位置取出一个数,保存到结果数组
    result[j] = index[id];
    //最后一个数复制到当前位置
    index[id] = index[site - 1];
    //位置的下限减少一
    site--;
}

for (int i = 0; i < num; i++)
{
    Debug.Log(result[i]);
    if (result[i] == 0)
    {
        gameObject[0].SetActive(true);
    }
    else if(result[i] == 1)
    {
        gameObject[1].SetActive(true);
    }
    else if (result[i] == 2)
    {
        gameObject[2].SetActive(true);
    }
    else if (result[i] == 3)
    {
        gameObject[3].SetActive(true);
    }
    else if (result[i] == 4)
    {
        gameObject[4].SetActive(true);
    }
    else if (result[i] == 5)
    {
        gameObject[5].SetActive(true);
    }
    else if (result[i] == 6)
    {
        gameObject[6].SetActive(true);
    }
    else if (result[i] == 7)
    {
        gameObject[7].SetActive(true);
    }
    else if (result[i] == 8)
    {
        gameObject[8].SetActive(true);
    }
    else if (result[i] == 9)
    {
        gameObject[9].SetActive(true);
    }
    else if (result[i] == 10)
    {
        gameObject[10].SetActive(true);
    }
    else if (result[i] == 11)
    {
        gameObject[11].SetActive(true);
    }
    else if (result[i] == 12)
    {
        gameObject[12].SetActive(true);
    }
    else if (result[i] == 13)
    {
        gameObject[13].SetActive(true);
    }
    else if (result[i] == 14)
    {
        gameObject[14].SetActive(true);
    }
    else if (result[i] == 15)
    {
        gameObject[15].SetActive(true);
    }
    else if (result[i] == 16)
    {
        gameObject[16].SetActive(true);
    }
    else if (result[i] == 17)
    {
        gameObject[17].SetActive(true);
    }
    else if (result[i] == 18)
    {
        gameObject[18].SetActive(true);
    }
    else if (result[i] == 19)
    {
        gameObject[19].SetActive(true);
    }
}

模型摆放和脚本挂载

下图是我的层次结构图
在这里插入图片描述
总共有可回收和不可回收两类垃圾桶
在垃圾桶的周围需要进行碰撞检测,BookCollider分别为可回收垃圾桶和不可回收垃圾桶的碰撞板,在丢入垃圾后,垃圾掉落在碰撞板上会被检测出来
在这里插入图片描述

在BookCollider需要挂载检测碰撞的函数并对其进行初始化输入
在这里插入图片描述

在垃圾上需要挂载VR操作函数core文件,用来完成VR对垃圾的操作
在这里插入图片描述
垃圾的属性设置如下
在这里插入图片描述

因为会有很多的垃圾,在把垃圾丢到垃圾桶之后,很容易出现有些垃圾接触不到碰撞检测的情况,因此我在垃圾桶口做了一个触发器,是可穿透的,垃圾可以顺利落在垃圾桶底部,但是是在垃圾桶口就会被检测到,然后对垃圾进行判断,是否分类正确。
实现这个操作需要在Collider中把is Trigger勾选,这样他就变成一个忽略物理碰撞的触发器了
碰撞器和触发器总结
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值