我正在Unity中创建第一人称控制器。非常基本的东西,相机是Player胶囊的子代。代码可以工作,但是我需要帮助来解释发生了什么。
*相机是层次结构中Player的子代
这些是我的问题:
在PlayerMovement中,当Unity在Y轴上时为什么要在Z轴上平移以实现垂直移动?
在CamRotation中,我不知道Update()
中发生了什么。为什么我们将水平运动应用于播放器,然后将垂直运动应用于相机?为什么不能将其应用于相同的GameObject?
mouseMove试图实现什么?我们为什么要使用var?
我认为我们已经获得了移动了多少鼠标的价值,但是对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
}
}
答案 0 :(得分:1)
XY是2D Unity游戏的平面。对于3D,您有Z轴表示高度,而XY平面表示位置。
请注意,正在应用与mouseMove
不同的组件(.x
使用character
,.y
使用camera
)。这意味着来自角色的移动不等于来自相机的移动;一个应该比另一个更快/更慢。
var
是预定义的C#关键字,可让编译器找出适当的类型。在这种情况下,就像您在Vector2
中写Vector2 mouseMove = new Vector2(...);
一样。
您正在缩放mouseMove
中的值,方法是将其分量乘以代码中的预定义值。就是这样。
编辑
您将.x
应用于字符,因为正如您在代码行后的注释中所述,您想水平移动它。至于相机,正在应用.y
是因为您要垂直移动它们。
负值可能是因为轴反转了,所以您将其设置为负值,以便摄像机自然运动。这是某些游戏在设置中允许您反转Y轴的相同原理。