河南理工大学电气工程与自动化学院毕业实习情况鉴定表
(由实习单位负责填写并加盖公章)
注:(每个学生填写一页)
毕业实习报告
实习单位:
实习时间: 至
学院(系):
专 业:
学生姓名: 学号:
年 月 日
S HENAN POLYTECHNIC UNIVERSITY 毕业实习报告用纸
毕业实习报告
一、实习目的
通过本次实习使我能够从理论高度上升到实践高度,更好的实现理论和实践的结合,为我以后的工作和学习奠定初步的知识。
通过本次实习,一方面能使我更加进一步了解公司的运转模式和员工的工作方式,另一方面也为我毕业后的工作打下坚实的基础,使我能更好的融入公司,更好的完成公司所要求的任务。
通过本次实习使我能够亲身感受到由一个学生转变到一个职业人的过程。
二、实习单位及岗位介绍
上海市第九城市:
“第九城市”是国内最大的网络游戏开发商和运营商之一,位于上海市浦东新区张江高科技园区碧波路690号3号楼,其旨在通过世界“第九艺术” —— 游戏艺术,为都市人创造一种全新的在线娱乐生活方式。在这个“城市”里:激情、活力、浪漫时时相伴;平等、尊重、关爱充溢其间。
至今为止,第九城市旗下的产品有《奇迹》(MU),《快乐西游》,《魔兽世界》(WOW),《卓越之剑》(GE),《奇迹世界》(SUN),《激战》(Guild Wars),《Hellgate: London》和《仙境传说2》(暂定名)。
岗位介绍:
在目前的这三个月中,我们在公司培训中心——上海市第九城市培训中心,在有十几年工作经验的老员工的带领下学习Unity 3D项目的建设;目前阶段是作为学员参加九城公司的培训实习。
三、实习内容及过程
3.1 Unity 3D 介绍
随着移动互联网的发展和游戏研发技术及PC硬件水平的提升,跨网、跨平台和跨终端的网络应用有了更大的拓展空间。在当前传统网游市场疲软的现状下,国内外厂商纷纷将视线转向了跨平台游戏领域。 近年来,网页游戏的发展趋势侧重于2D画面向3D的升级,3D页游已经被公认为将是该领域的主流形态。而基于Unity 3D引擎的画面和跨平台应用优势,在目前海内外渐成趋势的跨平台游戏领域,Unity 3D引擎显然是各大厂商关注的焦点。
接下来是它的脚本语言,unity3D的脚本语言在Unit3D游戏开发中占据了主角地位。它提供了三种脚本语言的支持:Javascript、C#、Boo。其中Boo是Python在.Net上的实现,unity3D通过Mono实现了.Net代码的跨平台。这样对数据库、xml、正则表达式等技术的支持都因为采用了.Net而得到完美的解决。脚本语言的动态特性让我们可以方便的通过名称、层次结构、tags 等方式访问所有的对象。更大的好处就是脚本语言的跨平台性,绝大部分平台相关的代码都放到了引擎的内部,而游戏内容相关的代码都可以跨平台执行,在游戏的制作过程中实现了跨平台。
时至今日,国内外跨平台游戏领域在不到一年时间内,已经涌现出数十款PC端的Unity 3D网游,而基于该引擎的手机游戏更是多达数百款。现在,业内在高品质3D页游的引擎选择上,有Adobe和Unity 3D两大引擎,Adobe是在它最新版Flash设定中,才开始支持3D引擎,而Unity 3D引擎在实际的应用上,已经在国内外陆续推出了数十款认可度颇高的3D页游。所以相对于其他游戏引擎来说,unity3D游戏引擎的发展还是很可观的。
3.2 实习内容
本次实习,公司给我们的是预期三个月的培训实习,在这三个月中,前半期是C、C#和Unity 3D软件的基础知识的巩固和提高,一方面帮助我们复习学校所学的基础知识,另一方面站在公司的项目制作的角度指导和纠正我们经常性的常识性错误,而后半期则是公司项目的熟悉、建设和纠正bug。在这段的实习培训中,我不仅仅巩固了在学校所学的C和C#的基本知识,更加慢慢的熟悉了C和C#在项目中结构的构架方式和程序的排布模式思想。
在目前的这三星期的实习中,我自己动手制作了一款简单游戏——“疯狂的小鸟”,其中包含了UI的登陆界面、注册界面和游戏界面。下面我就以自己这三星期的项目成果为例,为我的实习过程简单的描述一下:
3.21 UI的登陆界面
图(1)登陆界面
如图(1),在这个登陆UI的 设计过程中,我以C#语言为基础,利用Unity 3D软件建模,构成了这个登陆界面。
在这个页面的设计过程中,主要分UIManager,StartMenu ,RegisterMenu ,MessageMenu四个脚本模块,其中UIManager脚本模块主管页面布局设计,整体搭配等问题,是整个登陆系统的核心主板,起桥接联系其他版块的作用;StartMenu脚本模块主管LOGO的登陆问题,负责转接MessageMenu脚本模块和进入游戏的作用;RegisterMenu 脚本模块负责转接注册界面和联系登陆界面的作用;MessageMenu脚本模块是独立模块,负责处理登陆的各种信息的,是独立的信息处理模块。
其各脚本模块主要程序有:
UIManager:
public class UIManager : MonoBehaviour {
public static UIManager ui;
public List<GameObject> m_MenuPrefab = new List<GameObject>();
[HideInInspector]
public MenuState CurrentState;
[HideInInspector]
public MenuState PreState;
[HideInInspector]
public string MessageText;
void Start () {
ui = this;
CurrentState = MenuState.Start;
}
void Update () {
}
public void UpdateMenu(MenuState state)
{
PreState = CurrentState;
CurrentState = state;
Instantiate (m_MenuPrefab [(int)state]);
}
public void UpdateState(MenuState state)
{
PreState = CurrentState;
CurrentState = state;
}
}
public enum MenuState
{
Start,
Register,
Message,
}
StartMenu:
public class StartMenu : MonoBehaviour {
public Text Username;
public Text Password;
public void RegisterButton()
{
if (UIManager.ui.CurrentState != MenuState.Start)
return;
UIManager.ui.UpdateMenu (MenuState.Register);
}
public void LoginButton()
{
if (UIManager.ui.CurrentState != MenuState.Start)
return;
loginMessage();
UIManager.ui.UpdateMenu(MenuState.Message);
}
public void loginMessage()
{
if (NameIsNull(Username.text))
{
if (PasswordIsNull(Password.text))
{
UIManager.ui.MessageText = "登陆成功";
}
else
{
UIManager.ui.MessageText = "请输入密码";
}
}
else
{
UIManager.ui.MessageText = "请输入用户名";
}
}
private bool NameIsNull(string name)
{
if (name == "")
return false;
else
return true;
}
private bool PasswordIsNull(string password)
{
if (password == "")
return false;
else
return true;
}
}
MessageMenu :
public class MessageMenu : MonoBehaviour {
public Text Message;
void Start()
{
Message.text = UIManager.ui.MessageText;
}
public void CancelButton()
{
UIManager.ui.UpdateState(MenuState.Start);
Destroy(gameObject);
}
}
3.2.2 注册界面
图(2)注册界面
如图(2)是注册界面,附属于登陆界面,但是作为独特的注册界面,其设计与登陆界面差不多,只是表现的功能不同罢了,在注册页面的设计上,起作为信息的储存和与登录系统之间的相互反馈和信息传递,有了其独特的作用。与其功能实现主要脚本模块是RegisterMenu脚本模块,当然与UIManager,Start——Menu ,MessageMenu等脚本模块也是相关联的。
RegisterMenu:
public class RegisterMenu : MonoBehaviour {
public void CancelButton()
{
UIManager.ui.UpdateState (UIManager.ui.PreState);
Destroy (gameObject);
}
}
3.2.3 游戏界面
图(3)游戏界面
如图(3)游戏界面,这是我所设计游戏所达到的最终状态,其目前把“疯狂的小鸟”的基本游戏状态完美实现。当然这只是目前这个阶段的一个小结果,最终的成品项目还有待进一步的开发和完善,下面我就先把这半成品的设计来简单叙述一下:
在整个游戏的设计过程中,首先需要构思的是程序的整体构架问题,而对于这个项目,我们首先需要准备的是素材,例如小鸟,柱子,小白球,小猪,积木等,在准备完毕后,就可以开始设计了;在设计时,我们首先得把整体设计框架构思好吧,如小鸟的脚本模块-Bird_control,其得控制小鸟的飞行,撞击,计数等基本问题,小猪的脚本模块-PigScript,其得控制小猪的受撞击的力度,消失和计分等问题,照相机镜头转换脚本模块-CameraControl,其得控制相机的方向,转向和镜头远近大小问题等。在游戏设计中,这些组件,脚本模块既相互独立,又相互联系,并且在不断地调试过程中,才有了能完美运行的游戏项目。其主要程序如下:
Bird_control:
public class TestGravity : MonoBehaviour {
public GameObject[] obj;
public Transform[] path;
public static int i = 0;
public static TestGravity test;
void Start () {
test = this;
ItweenMove();
}
public void ItweenMove()
{
iTween.MoveTo(obj[i], iTween.Hash(
"path", path,
"time", 1f,
"easetype", iTween.EaseType.linear,
"oncomplete", "CompleteFunc",
"oncompletetarget", gameObject));
}
void CompleteFunc()
{
Debug.Log("123");
obj[i].GetComponent<Bird_control>().enabled = true;
}
void Update () {
}
}
PigScript:
public class PigScript : MonoBehaviour {
private Vector2 vec;
void Start () {
}
void Update () {
vec = rigidbody2D.GetPointVelocity(transform.position);
if (Mathf.Abs(vec.x) > 0.5f || Mathf.Abs(vec.y) > 0.5f)
{
Destroy(gameObject);
}
}
CameraControl:
public class CameraControl : MonoBehaviour {
private float scroll;
void Start () {
}
void Update () {
scroll = Input.GetAxis("Mouse ScrollWheel");
Camera.main.orthographicSize += scroll;
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize, 2.5f, 3.5f);
}
}
TestGravity :
public class TestGravity : MonoBehaviour {
public GameObject[] obj;
public Transform[] path;
public static int i = 0;
public static TestGravity test;
void Start () {
test = this;
ItweenMove();
}
public void ItweenMove()
{
iTween.MoveTo(obj[i], iTween.Hash(
"path", path,
"time", 1f,
"easetype", iTween.EaseType.linear,
"oncomplete", "CompleteFunc",
"oncompletetarget", gameObject));
}
void CompleteFunc()
{
Debug.Log("123");
obj[i].GetComponent<Bird_control>().enabled = true;
}
void Update () {
}
}
四、实习收获
在设计“疯狂的小鸟”的过程中,我失败了很多次,同样我也学到了很多,不仅仅是做项目的收获,更是以后生活、工作和学习方面收获。
4.1 项目总结
在做UI登陆界面时,原本我以为很简单事,结果在我做的时候,往往达不到我的预期,就像一开始的登陆和注册的跳转页面程序,我写的程序老是不响应或者红色报警,使我心情特别郁闷,中途差点直接放弃,结果在我查询无果,准备暂时放弃时,教我们的那个资深老员工大哥过来了,询问了一下我的详细情况,结果就是一个字母大小写误差,使我的程序始终事与愿违。在大哥说完之后,我当时真的不知道是兴奋还是羞愧,或许两者都有,兴奋是,烦恼终于解决了,羞愧是这么简单的问题我竟然没发现,而且还是一个非常显而易见的。从这件事中,我再一次发现了我经常烦的错误:心烦气躁和马虎大意。或许这也是我大学四年很难完美的做一件成功的事的直接原因,每次的反省,每次的重复犯错,使我一直有借口逃避自己的不完美。一字之差,就是成功与失败的差距,就是幸福与失落鲜明对比,所以对于即将毕业的我,从现在起,必须更加严格,更加严厉的要求自己,否则未来的自己依然是遗憾!
而当我在做游戏界面时,大约花费了一个星期,才达到现在的结果,由开始的一只小鸟组件没有限制的飞到可以确定方向的飞,再到在一定范围内蓄力后按确定路线做自由落体的飞,到现在可以提前预测路线的完美飞翔,经历了数次的调试和完善,使小鸟终于能勉强达到了我的要求;当然中间遇到了好多麻烦,也有使我差点疯狂的bug,而最终在我的不断调试、查询、询问同学和老师和百度下,达到了目前的状态。在这个过程中,我碰到的大多问题是,知道该则么写,但是不确定具体函数的应用,不明白具体函数的具体功能,使我总是事倍功半,达不到自己的预期,这一点充分说明了我自己在C#方面的基本功的薄弱和欠缺,需要空闲时间的大量补充才行;
在设计小鸟飞行路线时,重力二元二次函数的计算和调试,也差点使我放弃路线的设计。原因是算法和游戏演示总存在那个误差,调试好久也没能把握住诀窍,还差点是整个程序崩溃,当时也是我郁闷了好久,不过在最后的坚持下,还是摸索出了规律,使我完成了前期的预期的目标。在这个过程中,我再一次肯定了“码农”的耐心和不服输的韧性,所以今后的我会注重这方面的培养和锻炼,遇事不慌、不急和不燥,耐心的朝自己既定的目标走去,不论路途的种种阻隔,坚持自己的方向和目标。这个过程也充分体现了我们在学校所学知识的价值,体现了课堂上老师解题分析思路的重要性!
在设计小猪脚本时,我一开始想的是到时给小猪一个力,如果大于某一个特定值,就消失,并且计分,但是当我去写这句函数时,明明是很简单的一句函数,但是在与插件结合时,总是不那么完美,运行程序时总是达不到自己完美的预期。结果在多次调试无果后,问了一下叛变的同学,结果就是定义和插件结合那块,我漏了定义的范围要求,结果使我得不到自己的预期。在这件事中,我再次看到了自己的盲目自信,如果当初自己去查一下这个函数的具体要求和具体功能,或许就不会出现这样的乌龙事件,而我又能更快更好地完成既定的要求。
再设计照相机镜头时,总是不能很好的利用鼠标滚龙很好的控制镜头的大小,而当自己沉浸在查找各种资料时,结果同学从旁边过去,说了一个函数,结果省了一大摊子事,使我当时很兴奋,不过同时也明白了一个道理,互助的优势和结交同类人的优势。有时候有的事对别人很简单,所以有时候可以多多向别人学习,借鉴别人的优势,发扬自己的优势。
在整个设计过程中,比较突出的几件问题也就这些了,当然中间还有好多小问题,在这里就不详细叙说了。
4.2 实习总结
实习,就是把我们在学校所学的理论知识,运用到客观实际中去,使自己所学的理论知识有用武之地。只学不实践,那么所学的就等于零。理论应该与实践相结合。另一方面,实践可为以后找工作打基础。通过这段时间的实习,学到一些在学校里学不到的东西。因为环境的不同,接触的人与事不同,从中所学的东西自然就不一样了。要学会从实践中学习,从学习中实践。而且在中国的经济飞速发展,又加入了世贸,国内外经济日趋变化,每天都不断有新的东西涌现,在拥有了越来越多的机会的同时,也有了更多的挑战,前天才刚学到的知识可能在今天就已经被淘汰掉了,中国的经济越和外面接轨,对于人才的要求就会越来越高,我们不只要学好学校里所学到的知识,还要不断从生活中,实践中学其他知识,不断地从各方面武装自已,才能在竞争中突出自已,表现自已。
在实习期间,我看到了自己的问题所在,明白了知识除了学到就算那是不行的,会应用才是对知识的延伸和掌握,只要用心的去观察去学习也学到更多新的知识,尤其是对于我们本科毕业就准备工作的学生来说,能很好的学好一门技术更加重要。就像现在的我,选择的是程序编程方面,虽然我们专业也涉及C和JAVA方面的知识,但是我却是通过自己的课余时间练习单片机,练习JAVA等编程软件,使自己有了一定的编程能力,所以就借此优势直接准备一次为未来的职业发展方向,所以大学,对于我们来说是一个发展自己个人优势,发展个人性格的地方,我们应该好好的利用在大学的学习机会,努力为自己的未来就职铺好道路。
这以上是我对实习的一个直接理解,对于我的未来方向的一个定位。而在这一个月的实习中,我不仅仅学到了编程方面的专业性知识,更是亲身体会了我这个行业的具体运营模式,它不同于一般的电子厂,加工厂和超市、企业,它是一个充分体现个人与团体价值的地方。也是一个年轻人为自己奋斗的理想场所。对于现在一窍不通的我们,这更是一个学习和努力的地方,在这里,你可以充分发挥自己的想法,充分利用自己的时间去学习自己需要的东西。而对于未来的我们,编写自己喜欢的游戏,实例化自己喜欢的人或物,使自己身心在疲劳中享受着快乐,这或许就是我未来的目标。