首页 > 代码库 > 奥东......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的旋转