2016-03-30 40 views
0

Sorunumun cevabı için internete baktım. Çalıştığım hiçbir şey bulamadım, bu yüzden buraya göndermeye karar verdim.Nesneyi oynatıcıya taşıyın

ben hata almaya devam: (Ben rastgele kafesleri (asteroid, bu işleri) oluşturuldu

`transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 3f); //move towards character` 

ve Player doğru hareket gerekiyordu: it doubleclicking zaman "Object reference not set to an instance of an object"

bu bana gönderir hata!).

bool hitPlayer = false; 
GameObject player; 

Ben başlangıç ​​fonksiyonunda bu ekledi:: asteroitler benim Player kovalamak yapmak için

, ben üstte aşağıdaki değişkenleri eklendi

player = GameObject.FindGameObjectWithTag("Player"); 

ve ben güncelleme fonksiyonunda bu katma :

İşte
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 3f); //move towards character 

benim tam kodu:

using UnityEngine; 
using System.Collections; 

public class RandomAsteroid : MonoBehaviour 
{ 

    public Material material; 
    private Material collectedMaterial; 
    private MeshRenderer meshRenderer; 
    private Collider collider; 


    bool hitPlayer = false; 
    GameObject player; 


    // Use this for initialization 

    void Start() 
    { 
     collectedMaterial = (Material) Resources.Load("sun", typeof(Material)); 

     Vector3 v0 = new Vector3(Random.Range(1f,5f), 1, Random.Range(1f,5f)); 
     Vector3 v1 = new Vector3(Random.Range(1f,5f), 1, Random.Range(-1f,-5f)); 
     Vector3 v2 = new Vector3(Random.Range(-1f,-5f), 1, Random.Range(-1f,-5f)); 
     Vector3 v3 = new Vector3(Random.Range(-1f,-5f), 1, Random.Range(1f,5f)); 

     Vector3 v4 = new Vector3(Random.Range(1f,5f), -1, Random.Range(1f,5f)); 
     Vector3 v5 = new Vector3(Random.Range(1f,5f), -1, Random.Range(-1f,-5f)); 
     Vector3 v6 = new Vector3(Random.Range(-1f, -5f), -1, Random.Range(-1f, -5f)); 
     Vector3 v7 = new Vector3(Random.Range(-1f,-5f), -1, Random.Range(1f,5f)); 

     MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>(); 
     meshRenderer = gameObject.AddComponent<MeshRenderer>(); 


     meshRenderer.material = material; 

     Mesh mesh = meshFilter.mesh; 

     mesh.Clear(); 

     Vector3[] duplicateVertices = new Vector3[] 
      { 
       //top 
       v0, //0 
       v1, //1 
       v2, //2 
       v3, //3 

       //front 
       v4, //4 
       v0, //5 
       v3, //6 
       v7, //7 

       //left 
       v5, //8 
       v1, //9 
       v0, //10 
       v4, //11 

       //back 
       v6, //12 
       v2, //13 
       v1, //14 
       v5, //15 

       //right 
       v7, //16 
       v3, //17 
       v2, //18 
       v6, //19 

       //bottom 
       v5, //20 
       v4, //21 
       v7, //22 
       v6 //23 
      }; 

     mesh.vertices = duplicateVertices; 


     int[] triangles = new int[] 
      { 
       //top 
       0, 1, 2, 
       2, 3, 0, 

       //front 
       4, 5, 6, 
       6, 7, 4, 

       //left 
       8, 9, 10, 
       10, 11, 8, 

       //back 
       12, 13, 14, 
       14, 15, 12, 

       //right 
       16, 17, 18, 


18, 19, 16, 

      //bottom 
      20, 21, 22, 
      22, 23, 20 


     }; 
    mesh.triangles = triangles; 
    Collider collider = gameObject.AddComponent<MeshCollider>(); 

    mesh.RecalculateNormals(); 
    mesh.RecalculateBounds(); 
    mesh.Optimize(); 

    player = GameObject.FindGameObjectWithTag("Player"); 
} 

// Update is called once per frame 
void Update() 
{ 
    if (!hitPlayer) 
    { 
     transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 3f); //move towards character 
    } 
} 

void OnCollisionEnter(Collision collision){ 

    if (collision.gameObject.name == "Player") 
    { 
     meshRenderer.material = collectedMaterial; 
    } 

} 

}

kimse bana yardım edebilir misiniz?

+1

Olası yinelenen yerine [bir NullReferenceException nedir ve nasıl düzeltebilirim?] (Http://stackoverflow.com/questions/4660142/what -is-a-nullreferenceexception-ve-nasıl-i-fix-it) –

+0

GameObject.FindGameObjectWithTag ("Player") yerine 'gameObject.FindGameObjectWithTag (" Player "); ... öğrenmek için hata ayıklayıcısını kullanın. – Filburt

+0

@Filburt hiç işe yaramıyor :( –

cevap

1

Sorununuzu büyük olasılıkla player = GameObject.FindGameObjectWithTag("Player"); adresinden "Player" olarak etiketlenmiş bir GameOBject yoksa, sorun budur. Etiket adlandırmadan farklıdır. Eğer gameObject'iniz "Player" isminde ise GameObject.FindGameObjectWithTag() yerine GameObject.Find() kullanın.

Yani bir

player = GameObject.FindGameObjectWithTag("Player") 

ile

player = GameObject.Find("Player"); 
+1

Büyüyü yaptığınız için teşekkür ederiz! –