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

Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:04
xANGELofDEATHx
Доброго времени суток.Собственно хотел реализовать смену фоновых картинок в 2д игре, как это лучше сделать, через спрайты или просто текстуры...Может есть варианты.И тогда тут же вопрос, почему нельзя создать массив спрайтов?

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:22
samana
Смотря какой результат вам нужен. Если фоны должны меняться плавно через прозрачность, то можно спрайтами сделать.
Массив спрайтов создать можно.

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:26
xANGELofDEATHx
public Sprit a[];
так не работает)
Нет, нужно просто каждые 10 секунд менять картинку фона, вот и мудрю как реализовать

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:29
samana
В C# массив выглядит так
Синтаксис:
Используется csharp
Sprite[] spirtes = new Sprite[0];


Можете запускать Invoke каждые 10 секунд и меняйте спрайт/текстуру.

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:36
xANGELofDEATHx
Спасибо, попробую сделать. Еще вопрос, у спрайта размеры маленькие, но они 9:16, как и большие картинки, можно его до таких же размеров растянуть?

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:40
samana
Можете попробовать изменить у этих спрайтов свойство pixel per unit(кажется так) в инспекторе, выделив спрайт в окне проекта (не сцены), в общем в настройках импорта спрайта.

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:44
xANGELofDEATHx
Да, это действительно изменяет размер спрайта, но так в ручную подобрать его по размеру других сложнова-то

Re: Помощь в простом скрипте

СообщениеДобавлено: 21 фев 2017, 23:56
xANGELofDEATHx
Тупняк, прописать смену

Синтаксис:
Используется csharp
 public Sprite[] fon;

    void Start()
    {
        Invoke("FON", 10);
    }
    void FON()
    {
       
    }

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 00:01
samana

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 00:32
xANGELofDEATHx
что неправильно?
Синтаксис:
Используется csharp
 void FON()
    {
        GameObject.Find("Fon").transform.GetComponent<SpriteRenderer>
    }

Хочу получить компонент слайдер и заменять его каждые 10 сек

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 10:38
samana
xANGELofDEATHx писал(а):Хочу получить компонент слайдер


Слайдер? А при чём тут слайдер? Если со спрайтом, то:

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

public class BackgroundChanger : MonoBehaviour
{
    public Sprite[] sprites;
    public float changeIntervalSec = 10f;

    private SpriteRenderer _spriteRend;
    private int _currentSprite;

    void Start()
    {
        _spriteRend = GameObject.Find("Fon").GetComponent<SpriteRenderer>();
        _spriteRend.sprite = sprites[_currentSprite];

        InvokeRepeating("updateSprite", changeIntervalSec, changeIntervalSec);
    }

    void updateSprite()
    {
        _currentSprite++;
        if (_currentSprite == sprites.Length) _currentSprite = 0;

        _spriteRend.sprite = sprites[_currentSprite];
    }
}
 

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 12:25
xANGELofDEATHx
Такой вопрос, почему обязательно 10f?Нельзя тип инт вставить на время?Он же меньше памяти кушает

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 12:56
Woolf
xANGELofDEATHx писал(а):Такой вопрос, почему обязательно 10f?Нельзя тип инт вставить на время?Он же меньше памяти кушает


По большому секрету, int - 4 байта, и float - 4 байта.
http://mycsharp.ru/post/7/2013_04_15_pe ... sharp.html
Только тссс..

ЗЫ если вы начинаете экономить память на единичных переменных, то у меня для вас плохие новости. У вас, явно, неверный подход к программированию на Unity

Re: Помощь в простом скрипте

СообщениеДобавлено: 22 фев 2017, 14:00
xANGELofDEATHx
Чтобы не создавать тему,спрошу тут, как проверить на нажатие, если скрипт весит не на объекте?
Синтаксис:
Используется csharp
{
    void OnMouseUpAsButton()
    {
        switch (gameObject.name)
        {
            case "Play":
            Application.LoadLevel("Play");
            break;
        }
    }
}

Это обычный скрипт, а эту функцию надо вызвать из другого, но проверка идет по нажатию именно на коллайдер, где висит скрипт

Re: Помощь в простом скрипте

СообщениеДобавлено: 25 фев 2017, 10:06
xANGELofDEATHx
Как сделать проверку нажатия на объекте, если скрипт на другом объекте?