forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

pax 27.12.2011 10:36

Ответ: Фак по Юнити.
 
Задай так же Break Torque

Andvrok 29.12.2011 21:52

Ответ: Фак по Юнити.
 
И еще вопросик: как определить, сколько силы было приложено к объекту?

Taugeshtu 29.12.2011 22:32

Ответ: Фак по Юнити.
 
Цитата:

как определить, сколько силы было приложено к объекту?
Напрямую - никак. Брать rigidbody.velocity за прошлый такт, брать за текущий, вычислять ускорение, по формуле F = m*a находить силу.

Andvrok 29.12.2011 22:55

Ответ: Фак по Юнити.
 

Taugeshtu 30.12.2011 00:06

Ответ: Фак по Юнити.
 
Отнять из одного вектора другой, разделить результат на переменную, домножить на массу и получить в результате силу - это так сложно, что проще повеситься?

Andvrok 30.12.2011 01:41

Ответ: Фак по Юнити.
 
Для меня, как для человека, никогда не занимавшегося физикой в Unity, это достаточно сложно.

Разберусь с приложенной физикой на досуге. Сейчас беспокоит другой вопрос: как заставить физику вести себя более "непредсказуемо". На данный момент, например, шар, падающий на куб и отскакивающий от него, всегда будет отскакивать под одним и тем же углом. Можно ли как-то внести в это процесс долю разнообразия?

pax 30.12.2011 07:07

Ответ: Фак по Юнити.
 
Открываешь сообщение на редактирование и там есть кнопка удалить.

Lestar 30.12.2011 13:57

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 215751)
там есть кнопка удалить.

Кэп говорит, что простым смертным она недоступна.

pax 30.12.2011 14:25

Ответ: Фак по Юнити.
 
Хм.. странно, думал всегда была.

Lowlet 06.01.2012 03:16

Ответ: Фак по Юнити.
 
Я ищу объект по имени.Не пойму,как должно выглядеть условие того,что этот объект не найден?

pax 06.01.2012 04:03

Ответ: Фак по Юнити.
 
Как-то так

PHP код:

var obj GameObject.Find("Name");
if(
obj == null)
{
  
// не найден



Lowlet 06.01.2012 04:12

Я так делал,но не вышло.Попробую еще раз

Закралась глупая ошибка)Все получилось,спасибо за помощь

Nuprahtor 07.02.2012 22:32

Ответ: Фак по Юнити.
 
Случайно сегодня открыл, что Unity может считывать Loop-метки в .wav звуковых файлах. Однако при пережимании в самом редакторе метки пропадают. Значит ли это, что сжатые аудио-файлы не сохраняют метки, или это нехороший баг юнити и его можно научить сохранять метки при пережимании звука?

Lowlet 12.02.2012 02:25

Ответ: Фак по Юнити.
 
Что быстрее в плане производительности, Array или ArrayList? И в каких случаях предпочтительней использовать первое,а в каких второе?

pax 12.02.2012 11:51

Ответ: Фак по Юнити.
 
Если это JS и допускается добавлять элементы в массив динамически, то лучше ArrayList.

Lowlet 15.02.2012 00:11

Ответ: Фак по Юнити.
 
Как сделать всплывающие подсказки в инспекторе,при наведении на переменную?

pax 15.02.2012 09:10

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Lowlet (Сообщение 219521)
Как сделать всплывающие подсказки в инспекторе,при наведении на переменную?

http://unity3d.com/support/documenta...UIContent.html
Обрати внимание на свойство tooltip

Lowlet 15.02.2012 17:26

Ответ: Фак по Юнити.
 
Плохо выразился.Я имел ввиду подсказки в редакторе,а не рантайм.Нашел EditorGUILayout.HelpBox -это оно?

pax 15.02.2012 17:54

Ответ: Фак по Юнити.
 
Вложений: 1
Хоть бы попробовал:

PHP код:

using UnityEditor;
using UnityEngine;

