2015-02-23 59 views
1

我是新手,試圖製作一個簡單的點擊跳轉式2D遊戲,我能夠自己弄清楚事情,但我無法做任何事情問題。 所以問題是: - 1)。我有三個腳本Movement.cs,Obstacle.cs和Score.cs(Movement.cs和Score.cs都附加到「Player」gameObject)。 2)。在Score.cs中,我希望每次玩家跳躍時都得分++,避免與障礙物發生碰撞(就像飛揚的小鳥)。如何獲得每個實例化的遊戲對象的位置Unity 2D

3)這是我的Score.cs腳本: 包括我,因爲 「沒有格式化代碼」 錯誤

using UnityEngine; 
 
using System.Collections; 
 

 
public class Score : MonoBehaviour 
 
{ 
 
\t public GameObject obstacle; 
 
\t public Obstacle obs; 
 
\t public int score; 
 

 
\t void Start() 
 
\t { 
 
\t \t obstacle = GameObject.Find("Crate"); 
 
\t \t obs = obstacle.GetComponent<Obstacle>(); 
 
\t } 
 

 
\t void Update() 
 
\t { 
 
\t \t if (obs.transform.position.x <= transform.position.x); 
 
\t \t { 
 
\t \t \t score++; 
 
\t \t \t Debug.Log (score); 
 
\t \t } 
 
\t \t Debug.Log (score); 
 
\t } 
 
}

上面提到的腳本代碼段產生以下錯誤

MissingReferenceException:本「障礙」類型的對象已被銷燬,但您仍然試圖訪問它。你的腳本應該檢查它是否爲空或者你不應該銷燬該對象。我發現的是,「obs.transform.position.x」給出了原始預製的位置,而不是它產生的複製的位置(我觀察它,當我使用Debug.Log(obs.transform .position.x))。 4)。我的Obstacle.cs腳本是:

再次出於同樣的原因,我包含片段。

using UnityEngine; 
 
using System.Collections; 
 

 
public class Obstacle : MonoBehaviour { 
 

 
\t public GameObject crate; 
 
\t //public GameObject clone; 
 
\t public float t = 1f; 
 
\t public int score = 0; 
 
\t public float startingPositionX = 2.53f; 
 
\t public float startingPositionY = -3.50f; 
 

 
\t void Start() 
 
\t { 
 
\t \t Invoke ("Generate", t); 
 
\t } \t 
 

 
\t void Update() 
 
\t { 
 
\t \t var x = -6f; 
 
\t \t var y = 0f; 
 
\t \t rigidbody2D.velocity = new Vector2 (x, y); 
 
\t \t //Debug.Log(clone.transform.position.x); 
 

 
\t \t /*if(clone.transform.position.x == -9.53f) 
 
\t \t { 
 
\t \t \t score++; 
 
\t \t \t Debug.Log(score); 
 
\t \t }*/ 
 

 
\t \t Destroy (crate, 3.0f); 
 
\t } 
 

 
\t void Generate() 
 
\t { 
 
\t \t /*clone = */Instantiate (crate, new Vector3 (startingPositionX, startingPositionY, 0f), Quaternion.identity); 
 
\t } 
 
}

我試圖賦予「克隆」我的箱子預製件的複印件,在我Obstacle.cs腳本做的事情比分,但它也沒有工作。 5)。由於上述錯誤和問題,現在我無法將分數提高1,有趣的是我的分數正在像每秒幀數一樣增加。

唷!這就是我希望你們能夠理解我的問題併爲我提供解決方案。問題很少,但我認爲我應該解釋它並儘可能清楚地說明問題。

回答

0

爲什麼這不工作?我嘗試將我的箱子預製件的副本分配給「克隆」,並在我的Obstacle.cs腳本中做分數的事情,但它也沒有奏效。你把它投到了遊戲對象?像

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

? 你現在擁有的是給你一個nullreference,因爲你試圖訪問被銷燬對象的transfrom屬性。

+0

yes我也是這麼做的,但是它沒有用,因爲我對我應該分配給gameObjects(crate和clone)的方式感到困惑,所以我把我的箱子預製分配給它們兩個。如果這是問題,我不會。 – 2015-02-23 12:14:32

+0

障礙不要傷害箱子 - 你後來實例化的預製,但破壞克隆。在Score類中,您引用了主對象而不是實例。在Generate類中添加GameObject.Find(「Player」)。GetComponenet ().obstacle = clone。在獲得該位置之前,在得分類中驗證您的對象是否爲空。防爆。如果(obs!= null && obs.transfrom!= null)//比您的代碼更爲謹慎 – 2015-02-23 12:24:35

+0

請注意,這是一個臨時解決方案,用於驗證它是否有效。如果它只在Start中使用GameObject.Find(「Player」),GetComponenet (),並保存對它的引用。 GameObject.Find()有點慢,可能會影響性能 – 2015-02-23 12:28:11

相關問題