Переход между локациями...

Программирование на Юнити.

Переход между локациями...

Сообщение igorbukur 03 авг 2014, 18:27

У меня на локации должно быть много точек входа и выхода, как сделать так что бы при переходе в локацию телепортировало персонажа в определенную точку на локации а не на стартовое место.. Если можно то скрипт напишите.. прошууу я в этом 0. Помогите плиз а лучше поясните как действует данный скрипт строка за строкой я уверен он небольшой.... Зарание всем большое спасибо!
Вот то что я уже сделал:
igorbukur
UNец
 
Сообщения: 6
Зарегистрирован: 03 авг 2014, 18:21

Re: Переход между локациями...

Сообщение StickMan9281 03 авг 2014, 19:09

Ты смог сделать такую непростою игру, и не можешь справиться с этой мелочью?
igorbukur писал(а):Если можно то скрипт напишите.. прошууу я в этом 0.

Как я понял, ты 0 в скриптинге. Тогда объясни, как ты смог сделать то, что демонстрирует ролик(там очень много скриптов)?
StickMan9281
UNIт
 
Сообщения: 53
Зарегистрирован: 06 май 2014, 16:00

Re: Переход между локациями...

Сообщение igorbukur 03 авг 2014, 19:12

Все просто это плагин PLYGAME который полностью отключает скриптинг ПОТРЕБНОСТЬ В НЕМ но данный плагин не идеален.. изза этого все же приходиться использовать скрипты... в этом плагине тонна скриптов готовых ... Но нет такого простого..
igorbukur
UNец
 
Сообщения: 6
Зарегистрирован: 03 авг 2014, 18:21

Re: Переход между локациями...

Сообщение igorbukur 03 авг 2014, 19:20

StickMan9281 писал(а):Ты смог сделать такую непростою игру, и не можешь справиться с этой мелочью?
igorbukur писал(а):Если можно то скрипт напишите.. прошууу я в этом 0.

Как я понял, ты 0 в скриптинге. Тогда объясни, как ты смог сделать то, что демонстрирует ролик(там очень много скриптов)?


Все просто это плагин PLYGAME который полностью отключает скриптинг ПОТРЕБНОСТЬ В НЕМ но данный плагин не идеален.. изза этого все же приходиться использовать скрипты... в этом плагине тонна скриптов готовых ... Но нет такого простого..
igorbukur
UNец
 
Сообщения: 6
Зарегистрирован: 03 авг 2014, 18:21

Re: Переход между локациями...

Сообщение Neodrop 05 авг 2014, 02:35

Тут вам вряд ли кто-то на пустом месте поможет. Чёрт его знает, как этот плагин PLYGAME работает, поэтому влезть в программную логику просто не откуда. :-??
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Переход между локациями...

Сообщение bwolf88 05 авг 2014, 23:26

Простите за нескромный вопрос, а сколько времени Вы потратили на изучение этого плагина и разработку игры что на видео ?

А по скриптам, если это внутриАссетовые скрипты - то скорей всего вам мало чем помогут, посколько кто его знает чего там автор намутил.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Переход между локациями...

Сообщение igorbukur 06 авг 2014, 00:30

bwolf88 писал(а):Простите за нескромный вопрос, а сколько времени Вы потратили на изучение этого плагина и разработку игры что на видео ?

А по скриптам, если это внутриАссетовые скрипты - то скорей всего вам мало чем помогут, посколько кто его знает чего там автор намутил.


День, плагин простой до безобразия.. Я был немного не прав этот плагин не ОТКЛЮЧАЕТ скриптыон просто предоставляет набор готовых очень крутых скриптов возможносать создавать те же скрипты спомощью готовых блоков.. Так вот мне нужен просто скрипт с загрузкоой локации и пренесение игрока в точку. Игрок с тегом Player... Так же на экране вы видите плагин НГУИ на него я потратил час.. пока что hp и mp не изменяються на экране... Тоесть урон наноситься игроку но он не отображаеться на экране.. Так что насчет скрипта телепортации?
igorbukur
UNец
 
