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

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 02 мар 2012, 19:28
waruiyume
Не текстуры, а материала и то если только, выставлять через "renderer.material", а не через "renderer.sharedMaterial".
<<память не очищается>>- пруф?

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 02 мар 2012, 20:52
Friend123
artk писал(а):Вам, лучше, не стоит использовать "прокрутку" текстуры. При изменении uv текстуры - создается ее копия, память не очищается.

А я сделал материал, на него текстуру, и прокручиваю через renderer.material.SetTextureOffset. Так будет нормально? К сожалению, другого способа не знаю

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 02 мар 2012, 21:19
artk
renderer.sharedMaterial

Спасибо, что-то пропустил. Под "не очищается память", я имел в виду, - остается копия материала в памяти и после удаления со сцены. Skydome, имхо, будет удобнее, если космос будет большим и с 3D элементами в фоне.

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 02 мар 2012, 21:37
Friend123
artk писал(а):Skydome, имхо, будет удобнее, если космос будет большим и с 3D элементами в фоне.

SkyDome может и удобнее, но не знаю, 3D элементов на фоне не будет, хочу сделать дальний слой-бэкграунд, там просто должна быть статичная картинка, прокручивающайся по ходу полета корабля, второй слой - чуть ближе - там уже можно делать звезды, кометы, космическую пыль, и третий слой - там где происходит всё действие - полет, бои, планеты и т.д.

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 04 мар 2012, 00:21
Friend123
В общем, почти разобрался с технологией, с бэкграундом осталось сделать последнее - сделать скролл материала бэкграунда против движения корабля. Ну т.е. движется корабль по оси X+, фон скроллиться по X-. Я так понимаю, для этого мне нужно вычислить разницу между текущим положением объекта и старым положением в последнем кадре... или может проще есть какие-то методы?

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 04 мар 2012, 03:32
Order
Двигай корабль и двигай зеркально текстуру с коэффициентами.

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 04 мар 2012, 12:04
Friend123
Order писал(а):Двигай корабль и двигай зеркально текстуру с коэффициентами.

Вот в этом и загвоздка, не могу продумать... как вычислить этот коэффициент

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 06 мар 2012, 10:24
Friend123
Потратил уже достаточно времени, постепенно пришел к другому решению - незачем скроллить текстуру, возможно и правда много памяти отъест программа, поэтому придумал более простое решение - двигать плоскость с бэкграундом вместе с игроком. Формула такова: координата плоскости = предыдущая позиция + скорость движения игрока + поправочный коэффициент. Получается немного горбато, она движется то быстро, то медленно, не в такт одним словом. Игрок двигается так:
Синтаксис:
Используется csharp
player.position += player.forward * speed * Time.deltaTime;
 


А плоскость так двигать не получится, только через задание координат Vector3. Вот код:
Синтаксис:
Используется csharp
void Update () {               
        pos = new Vector3(player.position.x, transform.position.y, player.position.z);
               
        // Дельта позиций игрока
        float dposX = pos.x - oldpos.x;
        float dposZ = pos.z - oldpos.z;
        // Получаем скорость игрока из другого скрипта
        float playerSpeed = player.GetComponent<PlayerControl>().speed;
               
        // Поправочный коэффициент               
        if(dposX > 0){ moveX = playerSpeed + (-0.0005f); }
        else if(dposX < 0){     moveX = playerSpeed * 0.0005f; }
        else{ moveX = 0; }
               
        if(dposZ > 0){ moveZ = playerSpeed + (-0.0005f); }
        else if(dposZ < 0){     moveZ = playerSpeed + 0.0005f; }
        else{ moveZ = 0; }
               
        transform.position = new Vector3(transform.position.x + moveX, transform.position.y, transform.position.z + moveZ);
               
        oldpos = new Vector3(player.position.x, transform.position.y, player.position.z);
               
}
 

Возможно, всё делается намного проще, чем делаю я...

UPDATE. Посидел, поковырялся и сделал то, что надо. Скорость игрока берем из дельты позиций - вот оказалось вовсе простое решение. Выкладываю код, может кому понадобится:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Background : MonoBehaviour {
       
        public Transform player;

        private float scrollSpeed = 0.03f;
        private Vector3 pos;
        private Vector3 oldpos;
        private float moveX;
        private float moveZ;
       
        // Use this for initialization
        void Start () {
                            // Условная позиция, может быть любая
                transform.position = new Vector3(player.position.x, transform.position.y, player.position.z);
                oldpos = new Vector3(0,0,0);
                moveX = 0;
                moveZ = 0;
        }
       
        // Update is called once per frame
        void Update () {               
                pos = new Vector3(player.position.x, transform.position.y, player.position.z);
               
                // Дельта позиций игрока
                float dposX = pos.x - oldpos.x;
                float dposZ = pos.z - oldpos.z;
               
                // Z- вниз, Z+ вверх, X- влево, X+ вправо (поправочные коэффициенты)        
                if(dposX > 0){ moveX = -scrollSpeed; }
                else if(dposX < 0){     moveX = scrollSpeed; }
                else{ moveX = 0; }
               
                if(dposZ > 0){ moveZ = -scrollSpeed; }
                else if(dposZ < 0){     moveZ = scrollSpeed; }
                else{ moveZ = 0; }
               
                // Двигаем задник по позиции игрока + поправочный коэффициент
                transform.position = new Vector3(transform.position.x + dposX + moveX, transform.position.y, transform.position.z + dposZ + moveZ);
               
                oldpos = new Vector3(player.position.x, transform.position.y, player.position.z);
        }              
}
 

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 06 мар 2012, 18:32
artk
Все же, знаете вы толк в извращениях...

Re: Реализация космоса в 2D аркаде

СообщениеДобавлено: 06 мар 2012, 18:51
Friend123
artk писал(а):Все же, знаете вы толк в извращениях...

Возможно :) на данный момент - это лучшее из предложенных мной и остальными решений. Опыта будет побольше - пересмотрю структуру...