2016-04-29 66 views
0

我將使用口袋妖怪作爲示例:我有一個包含10個元素的列表,每個元素包含:字符串名稱,遊戲對象,int hp和mana int,int稀有度。隨機列表對象並實例化gameObject

我需要在每次點擊或點擊之後,做出一個隨機的,即使這麼好,但想象一下這10個小寵物,其中2個是非常罕見的。

隨機後,會查出常見或罕見的小精靈。如果共同的話,它將會變成另一個自由度,並且只會選擇1.如果稀有口袋妖怪,則選擇其中一個。我相信這很混亂。

這個問題,我沒有設法使隨機列表不實例化對象。目前我的這個代碼如下..

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

public class Pokemons : MonoBehaviour 
{ 

    [Serializable] 
    public class ListPokemons 
    { 
     public string name; 
     public GameObject componentObjc; 
     public int hp; 
     public int mana; 
     public int rarity;  
    } 

    public ListPokemons[] pokeAtributs; 

    // Use this for initialization 
    void Start() 
    { 
     List<ListPokemons> list = pokeAtributs.ToList(); 
     //ListPokemons pokemon = list.FirstOrDefault (r => r.componentObjc != null); 
    } 
} 

我使用Unity 5.我葡萄牙語和使用谷歌翻譯的所有文字已被翻譯。

+0

提示:稀有元素是一個100到10,000之間的隨機數(兩次獲得相同數字的可能性很低),然後將一個標誌分配爲_rare_。通用元素是0到100之間的隨機數(更高的可能性),還可以分配一個標誌_common_。 –

+1

你需要分配(數學)。但是,在這種情況下,我傾向於做的是決定多少稀有小寵物,以及我會給出多少普通小寵物。比方說98個普通的,2個拉雷斯。我做了兩個隨機卷1-100來決定拉什何地方,甚至建立一個固定大小的列表,相應地填滿,而不是滾動遊戲時間,只是挑選下一個列表項目;這樣你就可以「平分」,否則你也許不會。順便說一句,爲什麼ListPokemons不是一個結構呢?如果您操作GObjs – 2016-04-29 23:37:12

回答

0

我聽起來像你應該組織你罕見的和共同的兩個不同的名單。

這樣的事情,也許(這是一個樣機):

// fill these in the inspector. you don't need the extra arrays. 
public List<ListPokemons> rarePokemon; 
public List<ListPokemons> commonPokemon; 

... 

void PickPokemon() 
{ 
    int rarityRoll = Random.Range(0, 100); 
    if(rarityRoll < 80) 
    { 
     // choose something from common 
     int roll = Random.Range(0, commonPokemon.Count); 
     // instantiate 
     Instantiate(commonPokemon[roll].componentObjc, new Vector3(5, 5, 5), Quaternion.identity); 
    } 
    else 
    { 
     int roll = Random.Range(0, rarePokemon.Count); 
     // instantiate 
     Instantiate(rarePokemon[roll].componentObjc, new Vector3(5, 5, 5), Quaternion.identity); 
    } 
} 

如果您有其他列表中,您可以添加解決這個另一卷。

我不認爲你需要通過代碼實際初始化公共數組到大小。這可以在檢查員中完成。 (編輯:其實你不能這樣做,因爲你想在運行時間之前填充列表。)

Random.Range(int a, int b)是從(包含)到b(不包括)。

編輯2:
我猜,因爲你的陣列將被轉換爲列表反正你可以擺脫陣列,使名單公開或與陣列直接工作,並刪除列表(在這種情況下,你需要使用Length而不是Count)。

+0

tks,但是,commonPokemon.Count或rarePokemon.Count在當前上下文中不存在,也可以使用Awake()而不是Start()。 –

+0

我的錯誤顯然他們需要成員。我編輯。 –

+0

我還沒有測試過,因爲它們在測試之前缺少完整的代碼。但是錯誤消失了,在檢查員中一切正常。 我很樂意將你加入Skype,有時候會有很多想法。 [email protected] –

0

的問題是,公衆ListPokemons[] pokeAtributs;你做List<ListPokemons> list = pokeAtributs.ToList();

之前簡單地初始化與new關鍵字的數組,那麼它應該工作永遠不會初始化。

[Serializable] 
public class ListPokemons 
{ 
    public string name; 
    public GameObject componentObjc; 
    public int hp; 
    public int mana; 
    public int rarity;  
} 

public ListPokemons[] pokeAtributs; 

// Use this for initialization 
void Start() 
{ 
    //You are missing this part in your code (10 pokeAtributs ) 
    pokeAtributs = new pokeAtributs[10]; 

    //Now you can do your stuff 
    List<ListPokemons> list = pokeAtributs.ToList(); 

}