HTC Vive VR房产项目开发四(切换家具样式)

一、在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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页