Сообщения: 6
Зарегистрирован: 03 авг 2014, 18:21

Re: Переход между локациями...

Сообщение bwolf88 06 авг 2014, 08:17

Я могу набросать простой скрипт, точнее даже я бы сказал логическую структуру. Но скрипт придется допиливать уже самому, я же не знаком с внутренностями плагина и кода.
Вообще вариантов реализации несколлько напишу самый на мой взгляд простой одним скелетом скрипта.

Синтаксис:
Используется csharp
//Допустим есть две сцены Level1 и Level2

public String Lvl1, Lvl2;

//временная переменная для помещения позиций точки входа
string Pos;

//в этих сценах есть допустим по две точки входа с некими координатами в которые может телепортироваться игрок
public Vector3 Point1_1, Point1_2, Point2_1, Point2_2;

//временная переменная для активации точки телепорта
Vector3 teleport;

//естественно что если точек много то лучше использовать массивы или списки

Ну и естественно префаб игрока
public GameObject Player;

void Awake()
{
         Lvl1 = "Level1";
         Lvl2 = "Level2";
        //точки первой сцены
         Point1_1 = new Vector3(0,1,1); Point1_2 = new Vector3(2,1,1);
        //точки второй сцены
         Point2_1 = new Vector3(3,1,1); Point2_2 = new Vector3(4,1,1);
}

