开源的毕业设计—3D虚拟社区

       楼主今年刚毕业本着开源的精神把我的毕业设计开放源码,提供源码和设计文档的免费下载,算是这么多年对开发社区的一个回馈。

       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),"退出") 绘制长100100的矩形。

Application.Quit();  unity框架的退出程序接口函数。 

Input.GetKeyDown(KeyCode.Escape) 

Input.GetKeyDown(KeyCode.Home) 这两个接口函数主要是针对移动平台进行的优化和方便处理,按下Android下的返回键或者按下iosAndroid下的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://pan.baidu.com/s/1kTMFKzl 里面有Android端源码、Mac的xcode工程、apk、ipa安装文件

毕设的文档我会传到我的资源里面让大家免费下载。论文下载链接:http://download.csdn.net/download/rain_butterfly/7626837

如有问题请留言,转载注明出处。


  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值