楼主今年刚毕业本着开源的精神把我的毕业设计开放源码,提供源码和设计文档的免费下载,算是这么多年对开发社区的一个回馈。
3D虚拟社区是我很多年以前的一个想法,类似美国的第二人生。一开始有这个想法的时候是在小学看科教栏目(可能大家要笑了),那个项目就是一个人带着虚拟眼镜然后在一个球里面走,用技术模拟现实的世界。其实那个东西和现在一些硬件创业公司做的是一样的,但是那是在十年前美国的一个研发项目,现在想想就知道美国的思想有多前卫了。
但是到了大学学了编程,我才记起这件事情,我原来是可以去做的,那时候的心情也是非常非常的激动呢。想一想去做一件改变产业的事情还是挺兴奋的,但是那时候我是一个纯粹的小白。而且那时候游戏没有像现在这么火,工具和开发也没有现在这么规范,后来接触到了Unity。那时候我觉得我应该去做这件事情了,我是在两年前接触unity,那时候在百度搜unity基本搜不到什么内容,但是我感觉unity一定是可以成为未来3D游戏的主流开发工具。
因为unity:
1. 可以用C#和js作为编程语言(有大量的开发人员支持) 2.有免费版本(降低进入门槛)3. 几乎能跨所有的平台。
我一开始定位的3D虚拟社区是“在现实世界可以做的事情,在虚拟社区可以做。在现实世界不能做的事情,在虚拟社区也可以做”,通过这个就会发现虚拟社区的容量是非常大的,想象的空间也是非常大的。
有一天我在游戏开发的群里和大家聊天,聊游戏现在这个产业有什么颠覆性的优势,有什么瓶颈化的劣势。优势就是我们可以用游戏的思维做软件,就可以让软件更具有娱乐性提高软件的活跃性,腾讯就深知这一点。瓶颈化的劣势也是由于腾讯,腾讯靠着垄断性的用户资源和游戏开发商进行9:1的分成,看到这个数字你可能震精了,腾讯什么都没做就能拿到9的分成,这是非常不合理的。这个就是现在游戏发展的瓶颈,没有一个游戏厂商做到BAT的位置,因为没有一个好的商业环境和思维。我就和他们说我们可以绕过腾讯去做游戏,比如前段时间很火的捕鱼达人,捕鱼达人有5千万的下载量,这五千万的用户就可以看做一个群体,这个群体有一个属性那就是“喜欢休闲游戏”,这就是一个用户平台!利用现在的云计算和大数据优势平台很快就可以做出来。那我们为什么不去把这个平台发展起来去构建自己的用户平台?如果这样的话那游戏厂商的就可以突破这个瓶颈,就可以做一个市值百亿的公司。后来就有一个投资人想要投资我的项目,说是如果谈的好的话一百万没有问题。跨过总经理,直接CEO,迎娶白富美,走上人生巅峰,想一想还有点小激动呢。但是我把创业想的太简单了,以为自己一个人就可以胜任美工、开发、策划、CEO、COO、CFO、CTO、CIO,我还是图样图森破。因为产品理念相差太大,融资就撤销了...现在在一个大型团购公司负责Android产品研发工作,但是我还是曾经那个我,不忘初心方能始终。内心始终有创业的小人在呼唤着我...如果有同道中人,请联系我。
好了,说了这么多下面就说一说项目的技术细节。最终成型的项目还是和原来的虚拟社区相差很大,因为考研和工作的原因就耽误了下来,除了人物和人物之间的交互其他的还是都做了出来。
1.概述
虚拟社区刚进来如下图:
漫游模型用的是我们学校,虚拟摇杆用的是easytouch,还添加了喷泉效果水池加了一个透明的材质(unity付费版自带资源)。
2.人物模型
里面的人物模型用的是unity的第三人称视角,我修改了UV图。如下图:
3.虚拟摇杆
因为我做的是移动端的产品所以用到了虚拟摇杆,效果如图:
Import你的EasyTouch包。导入完成后,菜单栏会多出一项:Hedgehog Team。这就是安装的插件了。
下图修改摇杆大小的:Area radius外摇杆大小。Tou radius内摇杆大小。
摇杆的控制设置如图4-6,首先把要控制的游戏对象添加给:GameObject,然后进行调节。
关键接口函数介绍如下:
void OnEnable() 虚拟摇杆激活状态执行函数,主要对一些外部变量进行实时控制。
void OnJoystickMoveEnd(MovingJoystick move)虚拟摇杆结束,也就是手指脱离屏幕会进行的一些处理,包括动画以及数据的传递。
void OnJoystickMove(MovingJoystick move)虚拟摇杆进行中进行的操作,主要是控制人物的走动,以及走动的速度。
4.天空盒
整个游戏场景处在一个立方体的盒子之内,盒子有六个面,分别进行材质赋值就可以实现类似天空的效果。依次打开菜单栏Assets->Import Package->Skyboxes,如下图:
依次打开菜单栏中的Edit->Render Settings选项,在Inspector视图中会显示出Render Settings的参数面板,单击Skybox Material项右侧的圆圈按钮,在弹出的Select Material对话框中为游戏场景指定天空盒材质,本系统选择的是第二种。
5.退出按钮
按钮绘制是在主摄像机中进行,button参数如下:
position : Rect ——按钮在屏幕上的矩形位置,(起点x坐标,起点y坐标,按钮宽度,按钮高度)。
text : String ——按钮上显示的文本内容。
image : Texture ——按钮上显示的图片纹理。
content : GUIContent ——按钮的文本,图片和提示。
style : GUIStyle ——按钮使用的样式,如果不使用,则按钮的样式使用的就是当前的GUISkin皮肤。
Returns(返回):布尔值——当该按钮被点击时返回true。
Description(描述):创建一个单次按下按钮,当用户点击按钮时立即触发事件。
主要接口函数介绍如下:
void OnGUI() 这个函数主要是在程序中进行图像的绘制操作
GUI.Button(new Rect(width,height,100,100),"退出") 绘制长100宽100的矩形。
Application.Quit(); unity框架的退出程序接口函数。
Input.GetKeyDown(KeyCode.Escape)
Input.GetKeyDown(KeyCode.Home) 这两个接口函数主要是针对移动平台进行的优化和方便处理,按下Android下的返回键或者按下ios、Android下的home键程序就会自动退出。
6.大地模型
点击Terrain - > Create Terrain 创建一个游戏地形。
点击Terrain - > set Resolution打开设置地形参数菜单
从上到下分别代表的含义是:
Terrain Width:地形的宽度
Terrain Height:地形的高度
Terrain Length:地形的长度
HeightMap Resolution:地形高度图的分辨率.
Detail Resolution:细节分辨率,控制草和细节网格地图的分辨率。数值越高标示效果越好,想对也越消耗机器性能,可能会卡。根据情况适当的调节。
Control Texture Resolution:控制不同纹理的分辨率。
Base Texture Resolution:控制相对纹理分辨率,这里指一定范围内的。
Project标签中,右键- > Import Package - > Terrain Assets。我们可以看见里面有很多资源包,暂时我们先导入地形的资源,之后再去考虑其他资源包。
点击Edit Textures出现一个下拉列表:
add Textures:添加一个贴图
Edit Textures:编辑贴图
Remove Textures:删除贴图,如下图:
7.楼房模型
关于楼房模型我是让我的一个同学帮的忙,unity和max是兼容协作的就是说你做了模型导出max文件,然后导入unity使用的话必须你的机器是安装有3Dmax的,但是还有一个版本兼容的问题,我用的是max2012和unity3.5兼容。效果如下:
8.关键代码
Movecontroller.cs 程序代码 using UnityEngine; using System.Collections; public class MoveController : MonoBehaviour { void OnEnable() { EasyJoystick.On_JoystickMove += OnJoystickMove; EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd; } //移动摇杆结束 void OnJoystickMoveEnd(MovingJoystick move) { //停止时,角色恢复idle if (move.joystickName == "MoveJoystick") { animation.CrossFade("idle"); } } //移动摇杆中 void OnJoystickMove(MovingJoystick move) { if (move.joystickName != "MoveJoystick") { return; } //获取摇杆中心偏移的坐标 float joyPositionX = move.joystickAxis.x; float joyPositionY = move.joystickAxis.y; if (joyPositionY != 0 || joyPositionX != 0) { //设置角色的朝向(朝向当前坐标+摇杆偏移量) transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY)); //移动玩家的位置(按朝向位置移动) transform.Translate(Vector3.forward * Time.deltaTime * 5); //播放奔跑动画 animation.CrossFade("walk"); } } } Maincam.cs 程序代码 using UnityEngine; using System.Collections; public class MainCam : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI(){ int width = Screen.width - 100; int height = Screen.height - 20; if(GUI.Button(new Rect(width,height,100,20),"退出")){ Application.Quit(); } if(Application.platform == RuntimePlatform.Android &&(Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )){ Application.Quit(); } } }
毕设的文档我会传到我的资源里面让大家免费下载。论文下载链接:http://download.csdn.net/download/rain_butterfly/7626837
如有问题请留言,转载注明出处。