当我尝试运行此命令时,我是新来的,它给了我错误无法将类型'(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);
}
}
}
您在第一个transform.postion
上缺少构造函数。应该是:
transform.position = new Vector3(xpos, 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;