Недавно начал следовать руководству по Unity, и сценарий для контроллера персонажа выглядит следующим образом:
Vector2 inputVector = new Vector2(0, 0);
if (Input.GetKey(KeyCode.W)) {
inputVector.y = +1;
}
if (Input.GetKey(KeyCode.S)) {
inputVector.y = -1;
}
if (Input.GetKey(KeyCode.A)) {
inputVector.x = -1;
}
if (Input.GetKey(KeyCode.D)) {
inputVector.x = +1;
}
inputVector = inputVector.normalized;
Vector3 moveDir = new Vector3(inputVector.x, 0f, inputVector.y);
transform.position += moveDir;
Debug.Log(inputVector);
Я понимаю, что «0f» означает, что 0 регистрируется как число с плавающей запятой, а не как целое число, но почему это необходимо в Vector3, а не в Vector2, хотя оба они требуют чисел с плавающей запятой?
Спасибо, СлучайныйКодEnjoyer
Для меня как разработчика Unity это странно, но это не так. Здесь, насколько я понимаю, они используют только inputVector для ввода с клавиатуры (для джойстика вам нужно будет изменить его на плавающее), а Keyboard only может быть -1, 0, 1, но еще раз повторяю, обычно так и будет, потому что правильнее использовать float, потому что вы можете захотеть увеличить количество устройств, а джойстик и джойстик на телефонах используют float.
Конструкторы Vector2
и Vector3
выглядят следующим образом:
public Vector2(float x, float y);
public Vector3(float x, float y, float z);
Поэтому совершенно не важно, как вы укажете цифру: 0
или 0f
. Число все равно будет преобразовано в float
.
В каких случаях важно явно указывать тип?
var x = 0f; // x is float
var i = 1; // i is int
var v1 = new Vector2(i / 2, 0); // v1.x = 0f
var v2 = new Vector2(i / 2f, 0); // v2.x = 0.5f
var v1 = new Vec2(0, 0); // Vec2(int x, int y) is called
var v2 = new Vec2(0, 0f); // Vec2(float x, float y) is called
var v3 = new Vec2(0f, 0f); // Vec2(float x, float y) is called
public class Vec2
{
public Vec2(int x, int y) => Console.WriteLine("Constructor for int");
public Vec2(float x, float y) => Console.WriteLine("Constructor for float");
}
«но почему это нужно в Vector3, а не в Vector2» нет :) Оба будут работать либо с
0
, либо с0f
.