在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);
}
缩放后:
【Unity 3D】学习笔记二十六:unity游戏脚本(六),布布扣,bubuko.com
【Unity 3D】学习笔记二十六:unity游戏脚本(六)
原文:http://blog.csdn.net/u013289188/article/details/36422197