[
CustomEditor(typeof(Transform))]
public class 
TransformEditor Editor {

    public 
override void OnInspectorGUI()
    {
        
DrawDefaultInspector();

        
GUIContent content = new GUIContent("Кнопка с тултипом","Тултип кнопки");
        
GUILayout.Button(content);
    }



Lowlet 15.02.2012 19:13

Ответ: Фак по Юнити.
 
Спасибо.Я тупой:)

WISHMASTER35 19.02.2012 01:50

Ответ: Фак по Юнити.
 
Как можно EnumPopup красиво нарисовать?
Написал так:
Код:

Rect rect_angles = EditorGUILayout.BeginHorizontal();
GUI.Box(rect_angles, GUIContent.none);
angle = (Angles)EditorGUILayout.EnumPopup("Angle: ", angle);
EditorGUILayout.EndHorizontal();

Но получилось фиговенько http://dl.dropbox.com/u/55489242/Til..._editor_v1.png
Слева отступа нету. Между строкой и enum большой разрыв. Да и вообще в обычно используются не box, а какой-то другой элемент типа кнопки, но который не жмется.

pax 19.02.2012 02:02

Ответ: Фак по Юнити.
 
Тоже самое можно выполнить так:
PHP код:

GUILayout.BeginHorizontal(GUI.skin.box);
angle = (Angles)EditorGUILayout.EnumPopup("Angle: "angle);
GUILayout.EndHorizontal(); 

Попробуй перед выводом выполнить одну из этих функций:
EditorGUIUtility.LookLikeInspector
EditorGUIUtility.LookLikeControls

Так же можно попробовать:
PHP код:

angle = (Angles)EditorGUILayout.EnumPopup("Angle: "angleGUI.skin.button); 

Upd: кстати отступ делается через GUILayout.Space(отступ):

PHP код:

GUILayout.BeginHorizontal(GUI.skin.box);
GUILayout.Space(20):
angle = (Angles)EditorGUILayout.EnumPopup("Angle: "angle);
GUILayout.EndHorizontal(); 


WISHMASTER35 25.02.2012 15:41

Ответ: Фак по Юнити.
 
В документации заметил небольшую ошибку. http://unity3d.com/support/documenta...Hierarchy.html
Лучше это делать так:
createdGO.hideFlags |= HideFlags.HideInHierarchy;
createdGO.hideFlags &= ~HideFlags.HideInHierarchy;
А то потом нельзя будет вручную удалить объект из иерархии.
Не знаю можно ли им об этом как-то написать.

pax 25.02.2012 16:00

Ответ: Фак по Юнити.
 
Что значит вручную удалить?

Сопоставь свой результат с:
PHP код:

