我是新手,试图制作一个简单的点击式跳转式2D游戏,我能够自己弄清楚事情,但我对此问题无能为力。 所以问题是: - 1)。我有三个脚本Movement.cs,Obstacle.cs和Score.cs(Movement.cs和Score.cs都附加到“Player”gameObject)。
2)。在Score.cs中,我想在每次玩家跳跃时得分+并避免与障碍物碰撞(就像飞鸟一样)。
3)这是我的Score.cs脚本: 由于“代码未格式化”错误,我包含了代码段
using UnityEngine;
using System.Collections;
public class Score : MonoBehaviour
{
public GameObject obstacle;
public Obstacle obs;
public int score;
void Start ()
{
obstacle = GameObject.Find("Crate");
obs = obstacle.GetComponent<Obstacle>();
}
void Update ()
{
if (obs.transform.position.x <= transform.position.x);
{
score++;
Debug.Log (score);
}
Debug.Log (score);
}
}
上面提到的脚本正在生成以下错误
MissingReferenceException:“Obstacle”类型的对象已被破坏,但您仍在尝试访问它。您的脚本应该检查它是否为null或者您不应该销毁该对象。
我发现,“obs.transform.position.x”给出了原始预制件的位置,而不是它正在生成的副本的位置(当我使用Debug.Log(obs.transform。 position.x))。
4)。我的Obstacle.cs脚本是:
再次出于同样的原因,我包含了片段。
using UnityEngine;
using System.Collections;
public class Obstacle : MonoBehaviour {
public GameObject crate;
//public GameObject clone;
public float t = 1f;
public int score = 0;
public float startingPositionX = 2.53f;
public float startingPositionY = -3.50f;
void Start ()
{
Invoke ("Generate", t);
}
void Update()
{
var x = -6f;
var y = 0f;
rigidbody2D.velocity = new Vector2 (x, y);
//Debug.Log(clone.transform.position.x);
/*if(clone.transform.position.x == -9.53f)
{
score++;
Debug.Log(score);
}*/
Destroy (crate, 3.0f);
}
void Generate()
{
/*clone = */Instantiate (crate, new Vector3 (startingPositionX, startingPositionY, 0f), Quaternion.identity);
}
}
我尝试在我的Obstacle.cs脚本中分配“克隆”我的箱子预制件的副本并进行分数,但它也没有用。
5)。由于上面提到的错误和问题,我现在无法将分数提高1,有趣的是我的分数正在增加,如每秒的帧数。
唷!这就是我希望你们能理解我的问题并为我提供解决方案。问题很少,但我想我应该解释一下并尽可能清楚地说明问题。
答案 0 :(得分:0)
为什么这不起作用?我尝试在我的Obstacle.cs脚本中分配“克隆”我的箱子预制件的副本并做分数,但它也没有用。你把它投射到GameObject了吗?喜欢
clone = Instantiate (crate, new Vector3 (startingPositionX, startingPositionY, 0f), Quaternion.identity) as GameObject;
? 你现在拥有的是给你一个null引用,因为你试图访问被破坏对象的transfrom属性。