2017-06-18 9 views
0

親スクリプトのゲームオブジェクトZombieArmyと添付スクリプトZombieがあります。新しいゾンビが子供としてインスタンス化されるたびにTransformが変更されます。ゾンビにそれぞれのreSpawn()から一意のトランスフォームを持たせながら、zombieArmyトランスフォームが変わることを防ぎ、Vector3(0,0,0)でそのトランスフォームを固定したままにする方法を教えてください。親子は、新しい子をインスタンス化するたびに変更されます。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Zombie : MonoBehaviour { 

    public GameObject zombiePrefab; 
    public Transform zombieArmy; 
    public Transform zombieSpawnPoint; 
    private Transform[] spawnPositions; 
    public bool reSpawn = false; 
    private bool lastToggle = false; 
    private GameObject spawn; 

    // Use this for initialization 
    void Start() { 
     spawnPositions = zombieSpawnPoint.GetComponentsInChildren<Transform>(); 
    } 

    private void NewSpawn() //spawn location of newZombie 
    { 
     if (reSpawn) 
     { 
      int i = Random.Range(1, spawnPositions.Length); 
      transform.position = spawnPositions[i].transform.position; 
      spawn = Instantiate(zombiePrefab, this.transform.position, this.transform.rotation, zombieArmy); 
      // zombieArmy.transform.position = new Vector3(0, 0, 0); 
     } 
    } 


    void Update() { //T-toggle 
     if (reSpawn != lastToggle) 
     { 
      NewSpawn(); 
      reSpawn = false; 
     } 
     else 
      lastToggle = reSpawn; 
    } 
} 
+1

'zombieArmy'だけでインスタンス化し'で使用されている() '、それはトランスフォームTransform zombieArmyを変更しないように保証されています。これは、Transform zombieArmyがこのコード以外の場所で変更されたことを意味し、この問題を解決するために他の関連クラスを参照する必要があります。 – BrokenBacon

+1

私は以前の投稿も読んでおり、基本設定に問題があるようです。 Unityのベストプラクティスのいくつかを学ぶためにUnityのチュートリアルを参照することをお勧めします。また、クラスとその役割を設計するためにもっと調べると役に立ちます。ゾンビはスポーナーのポジションを知る必要がありますか?コードが書かれる前に考慮すべき事項です。 Googleソリッドの原則やその他の有名なOOPデザインのコンセプトは、素晴らしいゲームの開発に役立ちます。 – BrokenBacon

+1

このコードは正常です。他の場所で何かが間違っているはずです。ゾンビ軍の変形にアクセスする他の場所を調べる。 – Bijan

答えて

0

正しく理解していれば、そのゾンビスクリプトは親ゲームオブジェクトに添付されています。 次に、あなたのNewSpawn()メソッドは少し間違っている。これライン

transform.position = spawnPositions[i].transform.position; 

は実際にあなたが言うようにそれはあなたがすることを言っているまさにだから、親ゲームオブジェクトの変換を変更しています。何をしたいが場所がランダムに選択されたスポーンポイントの場所にそれぞれ新たに生成されたオブジェクトである 場合は、代わりにこれを試してください:あなたのコードから

int i = Random.Range(0, spawnPositions.Length); // Any reason the 0th index shouldn't be used? 

    spawn = Instantiate(zombiePrefab, this.transform); 
    spawn.transform.position = spawnPositions[i].transform.position; 
    spawn.transform.rotation = spawnPositions[i].transform.rotation; 
関連する問題