Ваш входной код правильный, но все же пара вещей не на своем месте. Сначала вы написали инициализатор (статический метод) вне какой-либо функции. Помните, что когда вы делаете это в Unity3d C#, это всегда будет выдавать вам предупреждение/ошибку.
Если вы используете C#, не используйте эту функцию в конструкторе или инициализаторах полей. Вместо этого переместите инициализацию в функцию пробуждения или запуска.
Итак, сначала переместите такие строки в любую из функций.
Во-вторых, вы получаете 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);
}
}
}
person
Hamza Hasan
schedule
19.02.2016