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
轮廓发光效果用的插件还没研究,等有时间在好好研究一下~
用了两天抓时间把客户端弄了一下,效果如图
下面分享一下设计思路,希望对大家有所帮助
开始设计的比较简单,软件分为两个状态,一个是第一人称状态,即上图,还有就是点击物体后会进入环绕观察模式↓
我先定义了一个状态接口
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实现多点触控代码
- 在Unity中实现动画的正反播放代码
- unity实现摄像头跟随
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关
- [软件资讯]Unity已支持将3D游戏导出成Flash
- Unity 武器拖尾效果
- unity常见问题之20题
- Unity3D动画存储插件
- unity 赛车相机跟随物体移动
- Unity 预编译宏
- VS2013中 命名空间“UnityEngine”中不存在类型或命名空间名称“UI”。是否缺少程序集引用?
- Unity3D占用内存太大的解决方法
- 【Unity】安卓项目使用带有资源Jar包SDK的打包方法
- 在IOS APP中反复打开和关闭Unity页面
- Unity架构??
- Unity4.6.3,Android版本打包问题