首先,我是多么原始地发布另一个可怕的
NullReferenceException:未将对象引用设置为对象的实例
但是我已经在网上搜索了一个解决方案,现在已经有2个小时了,并且没有提出任何问题......这是我的两个脚本:
GROUNDED:
using UnityEngine;
using System.Collections;
public class GroundCheck : MonoBehaviour {
private Player player;
void Start()
{
player = GetComponent<Player>();
}
void OnTriggerEnter2D(Collider2D col)
{
player.grounded = true;
}
void OnTriggerExit2D(Collider2D col)
{
player.grounded = false;
}
}
PLAYER:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public float maxSpeed = 3;
public float speed = 50f;
public float jumpPower = 150f;
public bool grounded;
private Rigidbody2D rb2d;
private Animator anim;
// Use this for initialization
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = gameObject.GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
anim.SetBool("Grounded", grounded);
anim.SetFloat("Speed", Mathf.Abs(Input.GetAxis("Horizontal")));
}
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
rb2d.AddForce((Vector2.right * speed) * h);
if (rb2d.velocity.x > maxSpeed)
{
rb2d.velocity = new Vector2(maxSpeed, rb2d.velocity.y);
}
if (rb2d.velocity.x < -maxSpeed)
{
rb2d.velocity = new Vector2(-maxSpeed, rb2d.velocity.y);
}
}
}
确切的错误是:
NullReferenceException:未将对象引用设置为对象的实例
GroundCheck.OnTriggerEnter2D(UnityEngine.Collider2D col) (atAssets /脚本/ GroundCheck.cs:15)
这是我的场景:
这是我的boxcollider(如果它有帮助):
答案 0 :(得分:1)
您的地面检查脚本与播放器脚本不在同一个对象上,这意味着您无法使用getcomponent来获取播放器脚本。因此,您没有将播放器var设置为导致错误的任何内容。将播放器var设置为编辑器中具有播放器脚本的游戏对象,然后在start方法中使用player.GetComponent();
答案 1 :(得分:1)
如果GroundCheck
和PLAYER
类都在同一个GameObject上,那么更改Start()
类的GroundCheck
方法,如下所示:
void Start()
{
player = gameObject.GetComponent<Player>();
}
如果它们不在同一个GameObject上,请使用以下代码:
void Start()
{
GameObject playerObj = GameObject.Find("Name of gameObject that player script is in that");
player = playerObj.GetComponent<Player>();
}
在PLAYER
课程中添加static
修饰符来定义基础:
public static bool grounded;
答案 2 :(得分:-1)
android.support.v4.app.Fragment
&lt; - 在collider param请求gameObject中,首选getcomponent to col,仅控制对象碰撞是否为Fragment
void OnTriggerEnter2D(Collider2D col)
我有类似的问题。我希望它有所帮助 http://docs.unity3d.com/ScriptReference/Collision2D.html
Collider2d有gameobject组件,触发输入get Collider这个对象。
http://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html中的请参阅使用碰撞器中的示例(不是触发器只是示例)来使用,访问gameObject。
对象(播放器)在事件OnTriggerEnter,Exit或Stay中传递参数时没有必要的findtag