在Unity 2D中移动简单物体

11

我正试图在Unity中移动一个简单的Object,但是我收到以下错误信息:

无法修改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;

    }
}

1
似乎位置的X属性不可变,你能否分配一个新的Position值呢?例如:transform.position = new Position(transform.position.x + movespeed, transfrom.position.y); - James
错误 CS0246:找不到类型或命名空间名称为 'Position'(是否缺少 using 指令或程序集引用?)(CS0246) (Assembly-CSharp) - Nawaf
所有这样的问题都应该使用“unity3d”标签。标签“unity”是用于完全不同的东西。在使用它们之前,请学习标签。 - Lex Li
2个回答

26

由于它是从属性获取器返回的值类型,因此无法直接在position上分配x值。(参见:Cannot modify the return value error c#)

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

transform.position = new Vector3(transform.position.x + movespeed, transform.position.y);

或者,如果您保留了大部分坐标值,可以使用Translate方法来相对移动:

transform.Translate(movespeed, 0, 0)

它可以正常工作,但是还有另一个问题,因为当我按下“播放游戏”按钮后,对象会直接消失。 - Nawaf
@Nawaf,你的电脑太快了!将移动速度乘以“Time.deltaTime”以保持在所有CPU速度上均匀。 - Dr-Bracket

2
稍微改进一下Chris的回答:
transform.position = new Vector2(transform.position.x + movespeed * Time.deltaTime, transform.position.y);

Time.deltaTime 表示两帧之间经过的时间 - 这个乘法意味着无论玩家的电脑速度快慢,速度都将保持不变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接