深圳Unity3D培训
达内深圳龙华中心

185-8926-6248

热门课程

【深圳Unity3D培训】Unity3D Player角色移动控制脚本

  • 时间:2017-09-06 16:12
  • 发布:深圳Unity3D培训
  • 来源:达内新闻

【深圳Unity3D培训】Unity3D Player角色移动控制脚本

1. 简介

在Unity3D中,有多种方法能够转变物体的坐标,完成移动的目标,其本色是每帧改动物体的position。我针对脚色移动做了一下清点,并给出了一些罕用移动API的剧本,每一个剧本均手打测试可用.

2. 经由过程Transform组件移动物体

Transform组件用于描写物体在空间中的状况,它包含 地位(position) , 扭转(rotation) 和 缩放(scale) 。 实在所有的移动都邑招致position的转变,这里所说的经由过程Transform组件来移动物体,指的是间接操纵Transform来节制物体的 地位(position) 。

2.1 Transform.Translate

该办法能够将物体从以后地位,移动到指定地位,而且能够抉择参照的坐标系。 当必要停止坐标系转换时,能够斟酌利用该办法以省去转换坐标系的步调。

public float m_speed = 5f;//Translate移动节制函数
    void MoveControlByTranslate()

    {        if (Input.GetKey(KeyCode.W)|Input.GetKey(KeyCode.UpArrow)) //前

        {            this.transform.Translate(Vector3.forward*m_speed*Time.deltaTime);

        }        if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //后

        {            this.transform.Translate(Vector3.forward *- m_speed * Time.deltaTime);

        }        if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //左

        {            this.transform.Translate(Vector3.right *-m_speed * Time.deltaTime);

        }        if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //右

        {            this.transform.Translate(Vector3.right * m_speed * Time.deltaTime);

        }
    }

或者

//Translate移动节制函数
    void MoveControlByTranslateGetAxis()

    {        float horizontal = Input.GetAxis("Horizontal"); //A D 阁下

        float vertical = Input.GetAxis("Vertical"); //W S 上 下

        transform.Translate(Vector3.forward * vertical * m_speed * Time.deltaTime);//W S 上 下

        transform.Translate(Vector3.right * horizontal * m_speed * Time.deltaTime);//A D 阁下

    }

2.2 Vector3.Lerp, Vector3.Slerp, Vector3.MoveTowards

Vector3既能够表现三维空间中的一个点,也能够表现一个向量。这三个办法均为插值办法, Lerp 为线性插值, Slerp 为球形插值, MoveTowards 在Lerp的基础上增加了限定最大速率功效。 当必要从指定A点移动到B点时,能够斟酌时刻这些办法。

2.3 Vector3.SmoothDamp

该办法是能够平滑的从A渐渐移动到B点,而且能够节制速率,最罕见的用法是相机追随目标。

2.4 Transform.position

偶然从新赋值position能更快完成咱们的目标。

3. 经由过程Rigidbody组件移动物体

Rigidbody组件用于模仿物体的物理状况,好比物体受重力影响,物体被碰撞后的击飞等等。

留意:对于Rigidbody的挪用均应放在FixedUpdate办法中,该办法会在每一次履行物理模仿前被挪用。

3.1 Rigidbody.velocity

设置刚体速率能够让物体活动而且疏忽静摩擦力,这会让物体疾速从运动状况进入活动状况。

//Velocity移动节制函数
    void MoveControlByVelocity()

    {        float horizontal = Input.GetAxis("Horizontal"); //A D 阁下

        float vertical = Input.GetAxis("Vertical"); //W S 上 下

        //这个必需离开断定 由于一个物体的速率只有一个

        if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.S))

        {

            m_rigidbody.velocity = Vector3.forward * vertical * m_speed;

        }        if (Input.GetKey(KeyCode.A)|Input.GetKey(KeyCode.D))

        {

            m_rigidbody.velocity = Vector3.right * horizontal * m_speed;

        }   

    }

3.2 Rigidbody.AddForce

给刚体增加一个偏向的力,这类方法得当模仿物体在外力的感化下的活动状况。

//AddForce移动节制函数

    void MoveControlByAddForce()

    {        float horizontal = Input.GetAxis("Horizontal"); //A D 阁下

        float vertical = Input.GetAxis("Vertical"); //W S 上 下

        m_rigidbody.AddForce(Vector3.forward * vertical * m_speed);

        m_rigidbody.AddForce(Vector3.right * horizontal * m_speed);  

    }

3.3 Rigidbody.MovePosition

刚体遭到物理束缚的情况下,移动到指定点。

4. 经由过程CharacterController组件移动物体

CharacterController用于节制第一人称或第三人称脚色的活动,利用这类方法能够模仿人的一些行动,好比限定脚色爬坡的最大斜度,措施的高度等。

4.1 CharacterController.SimpleMove

用于模仿简略活动,而且主动利用重力,前往值表现脚色以后能否着地。

//SimpleMove移动节制函数 脚色节制器
    void MoveControlBySimpleMove()
    {        float horizontal = Input.GetAxis("Horizontal"); //A D 阁下
        float vertical = Input.GetAxis("Vertical"); //W S 上 下

        m_character.SimpleMove(transform.forward * vertical * m_speed);
    }

4.2 CharacterController.Move

模仿更繁杂的活动,重力必要经由过程代码完成,前往值表现脚色与四周的碰撞信息。

//Move移动节制函数 脚色节制器

    void MoveControlByMove()

    {        float horizontal = Input.GetAxis("Horizontal"); //A D 阁下

        float vertical = Input.GetAxis("Vertical"); //W S 上 下

        float moveY = 0; m_gravity=10f;

        moveY-= m_gravity * Time.deltaTime;//重力

        m_character.Move(new Vector3(horizontal, moveY, vertical) * m_speed * Time.deltaTime);

    }

想知道更多关于IT行业的信息吗?想远远不如行动,行动起来,一起加入达内,一起进入IT行业,跟着达内的脚步,一起走进如今的互联网信息时代,带给你不一样的色彩生活——【深圳Unity3D培训

深圳达内

上一篇:【深圳Unity3D培训】Unity3D内部脚本的工作原理
下一篇:【深圳Unity3D培训机构】AR教育相对于传统教育的特点和优势

马上预约三天免费体验课

姓名:

电话:

增强现实技术(AR)及扩展应用

【深圳Unity3D培训】了解AssetBundle

【深圳Unity3D培训】基于Socket通信的小实例

【深圳Unity3D培训】为什么最近好多游戏公司都倒闭了?10个理由

选择城市和中心
贵州省

广西省

海南省