C# 在Unity 2D中移动简单对象
我试图在Unity中移动一个简单的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
对象
,但收到以下错误消息:
无法修改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速度上保持一致。