Unity 3D之使用GameObject创建简单的可移动的对象
在Unity 3D上开发游戏,需要游戏脚本与3D建模相结合,将写好的脚本拖曳到3D对象里从而实现效果。
下面是一个小实例,使用Unity 3D实现一个可控制移动的小人,小人可以向前、向后、向左和向右移动。
1、通过 File - > New Scene 创建一个场景;
2、点击Create -> Create Empty 创建一个GameObject,它即是游戏对象;
3、在Inspector 面板里将此对象的名字改为 “hero” (记得按回车键),等一下再脚本中将通过此名字来与查找此对象,如下图:
4、点击Add Component ,选择Mesh -> Mesh Renderer ,如下图所示:
5、再次点击 Add Component,添加Mesh -> Mesh Filter
6、点击Mesh Filter 里的小按钮,在弹出的页面里选择Quad
7、在Project中创建文件夹Resources,并在其中创建四个文件夹:forward,back,right,left,这四个文件夹用于放置图片文件;
创建文件:2d.js,并使用编辑器打开,代码如下:
<strong><span style="font-size:18px;color:#ff0000;">#pragma strict private var hero : GameObject; //贴图数组 private var forward : Object[]; private var left : Object[]; private var right : Object[]; private var back : Object[]; //人物行走图计数器 private var counter : int; //每秒的帧数 private var fps : float = 2; //限制帧的时间 private var time : float = 0; //判断按钮是否被按下的布尔值 private var keyForward : boolean; private var keyBack : boolean; private var keyLeft : boolean; private var keyRight : boolean; //当前贴图数组 private var anim : Object[]; //当前方向 private var pointer : int = 1; //方向向量的值,即速度的大小 private var f : float = 0.001f; function Start() { hero = GameObject.Find("hero"); forward = Resources.LoadAll("woman/forward"); left = Resources.LoadAll("woman/left"); right = Resources.LoadAll("woman/right"); back = Resources.LoadAll("woman/back"); anim = forward; counter = 0; } function OnGUI(){ GUILayout.BeginHorizontal(); //四个按钮水平排列 keyForward = GUILayout.RepeatButton("向前"); keyLeft = GUILayout.RepeatButton("向左"); keyRight = GUILayout.RepeatButton("向右"); keyBack = GUILayout.RepeatButton("向后"); GUILayout.EndHorizontal(); //判断按钮的按钮 if(keyForward) { setAnimation(1,forward); hero.transform.Translate(Vector3.forward * f); } if(keyLeft) { setAnimation(2,left); hero.transform.Translate( - Vector3.right * f); } if(keyRight) { setAnimation(3,right); hero.transform.Translate(Vector3.right * f); } if(keyBack) { setAnimation(4,back); hero.transform.Translate(Vector3.back * f); }//*/ //判断当前方向 switch(pointer) { case 1: hero.transform.Translate(-Vector3.forward * f); break; case 2: hero.transform.Translate(-Vector3.right * f); break; case 3: hero.transform.Translate(Vector3.right * f); break; case 4: hero.transform.Translate(Vector3.forward * f); break; } //响应动画 HandleAnimation(anim); } function setAnimation(p : int,o:Object[]) { pointer = p; //指定方向为 p anim = o; //指定贴图数组 } function HandleAnimation(tex:Object[]) { //计算限制帧时间 time += Time.deltaTime; //超过限制帧则切换图片 if(time >= 1.0 / fps) { counter++; time = 0; if(counter >= anim.length){ counter = 0; } } //将相应的贴图赋予主角对象 hero.renderer.material.mainTexture = tex[counter]; var rect : Rect = Rect(100,100,32,48); GUI.DrawTexture(rect,tex[counter],ScaleMode.StretchToFill,true,0); //一旁的缩略对象 } </span></strong>
8、保存后,将文件拖曳给hero;
9、如图,给Mesh Renderer选择材质
10、通过调整摄像机和hero的位置,使摄像机能看到hero;
11、运行:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。