2016-11-18 4 views
-1

オブジェクトをインスタンス化するにはどうすればいいですか?2dでは、pos 110から下方にオブジェクトをインスタンス化できますか?Unity軸からのプレハブのインスタンス化方法y = 260から10?

私はまだ検索していますが、何も見つからないので、私はここに私の質問を入れて、誰かが私を助けることを願っています。

EmployeeList.cs

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

public class EmployeeList : MonoBehaviour { 

    public GameObject EmployeeTab; 

    // Use this for initialization 
    void Start() 
    { 
     List<Employee> employees = new List<Employee>(); 

     // Create a parent of your instantiated objects 
     GameObject parent = GameObject.Find("Recruit_Employee"); 

     // Position of the instantiated objects 
     Vector3 position = Vector3.up * 110f; 

     // Distance between instantiated objects 
     float step = 50; 

     employees.Add(new Employee("David", 5, 5000)); 
     employees.Add(new Employee("Jason", 10, 10000)); 
     employees.Add(new Employee("Donald", 3, 3000)); 



     foreach (Employee worker in employees) 
     { 
      // Instantiate the objects from a given prefab 
      GameObject w = (GameObject)Instantiate(EmployeeTab, position, Quaternion.identity, parent.transform); 
      w.SetActive(true); 
      // Set the desired name 
      w.name = worker.name; 

      // Don't forget to change the position of the next employee 
      position.y -= step; 

      Debug.Log("Name: " + worker.name + "Skill: " + worker.skill + "Cost: " + worker.cost); 
     } 
    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 

と私は2人の従業員を持っている場合、私は EmployeeTab を呼び出した後、2つのボタンまたはプレハブを作成する必要がありますので、 foreachセクションでインスタンス化に載せていきたいと思います。

中間スクリプトに新しいイム:/

Employee.cs:

using UnityEngine; 
using System.Collections; 
using System; 

public class Employee : MonoBehaviour 
{ 
    public string name; 
    public int skill; 
    public int cost; 

    public Employee(string newName, int newSkill, int newCost) 
    { 
     name = newName; 
     skill = newSkill; 
     cost = newCost; 
    } 
} 
+0

をあなたがこれまでにそれをインスタンス化するために何をしようとしましたか?また、オブジェクトをインスタンス化しようとしていますか?テキストフィールド? –

答えて

0

あなたはhow to instantiateを知っていると、それはケーキの一部です! ;)

void Start() 
{ 
    List<Employee> employees = new List<Employee>(); 

    // Create a parent of your instantiated objects 
    GameObject parent = new GameObject("EmployeesParent"); 

    // Position of the instantiated objects 
    Vector3 position = Vector3.up * 110.0f ; 

    // Distance between instantiated objects 
    float step = 10 ; 

    employees.Add(new Employee("David", 5, 5000)); 
    employees.Add(new Employee("Jason", 10, 10000)); 
    employees.Add(new Employee("Donald", 3, 3000)); 

    foreach (Employee worker in employees) 
    { 
     costInfo.text = "Cost: " + CurrencyConverter.Instance.GetCurrencyIntoString(Employee.Cost, false, false, false); 
     EmployeeName.text = Employee.Name; 
     SkillInfo.text = Employee.Skill.ToString(); 

     // Instantiate the objects from a given prefab 
     GameObject w = (GameObject) Instantiate(myPrefab, position, Quaternion.identity, parent.transform); 

     // Set the desired name 
     w.name = worker.name ; 

     // Don't forget to change the position of the next employee 
     position.y -= step ; 
    } 
} 

EDIT:MonoBehaviourは伝統C#クラスのようにインスタンス化することができません。あなたのEmployeeクラスは、単純なデータコンテナのようですので、あなたはEmployeeクラスとスタート機能を変更する必要があります私が書いた:

using UnityEngine; 
using System.Collections; 
using System; 

[System.Serializable] 
public class Employee 
{ 
    public string name; 
    public int skill; 
    public int cost; 
} 

// YOUR OTHER SCRIPT 

// Set the values from the inspector here 
public Employee[] employees ; 

void Start() 
{ 
    // Create a parent of your instantiated objects 
    GameObject parent = new GameObject("EmployeesParent"); 

    // Position of the instantiated objects 
    Vector3 position = Vector3.up * 110.0f ; 

    // Distance between instantiated objects 
    float step = 10 ; 

    for(int i = 0 ; i < employees.Length ; ++i) 
    { 
     costInfo.text = "Cost: " + CurrencyConverter.Instance.GetCurrencyIntoString(employees[i].cost, false, false, false); 
     EmployeeName.text = Employee.Name; 
     SkillInfo.text = Employee.Skill.ToString(); 

     // Instantiate the objects from a given prefab 
     GameObject w = (GameObject) Instantiate(myEmployeePrefab, position, Quaternion.identity, parent.transform); 

     // Set the desired name 
     w.name = worker.name ; 

     // Add the component you want to the instantiated GameObject to show the information of your employee like a UnityEngine.UI.Text component or whatever you want 

     // Don't forget to change the position of the next employee 
     position.y -= step ; 
    } 
} 
+0

何も作成されていないので、NullReferenceExceptionというエラーが表示されます。 – Kalip

+0

私のEmployee.csで編集済み – Kalip

+0

@Kalipは、 'myPrefab'のパブリックフィールドを作成し、インスペクタで設定しましたか? –

関連する問題