[Flags]
public 
enum HideFlags
{
    
HideInHierarchy 1,
    
HideInInspector 2,
    
DontSave 4,
    
NotEditable 8,
    
HideAndDontSave 13


И напиши что получилось.

WISHMASTER35 25.02.2012 16:40

Ответ: Фак по Юнити.
 
Цитата:

Что значит вручную удалить?
Выделить в иерархии GO и нажать Delete.
По началу значение hideFlags = 0.
После hideFlags |= HideFlags.HideInHierarchy; равно как и надо HideInHierarchy
После hideFlags &= ~HideFlags.HideInHierarchy; равно как и надо 0.
А если делать как я раньше делал hideFlags = ~HideFlags.HideInHierarchy; то получается бред: HideInInspector, DontSave, NotEditable.

pax 26.02.2012 05:55

Ответ: Фак по Юнити.
 
Да где ошибка в документации то?

WISHMASTER35 26.02.2012 13:53

Ответ: Фак по Юнити.
 
Я вот не совсем понял. Можно же несколько флагов задавать?
Тогда же их надо не просто через "=" задавать, а через "|=".
Не ошибка, но лучше бы что бы они написали как задавать и снимать несколько флагов.

pax 26.02.2012 14:19

Ответ: Фак по Юнити.
 
Зачем им переписывать справку по C#?
Да можно назначать несколько атрибутов, но это относится к C# а не к Unity.

Несколько атрибутов можно назначить так:
PHP код:

var hideFlags HideFlags.HideInHierarchy|HideFlags.DontSave


pie 28.02.2012 18:44

Ответ: Фак по Юнити.
 
Незнал куда разместить. Вот урок по созданию декалей. На Английском.

Part 1

Part 2

Nuprahtor 24.03.2012 13:40

Ответ: Фак по Юнити.
 
Мне хочется такую приблуду, которая будет считать чистое время, проведенное за разработкой определенного проекта.
Пробежался по классу Editor и нашел лишь EditorApplication.timeSinceStartup, которая, надо полагать, считает время со старта открытия проекта, и позволит сохранять его. Еще нужно автоматическое создание файла, в котором будет хранится значение времени.
Что для этого может понадобиться?

pax 24.03.2012 13:44

Ответ: Фак по Юнити.
 
Честно говоря не могу предложить лучшего варианта, чем при запуске проекта нажимать на кнопку и записывать системное время старта, а перед выходом - записывать время выхода. Мы не смогли найти способ запустить что-то при старте редактора.

Nuprahtor 24.03.2012 13:47

Ответ: Фак по Юнити.
 
Оу. Понятно.

pax 24.03.2012 13:51

Ответ: Фак по Юнити.
 
С другой стороны можно использовать какую-то внешнюю программу, которая может считать время работы Unity.

Nuprahtor 24.03.2012 13:57

Ответ: Фак по Юнити.
 
Я просматривал такие программы, они считывают время Unity, но в целом, а я хотел бы такую фичу для каждого проекта (как в FL Studio, например, или в MapZone2).
Все же, проживу и без этой фичи.

WISHMASTER35 25.03.2012 16:57

Ответ: Фак по Юнити.
 
Как же плохо, что в инспекторе не отображаются свойства. Можно как-то обработать изменение поля в инспекторе?
Есть у меня скрипт Plane. Для удобства я в скрипте добавляю, настраиваю и скрываю MeshFilter и MeshRenderer. Но нужно как-то из скрипта Plane изменять материал. Да и не плохо было бы поле сделать, которое изменяло бы цвет, причем не материала, а вершин, для большей скорости.

pax 25.03.2012 17:44

Ответ: Фак по Юнити.
 
http://unity3d.com/support/documenta...ce/Editor.html

WISHMASTER35 25.03.2012 18:45

Ответ: Фак по Юнити.
 
к Editor'у всегда можно обратиться.
В чем отличие sharedMaterial от material? Я так понимаю sharedMaterial надо использовать для чтения, а material для записи, но почему так.
И я так понимаю в шейдере можно отключить цвет вершин? А то в Unlit шейдерах цвет не работает(

pax 25.03.2012 19:07

Ответ: Фак по Юнити.
 
sharedMaterial общий материал на все экземпляры, при изменении - меняется ан всех моделях, material - индивидуальный(становится индивидуальным при изменении)
Можно включить, в большинстве случаев он не используется.

WISHMASTER35 25.03.2012 19:49

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 223669)
Можно включить, в большинстве случаев он не используется.

Только, если через материал изменять цвет, то батчинг перестает работать(
Сейчас заметил какую-то странность. Есть поле [SerializeField] private Color color; Если в редакторе я его изменяю в своем Editor'е, то при запуске игры цвет меняется на прежний, а если через дефолтный инспектор меняю, то все норм. Как это понимать? Да и раньше не сталкивался с таким. Скрипт помечен как ExecuteInEditMode.

pax 25.03.2012 20:33

Ответ: Фак по Юнити.
 
http://unity3d.com/support/documenta....SetDirty.html

SaM_ 28.03.2012 19:12

Ответ: Фак по Юнити.
 
Делаю пик-ап предметов.
Система для подъема такая: если персонаж находится на каком-то расстоянии от предмета с тегом 'tk', то при нажатии клавиши персонаж его "подымает", при нажатии той же клавиши еще раз - "бросает".

Проблема в том, что если положить префаб предмета на сцену при её редактировании и запустить проект, то поднять этот предмет персонаж сможет. При бросании спавнится предмет из того-же прифаба, с тем же тегом, но его поднять уже не получается. Почему?

moka 28.03.2012 19:44

Ответ: Фак по Юнити.
 
Каким образом ты находишь список предметов, исходя из которых вычисляешь расстояние и далее поднимаешь?
Видимо ошибко в твоём коде, где-то логически ты возможно указал конкретный предмет, что использует его идентификатор, и при повторном спауне, его идентификатор меняется.

pax 28.03.2012 19:59

Ответ: Фак по Юнити.
 
Пример:

PHP код:

private GameObject pickedGO null;
    public 
float distance;

    public 
void Update()
    {
        if(
Input.GetMouseButtonDown(0))
        {
            if(
pickedGO!= null)
            {
                Throw(
pickedGO);
                
pickedGO null;
            }
            else
            {

                var 
distToPickedObject float.MaxValue;
                
GameObject picked null;
                foreach (var 
obj in GameObject.FindGameObjectsWithTag("tk"))
                {
                    var 
dist Vector3.Distance(obj.transform.positiontransform.position);
                    if(
dist<distToPickedObject)
                    {
                        
distToPickedObject dist;
                        
picked obj;
                    }
                }

                if (
picked != null && distToPickedObject <= distance)
                {
                    
PickUp(picked);
                    
pickedGO picked;
                }
            }
        }
    } 

функции Throw и PickUp надо создать самостоятельно для обработки бросания и подбора объекта соответственно.

SaM_ 28.03.2012 20:02

Ответ: Фак по Юнити.
 
MoKa, вот так я определяю предмет:
Код:

obj_rv_wp = GameObject.FindGameObjectWithTag("rv01").transform;
Так расстояние ('private Transform thtr;'):
Код:

Vector3.Distance(obj_rv_wp.position, thtr.position) < 4.0f
Ключевую роль здесь играет тег. Я попробовал заспавнить несколько одинаковых объектов из одного прифаба - теги у всех одинаковые. Но скрипт реагирует на предмет с тем же тегом, но установленным на сцену при её редактировании.

moka 28.03.2012 20:36

Ответ: Фак по Юнити.
 
FindGameObjectWithTag, возвращает один объект, а не список объектов.
Тебе нужен список объектов, и затем цикл с проверкой на расстояния.
Посмотри на пример который привёл pax.

SaM_ 28.03.2012 22:02

Ответ: Фак по Юнити.
 
Как исправить данную ошибку? Скрипт не может найти предмет, координаты которого я пытаюсь узнать, хотя на сцене он присутствует.
Цитата:

error CS1061: Type `UnityEngine.GameObject' does not contain a definition for `position' and no extension method `position' of type `UnityEngine.GameObject' could be found (are you missing a using directive or an assembly reference?)
Код:

GameObject[] weaps = GameObject.FindGameObjectsWithTag("rv");
foreach (GameObject weap in weaps) {
  if  (Vector3.Distance(weap.position, myTransform.position) < 4.0F) {
    if (Input.GetKeyUp("g")) {
      weapon2_e = true; weapon1_e = false; weapon2_e = false;
      weapon2_rv_pick = true; }
    }
}


pax 28.03.2012 22:10

Ответ: Фак по Юнити.
 
weap.transform.position

SaM_ 28.03.2012 22:22

Ответ: Фак по Юнити.
 
Спасибо, работает. Сразу задам еще один вопрос :-D
Как сделать задержку в скрипте? Задача такая: при нажатии клавиши начинает играть анимация стрельбы и в тот же момент стреляет луч. Анимация длится 1с, за это время можно несколько раз нажать клавишу, соответственно несколько раз запустить луч.
За луч отвечает один скрипт, а за анимацию - другой.
Пробовал применить WaitForSeconds после нажатия на клавишу, что бы луч повторно не вылетал, но результата 0, хотя ошибок не выдает:
PHP код:

IEnumerator Wait() {
yield return new 
WaitForSeconds(1);


В Update():
PHP код:

if (Input.GetKeyDown("mouse 0")) 
Fire1(); Wait(); } 


WISHMASTER35 28.03.2012 22:25

Ответ: Фак по Юнити.
 
Что я не так делаю?
Есть скрипт [ExecuteInEditMode] с полем [SerializeField] private MyChar[] characters
И класс
Код:

[System.Serializable]
public class MyChar {
       
        public readonly int width;
        public readonly Vector2 offset;
        public readonly Rect rect;
        public readonly char code;
       
        public MyChar(int width, Vector2 offset, Rect rect, char code) {
                this.width = width;
                this.offset = offset;
                this.rect = rect;
                this.code = code;
        }
       
}

Все поля этого класса вечно сбрасываются (: Например после перекомпиляции какого-то левого скрипта.

WISHMASTER35 28.03.2012 22:28

Ответ: Фак по Юнити.
 
SaM_, лучше проверяй играет или не играет твоя анимация стрельбы.

pax 28.03.2012 22:45

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 223939)
Что я не так делаю?

readonly

WISHMASTER35 28.03.2012 22:48

Ответ: Фак по Юнити.
 
Оно и без readonly так же.

pax 28.03.2012 22:49

Ответ: Фак по Юнити.
 
удали конструктор

SaM_ 28.03.2012 22:51

Ответ: Фак по Юнити.
 
S
Цитата:

aM_, лучше проверяй играет или не играет твоя анимация стрельбы.
За луч отвечает один скрипт, а за анимацию - другой.
Как ссылаться на анимацию из другого скрипта?

WISHMASTER35 28.03.2012 23:06

Ответ: Фак по Юнити.
 
SaM_, Кажется так animations[name].
pax, и без конструктора тоже(

pax 28.03.2012 23:14

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 223947)
pax, и без конструктора тоже(

без конструктора и без readonly? Ищи код, сбрасывающий параметры тогда. Ошибка именно там.

WISHMASTER35 29.03.2012 00:22

Ответ: Фак по Юнити.
 
Бред какой-то. Сбрасывается только char code на 0. Может в юнити чары не сохраняются?
А есть какие-то нормальные бесплатные аналоги NGUI для мобильных платформ?
Видел один пример своего gui, там все объекты вручную объединялись в один меш. В этом есть какой-то смысл? Ведь динамический батчинг это должен сделать лучше т.к. должен иметь прямой доступ к данным меша.

pax 29.03.2012 01:28

Ответ: Фак по Юнити.
 
char - не сериализуется в Unity

SaM_ 29.03.2012 02:08

Ответ: Фак по Юнити.
 
Как использовать переменную из другого скрипта в данном скрипте? На jawa , помнится, что-то вроде имяскрипта.имяпеременной, а вот на C# это не срабатывает...

Lestar 29.03.2012 02:21

Ответ: Фак по Юнити.
 
Запрашиваемая переменная должна быть public static. Обращаться ScriptName.varName;

SaM_ 29.03.2012 15:11

Ответ: Фак по Юнити.
 
Lestar, если переменная меняет свое значение по ходу работы скрипта, ScriptName.varName будет обновляться во втором скрипте или примет дефолтное значение?

pax 29.03.2012 15:37

Ответ: Фак по Юнити.
 
Статическая переменная единая для всех участков программы. Изменив в одном месте будет до конца работы программы с новым значением.

SaM_ 29.03.2012 16:32

Ответ: Фак по Юнити.
 
Я реализовал стрельбу методом луча. Все прекрасно работает.
Но вот проблема. Если предмет лежит вплотную к другому предмету с коллайдером, то когда я стреляю в него с близкого расстояния - он проходит через тот заде лежащий предмет.

WISHMASTER35 29.03.2012 19:46

Ответ: Фак по Юнити.
 
SaM_, первый предмет проходит сквозь второй? Что ты с ним делаешь при стрельбе?


Часовой пояс GMT +4, время: 01:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot