Страница 1 из 1

Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 20:39
jigsawjigsaw
Здравствуйте. Помогите решить задачу.
есть первый скрипт GameController.cs с глобальным списком Action элементов.
Скрытый текст:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameController : MonoBehaviour {
public static List<Action> MyActionList;
// Use this for initialization
void Start () {
List<Action> MyActionList = new List<Action> ();
}
}


И второй скрипт Action который содержит в себе 2 экземпляра класса Action2 и Action3
Скрытый текст:
public class Action : MonoBehaviour {

// Use this for initialization
void Start () {

}

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

}
}

public class Action2 : Action {

// Use this for initialization
void Start () {

}

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

}
}

public class Action3 : Action {

// Use this for initialization
void Start () {

}

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

}
}


Можно ли через главный скрипт Action заполнить список List<Action> MyActionList экземплярами этого класса те Action2 и Action3. И если я создам новый Экземпляр Action4 он тоже автоматически добавится в список. Можно ли реализовать такое?

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 21:03
samana
Меня насторожило следующее
jigsawjigsaw писал(а):И второй скрипт Action который содержит в себе 2 экземпляра класса Action2 и Action3

Разве будут работать несколько классов MonoBeh-а из одного файла? Они ведь должны быть в отдельных.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:09
Cr0c
samana писал(а):Разве будут работать несколько классов MonoBeh-а из одного файла? Они ведь должны быть в отдельных.

Второй монобех игнорируется, всё верно. Проверил только что.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:11
samana
Да, игнорируется, я тоже проверил) Но тогда автору темы нет от этих дополнительных классов никакого толка, если к ним нет доступа.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:11
waruiyume
Всё прекрасно работает, его просто нельзя навесить через инспектор. Делаем AddCompontnt и радуемся.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:14
Cr0c
waruiyume писал(а):Всё прекрасно работает, его просто нельзя навесить через инспектор. Делаем AddCompontnt и радуемся.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class script1 : MonoBehaviour {

        void FixedUpdate () {
        Debug.Log("1");
        }
}

public class script2 : MonoBehaviour
{
    void Update()
    {
        Debug.Log("2");
    }
}
 

Второй не работает же.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:23
waruiyume
waruiyume писал(а):Всё прекрасно работает, его просто нельзя навесить через инспектор. Делаем AddCompontnt и радуемся.

Синтаксис:
Используется csharp
using UnityEngine;

public class Script1 : MonoBehaviour
{
    void Start()
    {
        gameObject.AddComponent<script2>();
    }

    void FixedUpdate()
    {
        Debug.Log("1");
    }
}


public class script2 : MonoBehaviour
{
    void Update()
    {
        Debug.Log("2");
    }
}
 

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:25
Cr0c
Понял, спасибо. Надо экземпляр второго ручками навешивать на объект.

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:36
samana
waruiyume писал(а):Всё прекрасно работает, его просто нельзя навесить через инспектор. Делаем AddCompontnt и радуемся.

Но это если в этом же классе добавить да, получается. А если совершенно в другом классе прописать такой AddComponent со вторым скриптом, то ошибок не возникает, но и компонент не добавляется.
Синтаксис:
Используется csharp
using UnityEngine;

public class Script1 : MonoBehaviour
{
       
}

public class Script2 : MonoBehaviour
{
    void Update()
    {
        Debug.Log(2);
    }
}
 


Синтаксис:
Используется csharp
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    void Start()
    {
        gameObject.AddComponent<Script2>(); // ничего не происходит
    }
}

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:43
waruiyume


==========================
==========================
Ответ на вопрос TC:
Синтаксис:
Используется csharp
public class Action2 : Action
{
    vois Awake()
    {
        GameController.MyActionList.Add(this);
    }
}

Re: Заполнение list Экземплярами класса

СообщениеДобавлено: 15 май 2017, 22:51
samana
waruiyume, вы правы. Видимо моя Unity заглючила, перезапустил и заработало корректно.