Спавн экземпляра класса в unity
я не так давно в программировании, так что вопрос тоже не самый адекватный. я хочу создать несколько npc в своей игре (2D), так что решил создать класс для этого.
Класс имеет GameObject - префаб, строку - имя и два массива строк - фразы и названия анимаций (кстати если у кого то есть другой здоровый способ использовать анимации через код, нежели не с помощью имен, прошу помогите!). я решил проверить спавн, создал экземпляр, написал в старте Instantiate, и тут же был уведомлен, что метод работает только для типа Object, ну и GameObject.
Помогите, пожалуйста, разобраться, как организовать класс или не класс, хотя бы какую то структурированную систему хранения npc, потому что для каждой локации предусмотрены свои фразы и анимации, хотелось бы это как-то организовать. Если есть что-то лучше зранения отдельно каждого префаба с кучей if в общем скрипте, для проверки сцены (в моей игре сцена это просто задний фон из соседнего скрипта, а не сцена unity).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NPCCreator : MonoBehaviour
{
[System.Serializable]
public class Person
{
public string name;
public GameObject body;
public string[] phrases;
public string[] animations;
}
public Person Green = new Person();
public static NPCCreator instance;
void Awake()
{
instance = this;
}
void Start()
{
Instantiate(Green, new Vector3(0,0,0), Quaternion.identity);
}
}
Ответы (1 шт):
Сначала создайте общий класс Npc в котором будут поля которые могут быть у каждого npc, дальше создайте, например, класс NpcGreen, который унаследуйте от класса npc, прописав в нем индивидуальный функционал. В инспекторе повесьте соответствующие скрипты на npc и заполните поля. В классе NPCCreator который будет проинициализирован в начале игры, можете Instantiate-вать ваших npc с уже существующими полями и функционалом. Примерно как может выглядеть код.
/// Класс NPC
public class Npc : MonoBehaviour
{
protected string name; //можно и public если очень надо
protected string[] phrases;
protected string[] animations;
//общий функционал npc
protected void Awake()
{
// общий функционал npc
}
protected void Start()
{
// общий функционал npc
}
// и тд
}
/// Класс NpcGreen
public class NpcGreen : Npc
{
//функционал npc Green
private new void Start()
{
base.Start();
// доп функционал npc Green
}
private new void Update()
{
base.Update();
// доп функционал npc Green
}
// и тд
}
/// Класс NPC Creator
public class NPCCreator : MonoBehaviour
{
[SerializeField] private GameObject npcGreen;
private void Awake()
{
}
private void Start()
{
Instantiate(npcGreen, Vector3.zero, Quaternion.identity);
}
// и тд
}