C# UnassignedReferenceException:尚未分配Player的变量rb
我对Unity真的很陌生,所以我尝试了一些事情。所以,我读了关于如何让玩家跳跃的文章,但是当我使用代码时,标题中的错误就出现了 这是我的unity屏幕,我知道我需要将播放器(脚本)下的Rb分配给刚体2D,但它没有显示在列表中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
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));请记住,这是一个快速解决方案,您可以在此处阅读更多信息: