Понедельник, 25 Ноября 2024, 05:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Не создается объект в unity.
afqДата: Четверг, 30 Января 2020, 23:24 | Сообщение # 1
Разработчик
Сейчас нет на сайте
Я создал prefab Sprite2d вроде, но это не подходит в serializeField, а подходит GameObject. в общем также я создал пустой объект на сцене, повесил на него скрипт и в SerializeField сделал доступным public GameObject player. Из unity я повесил prefab спрайта на player. в коде пустого объекта указал координаты где должен появиться спрайт. но когда запускаю игру, то спрайт даже не создается слева в списке объектов.
alexsilentДата: Пятница, 31 Января 2020, 11:23 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
лучше покажите код, так будет понятнее
afqДата: Пятница, 31 Января 2020, 12:54 | Сообщение # 3
Разработчик
Сейчас нет на сайте

Вот код.
Код

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

public class init_game : MonoBehaviour
{
    [SerializeField]
    public GameObject player;
    // Start is called before the first frame update

    int width = 20;
    int height = 30;

    Sprite[] sp;

    int[,] map =
    {
  { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
    };

    void Start()
    {
     sp = Resources.LoadAll<Sprite>("world_1");
     int yy = 0;
     int xx = 0;

     player.transform.position = new Vector3 ( 4, 4, 0 );
        for ( int y = 0; y < height; y++, yy += 1 ) {
         for ( int x = 0; x < width; x++, xx += 1 ) {
          if ( map[y,x] > 0 ) {
           GameObject obj = new GameObject();
           obj.transform.position = new Vector3 ( xx, yy, 0 );

           SpriteRenderer render = obj.AddComponent<SpriteRenderer>();
           obj.AddComponent<BoxCollider2D>();

           render.sprite = sp[map[y,x] + 1];
         }
         }
         xx = 0;
        }
    }

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

k0feДата: Пятница, 31 Января 2020, 14:39 | Сообщение # 4
BRONX
Сейчас нет на сайте
- Публичные поля в Unity сериализируются по умолчанию.
- Префабы это и есть геймобжекты.
Геймобжекты хранят в себе компоненты. Как минимум, Transform компонент, который обязателен для каждого go.
- Вместо геймобжекта логичнее указать тип Sprite. Префаб, соотвественно, заменить на спрайт.

Алсо, для отображения спрайтов у Unity есть отдельный компонент Sprite Renderer. Для UI Image/Raw Image.


мой стрим, который я редко включаю, но зато на нём я делаю игры

Сообщение отредактировал k0fe - Пятница, 31 Января 2020, 14:41
drcrackДата: Пятница, 31 Января 2020, 16:36 | Сообщение # 5
старожил
Сейчас нет на сайте
Код
player.transform.position = new Vector3 ( 4, 4, 0 );

эта строчка просто меняет дефолтную позицию префаба (который лежит в ассетах) и никак не влияет на сцену

чтобы создать экземпляр префаба на сцене надо сделать
Код
var player = Instantiate(playerPrefab);

и далее уже player.transform = ...
afqДата: Пятница, 31 Января 2020, 16:59 | Сообщение # 6
Разработчик
Сейчас нет на сайте
drcrack, k0fe, спасибо.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг