首页 > 代码库 > 【Unity 3D】学习笔记二十六:unity游戏脚本(六)

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除。在unity中,Transform面板一共有3个属性:

Position  (位置)

Rotation(旋转)

Scale(缩放)

这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数。


Position  (位置)

任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标。一旦Vector33容器中的坐标发生变化,那么Scene视图中游戏对象位置也将发生变化。

这次总结学习的例子,使用GUI界面添加3个拖动条来分别控制X轴,Y轴,Z轴的坐标。

//立方体X轴位置
private var Value_X : float = 0.0f;
//立方体Y轴位置
private var Value_Y : float = 0.0f;
//立方体Z轴位置
private var Value_Z : float = 0.0f;
//立方体对象
private var obj : GameObject;


function Start()
{
	//得到立方体对象
	obj  = GameObject.Find("Cube");

}


function OnGUI()
{

	GUILayout.Box("移动立方体x轴");
	Value_X = GUILayout.HorizontalSlider(Value_X, -10.0f, 10.0f,GUILayout.Width(200));
	GUILayout.Box("移动立方体y轴");
	Value_Y = GUILayout.HorizontalSlider(Value_Y, -10.0f, 10.0f,GUILayout.Width(200));	
	GUILayout.Box("移动立方体z轴");
	Value_Z = GUILayout.HorizontalSlider(Value_Z, -10.0f, 10.0f,GUILayout.Width(200));
	
	//设置立方体的位置
	obj.transform.position = Vector3(Value_X,Value_Y,Value_Z);
	GUILayout.Label("立方体当前位置:" + obj.transform.position);
		
}
 

运行:


拖动各轴拖动条后:


在上述代码中,使用obj.transform.position = Vector3(Value_X,Value_Y,Value_Z)来引用得到obj游戏对象在三维坐标中的为重,存储在Vector3容器中。



Rotation(旋转)

游戏对象的旋转方式可分为两种:

自身旋转,沿着自身的X轴,Y轴,Z轴的坐标旋转。

围绕旋转,围绕着某一点坐标或者某一对象整体旋转。


//立方体对象
private var objCube : GameObject;
//圆柱体对象
private var objCylinder : GameObject;
//旋转速度
private var speed : int = 500;


function Start()
{
	//获得对象
	objCube = GameObject.Find("Cube");
	objCylinder = GameObject.Find("Cylinder");
}

function OnGUI()
{

		if(GUILayout.Button("立方体沿x轴旋转",GUILayout.Height(50)))
		{
			objCube.transform.Rotate(Vector3.right * Time.deltaTime * speed);
    	}
    
    	if(GUILayout.Button("立方体沿y轴旋转",GUILayout.Height(50)))
    	{
			objCube.transform.Rotate(Vector3.up * Time.deltaTime * speed);
    	}
    
    	if(GUILayout.Button("立方体沿z轴旋转",GUILayout.Height(50)))
    	{
			objCube.transform.Rotate(Vector3.forward * Time.deltaTime * speed);
    	}

    	if(GUILayout.Button("立方体围绕圆柱体旋转",GUILayout.Height(50)))
    	{
			objCube.transform.RotateAround(objCylinder.transform.position,Vector3.up ,Time.deltaTime * speed);
    	}
    	
		GUILayout.Label("立方体旋转角度"+objCube.transform.rotation);


}


运行:



点击按钮后:



自身的旋转调用transform.Rotate(  )方法。围绕这某一对象选择调用transform.RotateAround(  )方法




平移游戏对象

一般实现游戏对象的平移用transform.Translate(  )方法来实现。

//立方体对象
var obj : GameObject;
//平移速度
var speed : int = 1;

function Start()
{
	//获得立方体对象
	obj = GameObject.Find("Cube");
}

function Update () 
{

}

function OnGUI()
{
	if(GUILayout.Button("向前移动",GUILayout.Height(50)))
	{
	
		obj.transform.Translate(Vector3.forward * Time.deltaTime * speed);
	}
	
	if(GUILayout.Button("向后移动",GUILayout.Height(50)))
	{
	
		obj.transform.Translate(-Vector3.fwd * Time.deltaTime * speed);
	}
	
	if(GUILayout.Button("向左移动",GUILayout.Height(50)))
	{
	
			obj.transform.Translate(Vector3.left * Time.deltaTime * speed);
	}
	
	if(GUILayout.Button("向右移动",GUILayout.Height(50)))
	{
		
		obj.transform.Translate(Vector3.right * Time.deltaTime * speed);
	}
	
	GUILayout.Label("立方体的位置:"+obj.transform.position);
}

运行:


平移后:




Scale(缩放)

在unity中,缩放主要有三种方式:

沿X轴缩放

沿Y轴缩放

沿Z轴缩放

每个轴都有自身的缩放系数,系统默认的缩放系数是1,就是原有大小,因此实现游戏对象的缩放实际上就是动态修改游戏对象的缩放系数。

仿照改变游戏对象位置的代码:

//立方体对象
private var obj : GameObject;
//初始化缩放比例
private var ScaleX : float = 1.0;

private var ScaleY : float = 1.0;

private var ScaleZ : float = 1.0;

function Start()
{
	//得到立方体对象
	obj  = GameObject.Find("Cube");

}


function OnGUI()
{

	GUILayout.Box("x轴缩放");
	ScaleX = GUILayout.HorizontalSlider(ScaleX, 1.0, 2.0,GUILayout.Width(100));

	GUILayout.Box("y轴缩放");
	ScaleY = GUILayout.HorizontalSlider(ScaleY, 1.0, 2.0,GUILayout.Width(100));

	GUILayout.Box("z轴缩放");
	ScaleZ = GUILayout.HorizontalSlider(ScaleZ, 1.0, 2.0,GUILayout.Width(100));
	
	//重新计算缩放比例
	obj.transform.localScale = Vector3(ScaleX,ScaleY,ScaleZ);
		
}

运行:


缩放后: