Спаун мышью в редакторе (не realtime). - Форум Игроделов
Чт, 02 Май 2024, 05:21 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Спаун мышью в редакторе (не realtime). (Подскажите, что написать? (JavaScript))
Спаун мышью в редакторе (не realtime).
VolkOrievithДата: Ср, 02 Сен 2015, 17:22 | Сообщение # 1
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Хочу для упрощения сборки сцены написать скрипт для расстановки блоков прямо из редактора щелчками мыши. Наклепал блоков и расставил их мышью, как надо...
Что написать в скрипте?
Как прямо в редакторе пустить луч, определить объект, определить позицию и инстанциировать новый блок рядышком с уже поставленным?
Я писал подобный скрипт, но он был риалтайм, то есть запускаешь игру и расстанавливаешь блоки, а затем сохраняешь в префаб, не выключая сцены, но это не удобно.
 
СообщениеХочу для упрощения сборки сцены написать скрипт для расстановки блоков прямо из редактора щелчками мыши. Наклепал блоков и расставил их мышью, как надо...
Что написать в скрипте?
Как прямо в редакторе пустить луч, определить объект, определить позицию и инстанциировать новый блок рядышком с уже поставленным?
Я писал подобный скрипт, но он был риалтайм, то есть запускаешь игру и расстанавливаешь блоки, а затем сохраняешь в префаб, не выключая сцены, но это не удобно.

Автор - VolkOrievith
Дата добавления - 02 Сен 2015 в 17:22
ЛевшаДата: Ср, 02 Сен 2015, 20:16 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
ExecuteInEditMode

Makes a script execute in edit mode.

By default, script components are only executed in play mode. By adding this attribute, each script component will also have its callback functions executed while the Editor is not in playmode.

The functions are not called constantly like they are in play mode.
- Update is only called when something in the scene changed.
- OnGUI is called when the Game View recieves an Event.
- OnRenderObject and the other rendering callback functions are called on every repaint of the Scene View or Game View.

Код

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class ExampleClass : MonoBehaviour {
     public Transform target;
     void Update() {
         if (target)
             transform.LookAt(target);
          
     }
}


X.cor.R (Prologue)
 
СообщениеExecuteInEditMode

Makes a script execute in edit mode.

By default, script components are only executed in play mode. By adding this attribute, each script component will also have its callback functions executed while the Editor is not in playmode.

The functions are not called constantly like they are in play mode.
- Update is only called when something in the scene changed.
- OnGUI is called when the Game View recieves an Event.
- OnRenderObject and the other rendering callback functions are called on every repaint of the Scene View or Game View.

Код

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class ExampleClass : MonoBehaviour {
     public Transform target;
     void Update() {
         if (target)
             transform.LookAt(target);
          
     }
}

Автор - Левша
Дата добавления - 02 Сен 2015 в 20:16
VolkOrievithДата: Ср, 02 Сен 2015, 21:59 | Сообщение # 3
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Благодарю, дальше постораюсь сам разобраться. Если будут вопросы, напишу сюда, так что тему закрывать не надо)

Добавлено (02 Сен 2015, 21:59)
---------------------------------------------
Искал, и смотрел скрипт AttachedPathScript из Rpad And Path tool, но не смог понять: как спаунятся точки там, где щелкают мышью на террайне?
"var ray : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);" не подходит, как я понял, т.к. Camera.main - рабочая камера в игре.
Как можно заменить?

 
СообщениеБлагодарю, дальше постораюсь сам разобраться. Если будут вопросы, напишу сюда, так что тему закрывать не надо)

Добавлено (02 Сен 2015, 21:59)
---------------------------------------------
Искал, и смотрел скрипт AttachedPathScript из Rpad And Path tool, но не смог понять: как спаунятся точки там, где щелкают мышью на террайне?
"var ray : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);" не подходит, как я понял, т.к. Camera.main - рабочая камера в игре.
Как можно заменить?


Автор - VolkOrievith
Дата добавления - 02 Сен 2015 в 21:59
seamanДата: Ср, 02 Сен 2015, 22:43 | Сообщение # 4
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Camera.current?
Положение мыши определяем через Event.current.mousePosition (в On...GUI)
рейкаст делаем HandleUtility.GUIPointToWorldRay()
 
СообщениеCamera.current?
Положение мыши определяем через Event.current.mousePosition (в On...GUI)
рейкаст делаем HandleUtility.GUIPointToWorldRay()

Автор - seaman
Дата добавления - 02 Сен 2015 в 22:43
VolkOrievithДата: Чт, 03 Сен 2015, 15:50 | Сообщение # 5
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Благодарю, воспользовался. Получилось вот так:
Код
@script ExecuteInEditMode()
var Prefab : Transform;
var Create : boolean;

function OnGUI () {

var e : Event = Event.current;

if(e.button == 0  && !Create){
Create = true;
}

if(e.button == 1 && Create){
Debug.Log("Right Click");
Create = false;
var ray : Ray = HandleUtility.GUIPointToWorldRay ( e.mousePosition );
var hit : RaycastHit;
if (Physics.Raycast ( ray, hit, Mathf.Infinity)){
Instantiate (Prefab.gameObject, hit.point, Quaternion.identity);
}
}
}


Криво пашет. Часто спаунит по 2 куба за раз, и "if(e.button == 0 && !Create){" не работает. Не приходится нажимать левую мышь, чтобы "Create = true;" Как только отпускаю правую, Create снова = true.
И еще, работает только если перейти в окно Game. Как это избежать, чтобы работало из окна Scene?
Иногда делает так: Жму правой клавишей. Он спаунит куб где нужно, и еще спаунит второй с определенном месте, не знаю, почему именно там.
А еще выдает такую ошибку:


