Среда, 27 Ноября 2024, 04:12

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите розобратся в скрипте и доделать меню игры!
LastSmileДата: Четверг, 28 Января 2021, 15:46 | Сообщение # 1
уже был
Сейчас нет на сайте
Здраствуйте! Ситуация такая! Это должно быть меню ля игры! Есть сцена с префабом и сроллом , в которой клонируется экземпляр прифаба на префабе весит код:
Код
1
2
3
4
5
6
7
8
9
10
11
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LoadScene : MonoBehaviour
{
    public void Level_1_1_Scene()
    {
        SceneManager.LoadScene(2);
    }

}

на самом Scroll View>Viewport>Content весит скрипт который клонирует этот префаб 5 раз :
Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class SnapScrolling : MonoBehaviour
{
    [Range(1,50)]
    [Header("Controllers")]
    public int panCount;
    [Range(0,500)]
    public int panOffset;
    [Range(0f, 20f)]
    public float snapSpeed;
    [Range(0f, 5f)]
    public float scaleOffset;
    [Range(0f, 20f)]
    public float scaleSpeed;
    [Header("Other objects")]
    public GameObject panPrefab;

    public Sprite[] sprites;

    public ScrollRect scrollRect;

    private GameObject[] instPans;

    private Vector2[] pansPos;

    private Vector2[] pansScale;

    private RectTransform contentRect;

    private Vector2 contentVector;

    private int selectedPanID;

    private bool isScrolling;

    

    private void Start()
    {
        contentRect = GetComponent<RectTransform>();
        instPans = new GameObject[panCount];
        pansPos = new Vector2[panCount];
        pansScale = new Vector2[panCount];

        
        
        for (int i=0; i<panCount; i++)
        {
            instPans[i] = Instantiate(panPrefab, transform, false);
            if (i == 0) continue;
            instPans[i].transform.localPosition = new Vector2(instPans[i - 1].transform.localPosition.x + panPrefab.GetComponent<RectTransform>().
            sizeDelta.x + panOffset, instPans[i].transform.localPosition.y) ;
            instPans[i].GetComponent<Image>().sprite = sprites[i];
            //тут нужно вставить подгрузку сцен к клонам префаба//
            pansPos[i] = -instPans[i].transform.localPosition;
            
        }
    }
    private void FixedUpdate()
    {
        if (contentRect.anchoredPosition.x >= pansPos[0].x && !isScrolling || contentRect.anchoredPosition.x <= pansPos[pansPos.Length - 1].x && !isScrolling) ;
            scrollRect.inertia = false;
    
        float nearesPos = float.MaxValue;
        for (int i = 0; i < panCount; i++)
        {

            float distance = Mathf.Abs(contentRect.anchoredPosition.x - pansPos[i].x);

            if (distance < nearesPos)
            {
                nearesPos = distance;
                selectedPanID = i;
            }
            float scale = Mathf.Clamp(1 / (distance / panOffset) * scaleOffset, 0.5f, 1f);
            pansScale[i].x = Mathf.SmoothStep(instPans[i].transform.localScale.x, scale + 0.3f, scaleSpeed * Time.fixedDeltaTime);
            pansScale[i].y = Mathf.SmoothStep(instPans[i].transform.localScale.y, scale + 0.3f, scaleSpeed * Time.fixedDeltaTime);
            instPans[i].transform.localScale = pansScale[i];
        }
        float scrollVelocity = Mathf.Abs(scrollRect.velocity.x);
        if (scrollVelocity < 400 && !isScrolling) scrollRect.inertia = false;

        if (isScrolling || scrollVelocity > 400) return;  
        contentVector.x = Mathf.SmoothStep(contentRect.anchoredPosition.x, pansPos[selectedPanID].x, snapSpeed * Time.fixedDeltaTime);
        contentRect.anchoredPosition = contentVector;
    }
    public void Scrolling(bool scroll)
    {
        isScrolling = scroll;
        if (scroll) scrollRect.inertia = true;
    }

    
}

Я сделал массив из картинок , и подставил из к клонам и работает
Код
1
instPans[i].GetComponent<Image>().sprite = sprites[i];

там просто указал количество и перетянул картини , но как сделать это со сценами , чтобы было по клике на выбранный уровень"картинку, экземпляр " подгружалась сцена (2 , 3 , 4 , 5 ,6 )Помогите!
SpringДата: Четверг, 28 Января 2021, 17:26 | Сообщение # 2
частый гость
Сейчас нет на сайте
Для кода на префабе добавь число, оно будет обозначать номер уровня:
Код

...
public int sceneN;
public void Level_1_1_Scene()
    {
        SceneManager.LoadScene(sceneN);
    }
...

Для скрипта копирующий прифабы, тоже добавить переменную с числом, каждый раз её увеличивать на единицу и вставлять в добавлять в прифаб:
Код

...
int SceneN = 2;
private void Start()
    {
        ...
        for (int i=0; i<panCount; i++)
        {
            ...
            instPans[i].GetComponent<LoadScene>).sceneN= SneceN;
            ... // Строчка с увеличение числа только после его внедрения.
            SneceN = SceneN + 1;
            ...
        }
    }
...


Сообщение отредактировал Spring - Четверг, 28 Января 2021, 17:31
LastSmileДата: Четверг, 28 Января 2021, 18:02 | Сообщение # 3
уже был
Сейчас нет на сайте
Да спасибо огромное всё работает! надо было указать только :int SceneN = 3 а не 2;

Сообщение отредактировал LastSmile - Четверг, 28 Января 2021, 18:14
SpringДата: Четверг, 28 Января 2021, 18:39 | Сообщение # 4
частый гость
Сейчас нет на сайте
Рад помочь)

Сообщение отредактировал Spring - Четверг, 28 Января 2021, 18:40
SelebornДата: Пятница, 19 Февраля 2021, 19:50 | Сообщение # 5
был не раз
Сейчас нет на сайте
лучше попробуй через новое Гуи меню сделать, там все проще и красивше) и менее геморно
  • Страница 1 из 1
  • 1
Поиск:

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