您的位置:首页 > 移动开发 > Unity3D

3D家居设计展示系统

2015-06-01 23:32 302 查看
最近在帮两个大四学姐做毕业设计,目标是做一个3D版的家具淘宝

用了两天抓时间把客户端弄了一下,效果如图



下面分享一下设计思路,希望对大家有所帮助

开始设计的比较简单,软件分为两个状态,一个是第一人称状态,即上图,还有就是点击物体后会进入环绕观察模式↓



我先定义了一个状态接口

using UnityEngine;

using System.Collections;

 

         interfaceState {

 

         //Use this for initialization

         voidEnter ();

        

         //Update is called once per frame

         voidLeave ();

         voidUpdate();

}

两个状态类分别为FirstPersonState  ObserveState

之后又写了一个类用来存储状态,将当前状态定义为一个单例

private static State Instance;

定义ChangeToObserve和ChangeToFirst方法

初始为第一人称模式,在start中声明

Instance=new FirstPersonState();

Update中射线检测判断是否点击到物体,是则进入观察模式

 

 

Ok,大体结构就是这样,接下来实现一些操作

操作我是这样设置的,当Input.GetMouseButtonDown时,如果当前鼠标位于物体上,则进入选定模式,在当前模式下,如果鼠标持续按住左右滑动时,物体左右旋转

当鼠标抬起时,若竖直方向偏移量超过一定范围,则进入移动模式或销毁物体

移动模式下,物体随鼠标移动,射线检测配合mask很容易实现

在这里我遇到一个问题,一些模型会上下翻转而不是左右翻转,发现这些物体的自身坐标轴有问题

我查了一下资料, Rotate其实有第四个参数,可设置为按世界坐标旋转

在观察模式时,我直接用了别人的代码,发现摄像机总卡在物体中央,这个代码默认摄像机初始位置为物体中心,当然不是因为碰撞卡住,因为摄像机没有碰撞体,

原因为,在游戏中,当角色站在一堵墙旁时,如果摄像机与物体保持固定距离,会出现摄像机穿墙的情况,所以摄像机会一直向中心物体发射射线,检测到碰撞就会拉近镜头,于是我在进入观察模式后禁用碰撞器组件,问题就解决了

还有一个问题是摄像机总会对着物体底部,我获取了hit.colider.bounds.size.y/2在代码里适当位置加上即可

之后又实现了一个拖拽功能,从左边栏位可拖动物体到场景,也就是实例化物体

我使用了UGUI实例中的Drag脚本,加了一个int来存储次序,拖拽实际上是生成了一个Sprite

轮廓发光效果用的插件还没研究,等有时间在好好研究一下~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 家居