Ваш код ввода правильный, но все еще пара вещей, которые находятся не в нужном месте. Сначала вы написали инициализатор (статический метод) вне любой функции. Помните, когда вы делаете это в Unity3d C#, тогда он всегда будет давать вам предупреждение/ошибку.
Если вы используете C#, не используйте эту функцию в инициализаторах конструктора или поля, вместо этого переместите инициализацию в функцию Awake или Start.
Итак, сначала переместите такие линии в обе функции.
Во-вторых, вы получаете Vector3
и пытаетесь использовать его как ссылку, это означает, что вы получили ссылку на позицию в форме Vector3
, и каждое изменение, сделанное в этой переменной, будет эффективным, это не так, это не будет ,
Но да, вы можете сделать это, получив Transform
или GameObject
, они сделают это за вас.
В-третьих, вы пытаетесь изменить компонент Vector3
(«x» в вашем случае), что также неприемлемо для Unity. То, что вы можете сделать, - либо назначить позицию с new Vector3
, либо создать отдельную переменную Vector3
, изменить ее, а затем присвоить ее позиции.
Таким образом, после всех этих адресов ваш код должен быть похожим на это,
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour
{
Transform player;
// Use this for initialization
void Start()
{
player = GameObject.FindGameObjectWithTag ("Player").transform;
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown (KeyCode.D)) {
// Remove one of these two implementations of changing position
// Either
Vector3 newPosition = player.position;
newPosition.x += 0.01f;
player.position = newPosition;
//Or
player.position = new Vector3 (player.position.x + 0.01f, player.position.y, player.position.z);
}
}
}
Спасибо за подробный ответ! Я изменил свой код для каждого направления. :) – Jon