Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UnassignedReferenceException:尚未分配Player的变量rb_C#_Unity3d - Fatal编程技术网

C# UnassignedReferenceException:尚未分配Player的变量rb

C# UnassignedReferenceException:尚未分配Player的变量rb,c#,unity3d,C#,Unity3d,我对Unity真的很陌生,所以我尝试了一些事情。所以,我读了关于如何让玩家跳跃的文章,但是当我使用代码时,标题中的错误就出现了 这是我的unity屏幕,我知道我需要将播放器(脚本)下的Rb分配给刚体2D,但它没有显示在列表中 using UnityEngine; public class Player : MonoBehaviour { public Rigidbody2D rb; public float forwardForce = 2000f; public

我对Unity真的很陌生,所以我尝试了一些事情。所以,我读了关于如何让玩家跳跃的文章,但是当我使用代码时,标题中的错误就出现了

这是我的unity屏幕,我知道我需要将播放器(脚本)下的Rb分配给刚体2D,但它没有显示在列表中

using UnityEngine;

public class Player : MonoBehaviour
{
    public Rigidbody2D rb;

    public float forwardForce = 2000f;
    public float sidewaysForce = 500f;

    void FixedUpdate()
    {
        rb.AddForce(0, 0, forwardForce * Time.deltaTime);

        if (Input.GetKey("d"))
        {
            rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }
        if (Input.GetKey("a"))
        {
            rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }
    }
}

这是代码

这里有一个快速修复方法

public class Player : MonoBehaviour
{
    Rigidbody2D rb;

    public float forwardForce = 2000f;
    public float sidewaysForce = 500f;
    void Start() 
    { 
        rb = GetComponent<Rigidbody2D>(); 
    }

    void FixedUpdate()
    {
        rb.AddForce(0, 0, forwardForce * Time.deltaTime);

        if (Input.GetKey("d"))
        {
            rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }
        if (Input.GetKey("a"))
        {
            rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }
    }
}
公共类玩家:单行为
{
刚体2d rb;
公共浮力=2000f;
公共浮子侧向力=500f;
void Start()
{ 
rb=GetComponent();
}
void FixedUpdate()
{
rb.AddForce(0,0,forwardForce*Time.deltaTime);
if(Input.GetKey(“d”))
{
rb.AddForce(侧向力*Time.deltaTime,0,0,ForceMode.VelocityChange);
}
if(Input.GetKey(“a”))
{
rb.AddForce(-sidewaysForce*Time.deltaTime,0,0,ForceMode.VelocityChange);
}
}
}

Addforce只能有两个参数。试试这个

using UnityEngine;

public class Player : MonoBehaviour
{
    public Rigidbody2D rb;

    public float forwardForce = 2000f;
    public float sidewaysForce = 500f;
    void Start()
    {
        rb = GetComponent<Rigidbidy2D>();
    }

    void FixedUpdate()
    {
        rb.AddForce(transform.forward * forwardForce, ForceMode2D.Impulse);

        if (Input.GetKey("d"))
        {
            rb.AddForce(transform.right * sidewaysForce , ForceMode2D.Impulse);
        }
        if (Input.GetKey("a"))
        {
            rb.AddForce(transform.left * sidewaysForce , ForceMode2D.Impulse);
        }
    }
}
使用UnityEngine;
公共类玩家:单一行为
{
公共刚体2d rb;
公共浮力=2000f;
公共浮子侧向力=500f;
void Start()
{
rb=GetComponent();
}
void FixedUpdate()
{
rb.AddForce(transform.forward*forwardForce,ForceMode2D.pulse);
if(Input.GetKey(“d”))
{
rb.AddForce(transform.right*sidewaysForce,ForceMode2D.pulse);
}
if(Input.GetKey(“a”))
{
rb.AddForce(transform.left*侧向力,ForceMode2D.pulse);
}
}
}

错误消息会准确地告诉您出了什么问题。您已将
rb
声明为类型为
RigidBody2D
的变量,但尚未为该变量赋值。您不能使用未分配的变量。对于列表中未显示的
RigidBody2d
,请尝试从层次结构中抓取您的
player
,并将其放入
RigidBody2d
插槽。我用你的行替换了这些行,我不会再有任何错误,我可以将Rigidbody2D分配给rb。唯一的问题是,如果我按a或d,玩家不会移动。你也必须改变这一点。rb.AddForce(transform.left*forwardForce,ForceMode2D.pulse)@Luckstern我更新了代码。Unity给出了一个错误,说没有所谓的transfrom.left EDIT:我通过执行-transform.right来修复它。OK,我的错,那么左边应该是-transform.right。当我使用你的修复程序时,我得到了这个错误及其变体。“Assets\Scripts\Player.cs(16,12):错误CS1501:方法'AddForce'不重载3个参数”只替换rb.AddForce(0,0,forwardForce*Time.deltaTime);使用rb.AddForce(新向量3(0,0,forwardForce*Time.deltaTime));请记住,这是一个快速解决方案,您可以在此处阅读更多信息: