C# 我在2D Unity游戏中使用C时出错,说我的5个名字;“在当前上下文中不存在”;

C# 我在2D Unity游戏中使用C时出错,说我的5个名字;“在当前上下文中不存在”;,c#,unity3d,C#,Unity3d,我在2D Unity游戏中使用C#时出错,说我的5个名字“在当前上下文中不存在” 我尝试过修改代码,并在网上寻找方法,但没有任何效果 我的代码是: using UnityEngine; public class MovementManager : MonoBehaviour { public enum type { platformer, topDown }; public type moveType; public float moveSpeed, jumpHeight;

我在2D Unity游戏中使用C#时出错,说我的5个名字“在当前上下文中不存在”

我尝试过修改代码,并在网上寻找方法,但没有任何效果

我的代码是:

using UnityEngine;

public class MovementManager : MonoBehaviour
{
public enum type { platformer, topDown };
    public type moveType;
    public float moveSpeed, jumpHeight;
    public bool onGround = false;
    private type platformer;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetAxisRaw("Horizontal") > 0)
        {
            transform.Translate(Vector2.right * Time.deltaTime * moveSpeed);
        }
        else if (Input.GetAxisRaw("Horizontal") < 0)
        {
            transform.Translate(Vector2.left * Time.deltaTime * moveSpeed);
        }

        if (moveType == type.platformer && Input.GetAxisRaw("Vertical") > 0 && onGround)
        {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
        }

        if (moveType == type.topDown && Input.GetAxisRaw("Vertical") > 0)
        {
            transform.Translate(Vector2.up * Time.deltaTime * moveSpeed);
        }
        if (moveType == type.topDown && Input.GetAxisRaw("Vertical") < 0)
        {
            transform.Translate(Vector2.down * Time.deltaTime * moveSpeed);
        }
    }

    private void OnCollisionEnter2D (Collision2D obj)
    {
        if (obj.gameObject.tag == "ground")
        {
            onGround = true;
        }
    }
    private void OnCollisionExit2D(Collision2D obj)
    {
        if (obj.gameObject.tag == "ground")
        {
            onGround = false;
        }
    }
}

使用UnityEngine;
公共类移动管理器:MonoBehavior
{
公共枚举类型{platformer,topDown};
公共类型移动类型;
公众浮标移动速度、跳跃高度;
public bool onGround=false;
专用型平台;
//用于初始化
void Start()
{
}
//每帧调用一次更新
无效更新()
{
if(Input.GetAxisRaw(“水平”)>0)
{
transform.Translate(Vector2.right*Time.deltaTime*moveSpeed);
}
else if(Input.GetAxisRaw(“水平”)<0)
{
transform.Translate(Vector2.left*Time.deltaTime*moveSpeed);
}
if(moveType==type.platformer&&Input.GetAxisRaw(“垂直”)>0&&onGround)
{
GetComponent().AddForce(Vector2.up*跳跃高度,ForceMode2D.pulse);
}
如果(moveType==type.topDown&&Input.GetAxisRaw(“垂直”)>0)
{
transform.Translate(Vector2.up*Time.deltaTime*moveSpeed);
}
if(moveType==type.topDown&&Input.GetAxisRaw(“垂直”)<0)
{
transform.Translate(Vector2.down*Time.deltaTime*moveSpeed);
}
}
专用空心OnCollisionInter2D(碰撞2D对象)
{
如果(obj.gameObject.tag==“地面”)
{
onGround=正确;
}
}
专用空心OnCollisionExit2D(碰撞2D obj)
{
如果(obj.gameObject.tag==“地面”)
{
onGround=假;
}
}
}
我有5个错误。其中4个看起来一样,但不是。(检查括号中的数字。)它们是:

“Assets/Scripts/MovementManager.cs(24,13):错误CS0103:名称'transform'在当前上下文中不存在”

“Assets/Scripts/MovementManager.cs(28,13):错误CS0103:名称'transform'在当前上下文中不存在”

“Assets/Scripts/MovementManager.cs(33,13):错误CS0103:名称`GetComponent'在当前上下文中不存在”

“Assets/Scripts/MovementManager.cs(38,13):错误CS0103:名称'transform'在当前上下文中不存在”


“Assets/Scripts/MovementManager.cs(42,13):错误CS0103:名称“transform”在当前上下文中不存在”

首先,我建议将任何枚举定义放在单独的文件中

您的错误是因为您在类中定义了一个枚举,并在定义后放置了一个分号。删除分号可能会解决您的错误。但是,正如我所说的,我建议将整个枚举放在一个单独的文件中。如果您不希望这样,我建议将枚举放在类定义之外。这样,它仍然可以在其他脚本中使用

例如


还要避免将任何类或枚举命名为“type”,因为type是一个现有类,很容易导致混淆和/或错误

啊,对。您可能需要告诉脚本先查看游戏对象。尝试将
gameObject.transform
gameObject.GetComponent
添加到脚本中。这一定不是必需的,通常代码可以正常工作。。
public enum MoveType
{
    platformer, 
    topdown
}