首页 > 代码库 > [U3D 画起重机,绑脚本和控制它运动的基本操作]

[U3D 画起重机,绑脚本和控制它运动的基本操作]

之前在学习Unity3D,不知为何网上的教学资源真是少啊...我某段时间还卡在不知如何让物体绑个脚本自动运动。。

之所以要学习U3D是因为导师让我做的IOS项目里有个需要模拟起重机,从而控制真实起重机的动画(为何不是挖掘机)。。。

这里就总结下U3D的基础知识。

==================================================

1.Unity画物体

在左边的Hierarchy(层次)表处,找到Create,然后选择Cube。Mac系统也可以从上面菜单栏选择GameObject创建。

Cube就是立方体。

创建完成后,点击该物体,在右边inspector设置长宽高,xyz轴,粗细等,自己搭个起重机吧,这种怎么放真是靠天分的。。

   

 

差不多就是这样。期间光源和摄像机角度要自己调整好。

 

2.给物体绑定脚本。

在下方Assets文件夹右键新建js脚本,复制下面的。

// 0==STOP,1==FORWARD,2==BACKvar Move=0;//绘制UI界面function OnGUI(){      //设置GUI背景色      GUI.backgroundColor = Color.red;      if(GUI.Button(Rect(10,10,70,30),"向前移动")){      	Move=1;    	/*        //向前移动          if(transform.position.x<10){        	transform.position.x+=0.1;          }*/    }      if(GUI.Button(Rect(10,50,70,30),"向后移动")){  		Move=2;  		/*        //向后移动          if(transform.position.x>-9.5){       	 transform.position.x-=0.1;         	 }*/    }        //显示模型位置信息      GUI.Label(Rect(250,10,200,30),"模型位置"+transform.position);      }  function setxPosition(message:String){	var xPosition=parseFloat(message);	transform.position.x=xPosition;}function Start(){	setxPosition("-5");}function Update(){	switch(Move){		case 0:			break;		case 1:		    if(transform.position.x<10){				transform.Translate(Time.deltaTime * 1, 0, 0);			}			break;		case 2:       		if(transform.position.x>-9.5){				transform.Translate(Time.deltaTime * -1, 0, 0);			}			break;		default:			break;		}	}

绑到想要绑定的物体上,如果想要绑定多个物体,比如我绑定的是中间那根杆子,绳子(cube模拟的),和下面的重物,让他们一起向前移动,就GameObject新建一个Empty的,然后把3个拖进去合并成一个再设定。

绑定脚本:直接把脚本拖到该物体的inspector就OK了。

3.研究下脚本:

代码里,OnGUI()函数创建了2个按钮,用来给用户控制,Update()函数是每帧都刷新的,这样的话,可以实现通过点击按钮来设置它的运动模式,下一帧挖掘机就会超你设定的方向走。

不过这里没写停止的按钮,所以根本停不下来...

当然我设置了一些边界,以防起重机散架。。。- -

 

4.获取GameObject(获取吊钩和绳子,让它俩上升下降)

// 0==STOP,1==UP,2==DOWNvar Move=0;function OnGUI(){      //设置GUI背景色      GUI.backgroundColor = Color.red;          if(GUI.RepeatButton(Rect(10,190,70,30),"下降吊钩")){        Move=1;    /*        //下降吊钩          shengzi.localScale.y+=0.05;        shengzi.position.y-=0.025;        gouzi.position.y-=0.05;    */    }      if(GUI.RepeatButton(Rect(10,230,70,30),"上升吊钩")){         Move=2;         //上升吊钩          /*        if(gouzi.position.y<19){            shengzi.localScale.y-=0.05;            shengzi.position.y+=0.025;                gouzi.position.y+=0.05;        }*/    }  }  function MoveUp(){    Move=1;}function MoveDown(){    Move=2;}function setyPosition(message:String){    var yHeight=parseFloat(message);    var shengzi = transform.Find("shengsuo");    var gouzi = transform.Find("gouzi");    shengzi.localScale.y=(20-yHeight);    shengzi.position.y=20-(20-yHeight)/2;    gouzi.position.y=yHeight;}function Start(){    setyPosition("15");}function Update(){    var shengzi = transform.Find("shengsuo");    var gouzi = transform.Find("gouzi");    switch(Move){        case 0:            break;        case 1:            if(gouzi.position.y>0){                shengzi.localScale.y+=0.05;                shengzi.position.y-=0.025;                gouzi.position.y-=0.05;            }            break;        case 2:               if(gouzi.position.y<19){                shengzi.localScale.y-=0.05;                shengzi.position.y+=0.025;                    gouzi.position.y+=0.05;            }            break;        default:            break;        }    }

首先,这段代码正确的地方是获取物体的方式,网上实在不好找:

var shengzi = transform.Find("shengsuo");
"shengsuo"是创建的GameObject的名字。

至于为什么要用这些乱七八糟的数字,是因为我不知道把绳子某段设为中心点,一旦长度修改了,其伸长是向两端的,所以为了模拟下降,就把重心位置一直向下改。。谁看到了知道的话就在评论区教教我吧。3Q.

 

最后的效果:

[U3D 画起重机,绑脚本和控制它运动的基本操作]