首页 > 代码库 > 【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); }
运行:
缩放后: