C# 在Unity 2D中移动简单对象

C# 在Unity 2D中移动简单对象,c#,unity3d,C#,Unity3d,我试图在Unity中移动一个简单的对象,但收到以下错误消息: 无法修改unityengine.transform.position的返回值,因为itar不是变量 这是我的密码: using UnityEngine; using System.Collections; public class walk : MonoBehaviour { // Use this for initialization void Start () { } // Update is

我试图在Unity中移动一个简单的
对象
,但收到以下错误消息:

无法修改unityengine.transform.position的返回值,因为itar不是变量

这是我的密码:

using UnityEngine;
using System.Collections;

public class walk : MonoBehaviour {
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        float movespeed = 0.0f;
        movespeed++;
        transform.position.x  = transform.position.x + movespeed;

    }
}

不能直接在
position
上分配
x
值,因为它是从属性getter返回的值类型。(见:)

相反,您需要分配一个新的
Vector3
值:

transform.position = new Vector3(transform.position.x + movespeed, transform.position.y);
或者,如果保持大多数坐标值不变,则可以使用
Translate
方法相对移动:

transform.Translate(movespeed, 0, 0)

与Chris的回答相比有一点改进:

transform.position = new Vector2(transform.position.x + movespeed * Time.deltaTime, transform.position.y);

Time.deltaTime
两帧之间的时间量-此乘法意味着无论播放器的计算机有多快或多慢,速度都是相同的。

位置的X属性似乎是不可变的,您可以指定一个新的位置值吗?例如
transform.position=新位置(transform.position.x+movespeed,transfrom.position.y)错误CS0246:找不到类型或命名空间名称“Position”(是否缺少using指令或程序集引用?)(CS0246)(程序集CSharp)所有此类问题都应使用
unity3d
标记。标签
unity
代表完全不同的事物。使用前请先了解这些标签。它可以正常工作,但还有一个问题,因为在我按“玩游戏”后,该对象会直接消失。@Nawaf您的计算机太快了!将movespeed乘以
Time.deltaTime
,使其在所有CPU速度上保持一致。