Почему текстура черная всегда? =\

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Почему текстура черная всегда? =\

Сообщение Chaz 19 окт 2012, 23:55

Прив. Сделал одной прогой текстурку с тайлингом 8 на 4. Взял скрипт, который типа анимирует текстурку, оно то анимирует, но текстура всегда черного цвета. Шейдер стоит прозрачный диффуз.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Почему текстура черная всегда? =\

Сообщение waruiyume 20 окт 2012, 00:09

Здесь телепатов нет, показывайте код.
(Хотя, переключите wrap mode текстуры на repeat и если что-то появится, значит- неправильно рассчитаны координаты)
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Почему текстура черная всегда? =\

Сообщение Chaz 20 окт 2012, 00:21

waruiyume писал(а):Здесь телепатов нет, показывайте код.
(Хотя, переключите wrap mode текстуры на repeat и если что-то появится, значит- неправильно рассчитаны координаты)

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

public class AnimText : MonoBehaviour {
public int _uvTieX = 1;
        public int _uvTieY = 1;
        public int _fps = 10;
 
        private Vector2 _size;
        private Renderer _myRenderer;
        private int _lastIndex = -1;
 
        void Start ()
        {
                _size = new Vector2 (1.0f / _uvTieX , 1.0f / _uvTieY);
                _myRenderer = renderer;
                if(_myRenderer == null)
                        enabled = false;
        }
        // Update is called once per frame
        void Update()
        {
                // Calculate index
                int index = (int)(Time.timeSinceLevelLoad * _fps) % (_uvTieX * _uvTieY);
        if(index != _lastIndex)
                {
                        // split into horizontal and vertical index
                        int uIndex = index % _uvTieX;
                        int vIndex = index / _uvTieY;
 
                        // build offset
                        // v coordinate is the bottom of the image in opengl so we need to invert.
                        Vector2 offset = new Vector2 (uIndex * _size.x, 1.0f - _size.y - vIndex * _size.y);
 
                        _myRenderer.material.SetTextureOffset ("_MainTex", offset);
                        _myRenderer.material.SetTextureScale ("_MainTex", _size);
 
                        _lastIndex = index;
                }
        }
}
 

картинку здесь скачать мона http://narod.ru/disk/62693296001.48d2998891bdd4c8a5864b28be16c670/forUnity.png.html
Создается Plain, создается материал, в материал пихается картинка, на материал назначается Трансперент Диффуз шейдер, материал бросается на плейн, на плейн бросается скрипт, в скрипте указывается тайлинг 8 на 4.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Почему текстура черная всегда? =\

Сообщение waruiyume 20 окт 2012, 10:00

Долго я на него медитировал, но так и не понял как он работает @_@ Попробуйте так:
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class AnimText : MonoBehaviour
{
    public int _uvTieY = 1;
    public int _uvTieX = 1;
    public int _fps = 10;

    private Vector2 _size;
    private Renderer _myRenderer;
    private Vector2 offset;
    public int frame;

    void Start()
    {
        _size = new Vector2(1.0f / _uvTieY * ((float)_uvTieY / _uvTieX), 1.0f / _uvTieX / ((float)_uvTieY / _uvTieX));
        _myRenderer = renderer;
        if (_myRenderer == null)
            enabled = false;
    }
    // Update is called once per frame
    void Update()
    {
        frame = (int)(Time.time*_fps);

        int y = (frame-1) / _uvTieX + 1;
        int x = (frame-1) % _uvTieX;

        offset = new Vector2(x * _size.x, Mathf.Repeat(1-y * _size.y,_uvTieY));

        _myRenderer.material.SetTextureOffset("_MainTex", offset);
        _myRenderer.material.SetTextureScale("_MainTex", _size);

    }
}
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Почему текстура черная всегда? =\

Сообщение Chaz 20 окт 2012, 11:44

waruiyume писал(а):Долго я на него медитировал, но так и не понял как он работает @_@ Попробуйте так:
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class AnimText : MonoBehaviour
{
    public int _uvTieY = 1;
    public int _uvTieX = 1;
    public int _fps = 10;

    private Vector2 _size;
    private Renderer _myRenderer;
    private Vector2 offset;
    public int frame;

    void Start()
    {
        _size = new Vector2(1.0f / _uvTieY * ((float)_uvTieY / _uvTieX), 1.0f / _uvTieX / ((float)_uvTieY / _uvTieX));
        _myRenderer = renderer;
        if (_myRenderer == null)
            enabled = false;
    }
    // Update is called once per frame
    void Update()
    {
        frame = (int)(Time.time*_fps);

        int y = (frame-1) / _uvTieX + 1;
        int x = (frame-1) % _uvTieX;

        offset = new Vector2(x * _size.x, Mathf.Repeat(1-y * _size.y,_uvTieY));

        _myRenderer.material.SetTextureOffset("_MainTex", offset);
        _myRenderer.material.SetTextureScale("_MainTex", _size);

    }
}
 

работает гораздо лучше 0_0 !! но цвета так и нет. я вот подумал, мож это в картинке проблема. ща пересохраню в фотошопе
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: Почему текстура черная всегда? =\

Сообщение Chaz 20 окт 2012, 11:53

Chaz писал(а):
waruiyume писал(а):Долго я на него медитировал, но так и не понял как он работает @_@ Попробуйте так:
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class AnimText : MonoBehaviour
{
    public int _uvTieY = 1;
    public int _uvTieX = 1;
    public int _fps = 10;

    private Vector2 _size;
    private Renderer _myRenderer;
    private Vector2 offset;
    public int frame;

    void Start()
    {
        _size = new Vector2(1.0f / _uvTieY * ((float)_uvTieY / _uvTieX), 1.0f / _uvTieX / ((float)_uvTieY / _uvTieX));
        _myRenderer = renderer;
        if (_myRenderer == null)
            enabled = false;
    }
    // Update is called once per frame
    void Update()
    {
        frame = (int)(Time.time*_fps);

        int y = (frame-1) / _uvTieX + 1;
        int x = (frame-1) % _uvTieX;

        offset = new Vector2(x * _size.x, Mathf.Repeat(1-y * _size.y,_uvTieY));

        _myRenderer.material.SetTextureOffset("_MainTex", offset);
        _myRenderer.material.SetTextureScale("_MainTex", _size);

    }
}
 

работает гораздо лучше 0_0 !! но цвета так и нет. я вот подумал, мож это в картинке проблема. ща пересохраню в фотошопе

p.s. помогла смена шейдера на 1 из серии Particles
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14