随机列表对象并实例化gameObject

时间:2016-04-29 20:30:22

标签: c# random unity3d instantiation gameobject

我将以Pokemon为例:我有一个包含10个元素的列表,每个元素包含:string name,GameObject,int hp和mana int,int rarity。

我需要在每次点击或点击之后,随机制作,甚至是如此好,但想象一下这10个小精灵,其中2个非常罕见。

随机后,将检查常见或罕见的口袋妖怪。如果常见的话,它将成为另一个radom并且将只选择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.我是葡萄牙语,所有文字都是使用谷歌翻译翻译的。

2 个答案:

答案 0 :(得分:0)

问题是公共$fbUser = $facebook->getUser(); if ($fbUser) { try { // We're logged in! $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { // Oh no, an error :( error_log($e); $fbUser = null; } } if ($fbUser) { try { $facebook_id = $facebook->getUser(); $facebook_me = $facebook->api('/me'); session->set('facebook_me', $facebook_me); } catch (FacebookApiException $e) { error_log($e); } } else { $facebook_me = $session->value('facebook_me'); } 在您ListPokemons[] pokeAtributs;

之前从未初始化

只需使用List<ListPokemons> list = pokeAtributs.ToList ();关键字初始化数组,然后就可以了。

new

答案 1 :(得分: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而不是{ {1}})。