//Функцию старт пока пропускаем и идем ниже в функцию LoadLvl
void Start()
{//в новой сцене все скрипты грузятся заново
    (if (PlayerPrefs.HasKey("LoadTeleportPoint")) //если есть строка загрузки телепорта в PlayerPrefs
     {
            PlayerPrefs.GetString("LoadTeleportPoint");
          //  далее получаем массив координат, разбивая строку с помощью разделителя ","
          string[] coord= StrBlocks.Split(new char[]{ ',' }, System.StringSplitOptions.RemoveEmptyEntries);
          //Далее присваиваем точке телепорта координаты
          teleport = new Vector3(coord[0], coord[1], coord[2]);

          и инстантим игрока в точке телепорта
          Instantiate (Player, teleport, Quaternion.identity);
         
          //удаляем строку PlayerPrefs
          PlayerPrefs.DeleteKey("LoadTeleportPoint");
         
      }
}


void Update()
{
LoadLvl();
}

//допустим при нажитии на кнопку "1" нужно загрузить вторую сцену, так что бы игрок телепортировался в точку Point2_1

void LoadLvl()
{
     if (Input.GetKeyDown(KeyCode.Alpha1))
      {//записываем координаты телепорта в строку
          Pos = string.Format("{0},{1},{2}", Point2_1.x, Point2_1.y, Point2_1.z);
       //сохраняем строку в PlayerPrefs
          PlayerPrefs.SetString("LoadTeleportPoint", Pos);
      }
    //грузим вторую сцену и переходим в Start
      Application.LoadLevel("Level2");//или можно было указать переменную, а далее переходим в функцию Start этого же скрипта (то есть выше)
}


 


Вот примерно вот такой скрипт. Конечно если подумать многое можно успростить, но писал специально более полно и развернуто чтобы было видно пошагово, как это дело происходит.

Работать скорей всего не будет, потому что переменные с потолка и нужно перепиливать под свои значения, но логика правильная. Ественно скрипт должен присутствовать во всех сценах.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Переход между локациями...

Сообщение glebster51 10 янв 2021, 18:45

Ребята, я понимаю что ветка уже 6 лет как мертвая, но если вдруг кто сюда зяглянет, то я написал относительно удобный инструмент для этой задачи, но для 2д игры.
Вдруг кто - то еще ищет, вот код.
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Linq;

[RequireComponent(typeof(BoxCollider2D))]
public class TransitionPoint : MonoBehaviour
{
    public enum SpawnPointTypes
    {
        Red,
        Green,
        Blue,
        Yellow,
        Magenta,
        Cyan,
        White,
        Black,
        Gray
    }

    // Цвет перехода, должен соответствовать цвету входа на следующей сцене.
    public SpawnPointTypes color;
    // Точное имя сцены на которое нужно перейти (все сцены должны быть добавлены в Build Settings)
    public string toLocalName;
    public float gizmoSize = 0.1f;
    // переключатель активности триггера перехода, чтобы игрок не переходил мгновенно обратно при появлении.
    private bool canInteract;
    // ключ для записи в PlayerPrefs
    private static string transitionKey = "TransitionColor";


    // Рисование Gizmo в окне Scene
    private void OnDrawGizmos()
    {
        Color c =
            color == SpawnPointTypes.Black ? Color.black :
            color == SpawnPointTypes.Blue ? Color.blue :
            color == SpawnPointTypes.Cyan ? Color.cyan :
            color == SpawnPointTypes.Gray ? Color.gray :
            color == SpawnPointTypes.Green ? Color.green :
            color == SpawnPointTypes.Magenta ? Color.magenta :
            color == SpawnPointTypes.Red ? Color.red :
            color == SpawnPointTypes.White ? Color.white :
            Color.yellow;
        c.a = 0.35f;
        Gizmos.color = c;
        var bc2d = gameObject.GetComponent<BoxCollider2D>();
        Gizmos.matrix = transform.localToWorldMatrix * Matrix4x4.Scale(new Vector3(1f, 1f, 0.02f));
        Gizmos.DrawCube(bc2d.offset, bc2d.size);
        c.a = 0.75f;
        Gizmos.color = c;
        Gizmos.matrix = Matrix4x4.identity;
        Gizmos.DrawSphere(transform.position, gizmoSize);
    }
   
    //============================================================

    private void Awake()
    {
        canInteract = false;
        var bc2d = gameObject.GetComponent<BoxCollider2D>();
        bc2d.isTrigger = true;
        StartCoroutine(DelayEnabler());
    }

    IEnumerator DelayEnabler()
    {
        yield return new WaitForSeconds(2f);
        canInteract = true;
    }

    private void OnTriggerExit2D(Collider2D other)
    {
        if (other.gameObject.tag == "Player")
            canInteract = true;
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        // если триггер уже активен и в него вошел игрок
        if (canInteract && other.gameObject.tag == "Player")
        {
            // если сцена с заданным ключом существует, записать цвет перехода и загрузить следующую сцену.
            if (Application.CanStreamedLevelBeLoaded(toLocalName))
            {
                PlayerPrefs.SetInt(transitionKey, (int) color);
                SceneManager.LoadScene(toLocalName);
            }
        }
    }
   
    //========= Методы для вызова из контроллера игрока =========

    public static FindPointResult FindEnterPoint()
    {
        SpawnPointTypes transitionColor = (SpawnPointTypes) PlayerPrefs.GetInt(transitionKey);
        var tPoints = FindObjectsOfType<TransitionPoint>();
        TransitionPoint tp = tPoints.FirstOrDefault(T => T.color == transitionColor);
        if (tp)
            return new FindPointResult(true, tp.transform.position);
        return new FindPointResult(false, Vector3.zero);
    }
   
   
    public struct FindPointResult
    {
        public bool found;
        public Vector3 pos;

        public FindPointResult(bool found, Vector3 pos)
        {
            this.found = found;
            this.pos = pos;
        }
    }

}
 

Расставляем на сцене точки,
Вешаем на них этот скрипт, выбираем цвет и пишем имя сцены, куда переходим.
Двигаем коллайдер по желанию.
В инициализации игрока или его контроллера пишем вот такие строчки
Синтаксис:
Используется csharp
   
void Init()
    {
        var enterPoint = TransitionPoint.FindEnterPoint();
        transform.position = enterPoint.found ? enterPoint.pos : transform.position;
    }
 

Всё, ваше RPG мечты почти готово!
Осталось только собрать локации!) (полная Ж)
Аватара пользователя
glebster51
UNец
 
Сообщения: 4
Зарегистрирован: 10 янв 2021, 18:06


Вернуться в Скрипты

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

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