如何获取每个实例化的GameObject Unity 2D的位置

时间:2015-02-23 11:50:52

标签: c# unity3d

我是新手,试图制作一个简单的点击式跳转式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,有趣的是我的分数正在增加,如每秒的帧数。

唷!这就是我希望你们能理解我的问题并为我提供解决方案。问题很少,但我想我应该解释一下并尽可能清楚地说明问题。

1 个答案:

答案 0 :(得分:0)

为什么这不起作用?我尝试在我的Obstacle.cs脚本中分配“克隆”我的箱子预制件的副本并做分数,但它也没有用。你把它投射到GameObject了吗?喜欢

clone = Instantiate (crate, new Vector3 (startingPositionX, startingPositionY, 0f), Quaternion.identity) as GameObject;

? 你现在拥有的是给你一个null引用,因为你试图访问被破坏对象的transfrom属性。