一、在VRTK中的Prefabs下将RadiaMenu拖动到SofaContainer之下
二、在Panel中默认挂载了两个脚本,VRTK_Radial Menu和VRTK_Radia Menu Controller,由于不需要通过手柄的touch pad等键进行操作,移除掉VRTK_Radial Menu Controller脚本,并且将VRTK_IndependentRadiaMenuController脚本(允许环形菜单挂载到物体上)挂载到Panel物体上
三、对SofaContainer进行设置,与物体进行交互。选中SofaContainer-->Window-->VRTK-->Setup Interactable Object-->进行属性设置-->Setup selected object(s)
然后在右侧自动生成了如图所示的脚本配置
四、给SofaContainer添加一个BoxCollider,这样才能与物体进行交互
五、导入沙发的模型
将模型拖入Hiearchy视图并调整大小和位置
但是可以看到材质已经丢失了,找到材质,看到shader还是Standard
手动将材质改为Valve/vr_standard,并且将该材质重新赋给Febo沙发,就恢复正常了
六、创建脚本并添加到物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;
public class Furniture : MonoBehaviour {
//家具信息列表
public FurnitureData[] furnitureList;
private int currentTextureIndex = 0;
private int currentFurnitureIndex = 0;
//环形菜单
private VRTK_RadialMenu menu;
void Start () {
menu = GetComponentInChildren<VRTK_RadialMenu>();
//变量家具集合,将家具设置为隐藏
foreach (FurnitureData data in furnitureList)
{
data.furnitureModel.SetActive(false);
}
//将第一个家具显示出来
furnitureList[0].furnitureModel.SetActive(true);
updateMenu();
}
void Update () {
}
// 选择材质
public void SelectTexture(int index)
{
if (currentTextureIndex != index) {
//给材质赋值
furnitureList[1].furnitureModel.GetComponent<Renderer>().material.mainTexture = furnitureList[1].textures[2];
currentTextureIndex = index;
}
}
//选择家具
public void SelectFurniture(int index)
{
if(currentFurnitureIndex != index)
{
furnitureList[index].furnitureModel.SetActive(true); //显示传递过来的模型
furnitureList[currentFurnitureIndex].furnitureModel.SetActive(false); //隐藏当前的模型
currentFurnitureIndex = index; //将当前模型的角标重新赋值
}
}
private void updateMenu()
{
for(int i = 0; i < 3; i++)
{
//每选择一个家具模型,就显示相应的缩略图
menu.buttons[i].ButtonIcon = furnitureList[currentFurnitureIndex].textThumbs[i];
menu.RegenerateButtons();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class FurnitureData{
public GameObject furnitureModel; //家具
public Texture[] textures; //模型贴图列表
public Sprite[] textThumbs; //缩略图
}
七、将脚本Furniture挂载到SofaContainer上,设置集合长度是3,并给funiture model家具模型赋值
八、将准备好的材质赋给模型
九、添加材质缩略图
将jpg格式的缩略图导入到unity中后需要改成Sprite类型
十、分别设置radiomenu的按钮点击事件
分别指定button的缩略图
十一、运行后
瞬移到沙发旁边
当接触物体的时候弹出环形菜单
点击第二个方框按钮换成浅色沙发
点击第一个方框按钮切换成椅子
点击第三个方框按钮再次切换成深色沙发
注:参考资料:http://edu.manew.com/course/344/learn#lesson/5753