首页 > 代码库 > 奥东......GameObject的旋转
奥东......GameObject的旋转
Transform脚本控制游戏对象的变换
任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的
目标: 代码动态修改模型变换的数值
结论: obj.transform.position引用得到obj游戏对象在三维坐标系中的位置,直接修改position容器的数值即可修改模型的位置
改变游戏对象的位置position
3D的世界中,任何一个模型的三维坐标都保持在Vector3容器中,容器将记录模型在x,y,z轴方向的坐标
private float Value_x = 0.0f;
private float Value_y = 0.0f;
private float Value_z = 0.0f;
private GameObject obj; // 立方体对象
// Use this for initialization
void Start()
{
obj = GameObject.Find("Cube");
}
void 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 = new Vector3(Value_x,Value_y,Value_z);
GUILayout.Label("立方体的当前位置" + obj.transform.position);
}
旋转游戏对象Rotate
旋转方式分为两种:
第一种是自身旋转,沿着x,y,z轴旋转
第二种是 围绕旋转 围绕坐标系的某一点或某一个游戏对象整体来做旋转
Transform.Rotate(); 用于设置模型绕自身旋转,参数为速度和方向
Transform.RotateAround();用于设置模型围绕某一个点旋转
Time.deletaTime : 用于记录上一帧所消耗的时间,这里用作模型旋转的速度系数
Vector3.right x轴方向
Vector3.up y轴方向
Vector3.forward z轴方向
private GameObject objCube;
private GameObject objCylinder;//圆柱体对象
private int speed = 500;
// Use this for initialization
void Start () {
objCube = GameObject.Find("Cube");
objCylinder = GameObject.Find("Cylinder");
}
void 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);
}
平移对象游戏对象Translate()
平移的含义就是在原有位置的基础上进行平移,唯一参数为平移模型的方向
private GameObject objCube;
// Use this for initialization
void Start()
{
objCube = GameObject.Find("Cube");
}
void OnGUI() {
if( GUILayout.Button("向前移动",GUILayout.Height(50))){
objCube.transform.Translate(Vector3.forward * Time.deltaTime * 20);
}
if (GUILayout.Button("向后移动", GUILayout.Height(50)))
{
objCube.transform.Translate(-Vector3.fwd * Time.deltaTime * 20);
}
if (GUILayout.Button("向左移动", GUILayout.Height(50)))
{
objCube.transform.Translate(Vector3.left * Time.deltaTime * 20);
}
if (GUILayout.Button("向右移动", GUILayout.Height(50)))
{
objCube.transform.Translate(Vector3.right * Time.deltaTime * 20);
}
//立方体的旋转角度
GUILayout.Label("立方体的位置" +objCube.transform.position);
}
缩放游戏对象localScale()
private float scale_x = 0.0f;
private float scale_y = 0.0f;
private float scale_z = 0.0f;
private GameObject obj; // 立方体对象
// Use this for initialization
void Start()
{
obj = GameObject.Find("Cube");
}
void OnGUI() {
GUILayout.Label("x轴缩放");
scale_x = GUILayout.HorizontalSlider(scale_x,1.0f, 2.0f, GUILayout.Width(100));
GUILayout.Label("y轴缩放");
scale_y = GUILayout.HorizontalSlider(scale_y, 1.0f, 2.0f, GUILayout.Width(100));
GUILayout.Label("z轴缩放");
scale_z = GUILayout.HorizontalSlider(scale_z, 1.0f, 2.0f, GUILayout.Width(100));
//重新计算缩放比例
obj.transform.localScale = new Vector3(scale_x, scale_y, scale_z);
}
每个轴都有自身的缩放系数,模型默认的缩放系数是1,就是模型原有的大小
对象的Transform(变化属性),Rigidbody(刚体属性)
var gameObject : GameObject; //声明了一个游戏对象
function Update () {
gameObject.transform.rotate(20,0,0);//绕x轴旋转20°
gameObject.transform.Translate(0,01);//每帧向前移动一个单位长度
}
ITween中的ValueTo()也就是值方法
ValueTo:返回一个"from"和"to"之间的插值,以调用"onupdate"回调函数、onupdate回调是必须的,且它接收一个与“from”和“to”相同类型的参数
支持的值类型:float,double,Vector3,Vector2,Color,Rect
在Update()中调用的值的方法:FloatUpdate,Vector3Update,Vector2Update,RectUpdate
这些方法返回一个在提供的两个值之间的插值,大小变化根绝提供的速度
Tip1:
gameObject.transform.Rotate(Vector3.forward * -100);//这里是旋转多少角度,而不是旋转到目标角度
奥东......GameObject的旋转