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 里的小button,在弹出的页面里选择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;
//推断button是否被按下的布尔值
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(); //四个button水平排列
	keyForward  = GUILayout.RepeatButton("向前");
	keyLeft 	= GUILayout.RepeatButton("向左");
	keyRight 	= GUILayout.RepeatButton("向右");
	keyBack 	= GUILayout.RepeatButton("向后");
	GUILayout.EndHorizontal();
	//推断button的button
	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、执行:



版权声明:本文博主原创文章。博客,未经同意不得转载。

转载于:https://www.cnblogs.com/lcchuguo/p/4806170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值