• 奥东......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);//这里是旋转多少角度,而不是旋转到目标角度
  • 相关阅读:
    [日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况
    [视频教程] 基于redis的消息队列实现与思考
    [日常] 项目中业务绑定手机验证手机号的实现
    [视频教程] 使用docker的方式安装redis
    [前端] js中call方法的理解和思考
    [日常] Redis中set集合的使用思考
    [日常] 跨语言的POST请求问题的解决
    [PHP] 基于redis的分布式锁防止高并发重复请求
    [日常] 安装windows+deepin双系统
    [视频教程]利用SSH隧道进行远程腾讯云服务器项目xdebug调试
  • 原文地址:https://www.cnblogs.com/nauy/p/4073842.html
Copyright © 2020-2023  润新知