Не удается неявно преобразовать тип «(float xpos, int, int)» в «UnityEngine.Vector3» - PullRequest
0 голосов
/ 31 января 2020

Я новичок в единице, когда я пытаюсь запустить это, это выдает мне ошибку Не могу неявно преобразовать тип '(float xpos, int, int)' в 'UnityEngine.Vector3'

Это мой код

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

public class Player : MonoBehaviour
{
[SerializeField]
private float _speed = 3.5f;
// Start is called before the first frame update
void Start()
{
    transform.position = new Vector3(0, 0, 0);
}

// Update is called once per frame
void Update()
{
    //variables
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");
    float xpos = transform.position.x ;



    Vector3 direction = new Vector3(horizontalInput, verticalInput, 0);
    transform.Translate(direction * _speed * Time.deltaTime);

    if (transform.position.y >= 0)
    {
        transform.position = (xpos, 0, 0);
    }
    else if (transform.position.y <= -3.8f)
    {
        transform.position = new Vector3(xpos, -3.8f, 0);
    }
}
}

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Хорошо,

Ваша проблема в этом утверждении

transform.position = (xpos, 0, 0);

Здесь компилятор исключает объект с точно таким же типом, как transform.position справа от оператора присваивания (=) , что Vector3. Но когда вы присваиваете что-то вроде float, string или что-то еще, это сбивает с толку и выдает ошибку, конечно, если два типа совместимы как flot = int, это не будет проблема. Это то, что происходит здесь, когда вы вводите компилятор для типа объекта, который не определен ни в компиляторе, ни в проекте. Присвоение объекта другому объекту есть много способов сделать это.

1). Здесь я создаю новый объект Vector3, вызывая его функцию-конструктор с ключевым словом new.

transform.position = new Vector3(xpos, 0, 0)

2). Здесь у вас уже есть объект, созданный в начале программы, и вы можете изменить его по своему усмотрению, а затем назначить.

Vector3 position = new Vector3(0, 0, 0);
.
.
transform.position = position;

3). И последнее, вы можете напрямую назначить свойство одного объекта другому объекту

transform.position = transform2.position;

0 голосов
/ 31 января 2020

Вы пропустили конструктор на вашем первом transform.postion. Должно быть:

transform.position = new Vector3(xpos, 0, 0);
...