Unity中第一人称控制器代码引起的问题

时间:2018-12-27 10:33:09

标签: c# unity3d

我正在Unity中创建第一人称控制器。非常基本的东西,相机是Player胶囊的子代。代码可以工作,但是我需要帮助来解释发生了什么。

first person controller

*相机是层次结构中Player的子代

hierarchy

这些是我的问题:

  1. 在PlayerMovement中,当Unity在Y轴上时为什么要在Z轴上平移以实现垂直移动?

  2. 在CamRotation中,我不知道Update()中发生了什么。为什么我们将水平运动应用于播放器,然后将垂直运动应用于相机?为什么不能将其应用于相同的GameObject?

  3. mouseMove试图实现什么?我们为什么要使用var?

  4. 我认为我们已经获得了移动了多少鼠标的价值,但是对Vector2.Scale进行处理又会如何呢?

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour {

    public float speed = 5.0f;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        float mvX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
        float mvZ = Input.GetAxis("Vertical") * Time.deltaTime * speed;
        transform.Translate(mvX, 0, mvZ);
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamRotation : MonoBehaviour {

    public float horizontal_speed = 3.0F;
    public float vertical_speed = 2.0F;
    GameObject character;  // refers to the parent object the camera is attached to (our Player capsule)

    // initialization
    void Start()
    {
        character = this.transform.parent.gameObject;
    }

    // Update is called once per frame
    void Update()
    {
        var mouseMove = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
        mouseMove = Vector2.Scale(mouseMove, new Vector2(horizontal_speed, vertical_speed));

        character.transform.Rotate(0, mouseMove.x, 0); // to rotate our character horizontally
        transform.Rotate(-mouseMove.y, 0, 0);  // to rotate the camera vertically
    }
}

1 个答案:

答案 0 :(得分:1)

  1. XY是2D Unity游戏的平面。对于3D,您有Z轴表示高度,而XY平面表示位置。

  2. 请注意,正在应用与mouseMove不同的组件(.x使用character.y使用camera)。这意味着来自角色的移动不等于来自相机的移动;一个应该比另一个更快/更慢。

  3. var是预定义的C#关键字,可让编译器找出适当的类型。在这种情况下,就像您在Vector2中写Vector2 mouseMove = new Vector2(...);一样。

  4. 您正在缩放mouseMove中的值,方法是将其分量乘以代码中的预定义值。就是这样。

编辑

您将.x应用于字符,因为正如您在代码行后的注释中所述,您想水平移动它。至于相机,正在应用.y是因为您要垂直移动它们。 负值可能是因为轴反转了,所以您将其设置为负值,以便摄像机自然运动。这是某些游戏在设置中允许您反转Y轴的相同原理。