无法将类型'(float xpos,int,int)'隐式转换为'UnityEngine.Vector3'

问题描述 投票:-1回答:2

当我尝试运行此命令时,我是新来的,它给了我错误无法将类型'(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);
    }
}
}
c# unity3d compiler-errors game-engine
2个回答
0
投票

您在第一个transform.postion上缺少构造函数。应该是:

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

0
投票

好的,

您的问题是这个陈述

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;

© www.soinside.com 2019 - 2024. All rights reserved.