Сообщение отредактировал VolkOrievith - Чт, 03 Сен 2015, 15:51
 
СообщениеБлагодарю, воспользовался. Получилось вот так:
Код
@script ExecuteInEditMode()
var Prefab : Transform;
var Create : boolean;

function OnGUI () {

var e : Event = Event.current;

if(e.button == 0  && !Create){
Create = true;
}

if(e.button == 1 && Create){
Debug.Log("Right Click");
Create = false;
var ray : Ray = HandleUtility.GUIPointToWorldRay ( e.mousePosition );
var hit : RaycastHit;
if (Physics.Raycast ( ray, hit, Mathf.Infinity)){
Instantiate (Prefab.gameObject, hit.point, Quaternion.identity);
}
}
}


Криво пашет. Часто спаунит по 2 куба за раз, и "if(e.button == 0 && !Create){" не работает. Не приходится нажимать левую мышь, чтобы "Create = true;" Как только отпускаю правую, Create снова = true.
И еще, работает только если перейти в окно Game. Как это избежать, чтобы работало из окна Scene?
Иногда делает так: Жму правой клавишей. Он спаунит куб где нужно, и еще спаунит второй с определенном месте, не знаю, почему именно там.
А еще выдает такую ошибку:

Автор - VolkOrievith
Дата добавления - 03 Сен 2015 в 15:50
seamanДата: Чт, 03 Сен 2015, 16:32 | Сообщение # 6
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
On...GUI это не OnGUI!
Это или Editor.OnSceneGUI или Editor.OnInspectorGUI
И не ExecuteInEditMode, а натуральный редактор
 
СообщениеOn...GUI это не OnGUI!
Это или Editor.OnSceneGUI или Editor.OnInspectorGUI
И не ExecuteInEditMode, а натуральный редактор

Автор - seaman
Дата добавления - 03 Сен 2015 в 16:32
VolkOrievithДата: Чт, 03 Сен 2015, 16:56 | Сообщение # 7
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Я понял, что "On...GUI это не OnGUI! ", но когда я пишу "OnSceneGUI", ничего не просходит. Абсолютно. Debug.Log ничего не пишет в консоль.
Заменил "@CustomEditor(SceneEditor)". Опять же ничего не происходит.
Может подскажете, как написать? Я не спец, я учился писать скрипты, просто читая уже написанные кем-то скрипты.
 
СообщениеЯ понял, что "On...GUI это не OnGUI! ", но когда я пишу "OnSceneGUI", ничего не просходит. Абсолютно. Debug.Log ничего не пишет в консоль.
Заменил "@CustomEditor(SceneEditor)". Опять же ничего не происходит.
Может подскажете, как написать? Я не спец, я учился писать скрипты, просто читая уже написанные кем-то скрипты.

Автор - VolkOrievith
Дата добавления - 03 Сен 2015 в 16:56
seamanДата: Чт, 03 Сен 2015, 20:47 | Сообщение # 8
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Я не знаю как в JS написать наследование от класса.Что то типа
Код
public class Spawn extends Editor
{
     function OnSceneGUI()
     {}
}
 
СообщениеЯ не знаю как в JS написать наследование от класса.Что то типа
Код
public class Spawn extends Editor
{
     function OnSceneGUI()
     {}
}

Автор - seaman
Дата добавления - 03 Сен 2015 в 20:47
VolkOrievithДата: Ср, 09 Сен 2015, 14:24 | Сообщение # 9
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Много чего испробовал. Плохо у меня это получается.
Подумал, что быстрее будет сделать Realtime редактор. И сделал. Составлю блоки -> нажму "объединить", все пихается под один parent и я сохраняю в префаб.

Добавлено (09 Сен 2015, 14:24)
---------------------------------------------
Если кому-то надо, могу выложить код.

 
СообщениеМного чего испробовал. Плохо у меня это получается.
Подумал, что быстрее будет сделать Realtime редактор. И сделал. Составлю блоки -> нажму "объединить", все пихается под один parent и я сохраняю в префаб.

Добавлено (09 Сен 2015, 14:24)
---------------------------------------------
Если кому-то надо, могу выложить код.


Автор - VolkOrievith
Дата добавления - 09 Сен 2015 в 14:24
ЛевшаДата: Ср, 09 Сен 2015, 19:36 | Сообщение # 10
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Да, в реалТайме все проще. smile
Я себе вот такой конструктор написал:



X.cor.R (Prologue)
 
СообщениеДа, в реалТайме все проще. smile
Я себе вот такой конструктор написал:


Автор - Левша
Дата добавления - 09 Сен 2015 в 19:36
VolkOrievithДата: Сб, 12 Сен 2015, 15:19 | Сообщение # 11
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Красиво)
Особенно понравилась удобная панель, где можно выбрать разные виды одного рода блока.
У меня из визуализации только это: выбранный блок плавает за мышью, чтобы видеть, как ставишь.
Сетка таким образом: берутся координаты и округляются до 1/4 метра.
 
СообщениеКрасиво)
Особенно понравилась удобная панель, где можно выбрать разные виды одного рода блока.
У меня из визуализации только это: выбранный блок плавает за мышью, чтобы видеть, как ставишь.
Сетка таким образом: берутся координаты и округляются до 1/4 метра.

Автор - VolkOrievith
Дата добавления - 12 Сен 2015 в 15:19
Форум Игроделов » UNITY3D » СКРИПТИНГ » Спаун мышью в редакторе (не realtime). (Подскажите, что написать? (JavaScript))
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024