forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

pax 07.02.2012 07:26

Ответ: Вопросы от новичка
 
Unity не поддерживает геометрические шейдеры. Статический батчинг это тоже самое, что и объединение мешей в один большой.

WISHMASTER35 08.02.2012 16:49

Ответ: Вопросы от новичка
 
Как можно сделать такие http://upwap.ru/2011523 два элемента?
GUILayout.SelectionGrid делает отступы между кнопками.
GUILayout.Box не растягивается так по ширине окна.

И можно как-то у GameObject'а скрыть всех потомков? А то не верю, что у Terrain нету дочерних объектов, ведь даже в окне проекта отображается дочерняя текстура.
Вроде так можно скрыть http://unity3d.com/support/documenta...hideFlags.html

Но все же интересно как устроен Terrain. Наверняка разделен на маленькие меши.

pax 08.02.2012 17:56

Ответ: Вопросы от новичка
 
1. попробовать через
http://unity3d.com/support/documenta...uttonLeft.html
http://unity3d.com/support/documenta...ttonRight.html
http://unity3d.com/support/documenta...ButtonMid.html

2. Террейн генерируется, у него есть http://unity3d.com/support/documenta...rrainData.html ассет, по которому все генерируется

WISHMASTER35 08.02.2012 23:57

Ответ: Вопросы от новичка
 
Чтобы Box был по ширине на все окно, надо было написать так GUILayout.Box( "Box", GUILayout.ExpandWidth(true) );
Теперь не пойму каким элементом в Terrain был сделан список деревьев и текстур. Хотя немного напоминает Box с какими-то элементами внутри.
И как сделать, что бы при нажатии на кнопку открывалось окно со списком префабов? И куда потом можно сохранить выбранный префаб, что бы было как выбор деревьев в редакторе терейна? public переменную в скрипте со списком для этого делать не хочется, а private не сохранят свое новое значение.

Почему Monitor.Enter и semaphore.WaitOne() не ставят поток на паузу?
Надо создать окно и сделать в потоке паузу до закрытия этого окна. Как например в EditorUtility.SaveFilePanel. Или это как-то через yield делают?

pie 28.02.2012 13:09

Ответ: Вопросы от новичка
 
Намекните как сделать следы от пуль на поверхности. Нарисовать декаль? Как? Точку столкновения пули и поверхности знаю. Объясните если не сложно.

pax 28.02.2012 14:10

Ответ: Вопросы от новичка
 
Например
Bootcamp -> Standard Assets -> Decal System

или платная

http://u3d.as/content/frameshift/fra...-framework/1um

pie 28.02.2012 18:36

Ответ: Вопросы от новичка
 
Какая альтернатива функции Instantiate из C# в JS?

WISHMASTER35 28.02.2012 19:46

Ответ: Вопросы от новичка
 
pie, Instantiate должно и в JS работать.

pie 29.02.2012 13:43

Ответ: Вопросы от новичка
 
Вложений: 1
WISHMASTER35, спасибо.)))

У меня проблемы с этими декалями.
Делал вот по этому уроку.
А именно:
1) создал plane и нанес на него текстуру отверстия от пули.
2) создал префаб и на него перетащил этот самый плейн.
3) удалил плейн.
4) прикрепил к оружию следующий скрипт:

PHP код:

var _direction attach.transform.TransformDirection(Vector3.right);
        var 
_hit RaycastHit;
        
        if (
Physics.Raycast (attach.transform.position_direction_hitbulletRange)){
            if (
_hit.rigidbody){_hit.rigidbody.AddForceAtPosition(bulletForce _direction_hit.point);}
            
_hit.collider.SendMessageUpwards("ApplyDamage"bulletDamageSendMessageOptions.DontRequireReceiver);
            if (
_hit.collider.tag == "DecalOn"){Instantiate(decals_hit.pointQuaternion.FromToRotation(Vector3.up_hit.normal));}
            
Debug.DrawLine(attach.transform.position_hit.pointColor.red);
        } 

где attach - это точка откуда вылетают пули;
decals : GameObject;

В итоге получилось вот это "смотрите скриншот".

pax 29.02.2012 13:49

Ответ: Вопросы от новичка
 
Делай небольшой оффсет по нормали к поверхности, либо в шейдере надо дописать строчку (точно не помню какую)

pie 29.02.2012 13:59

Ответ: Вопросы от новичка
 
поясни пожалуйста что за оффсет?

pax 29.02.2012 14:19

Ответ: Вопросы от новичка
 
ну к позиции плейна прибавляй например hit.normal * 0.005f
PHP код:

if (_hit.collider.tag == "DecalOn"){Instantiate(decals_hit.point _hit.normal 0.005Quaternion.FromToRotation(Vector3.up_hit.normal));} 


pie 24.03.2012 23:21

Ответ: Вопросы от новичка
 
Всем привет. У меня проблемы со статьей ссылки на которые я выложил. В первой части говорится что нужно наложить текстуру на plane. Я наложил, но почему то вокруг текстуры остается цвет от объекта plane. То есть она не становится прозрачной вокруг текстуры как в уроке. Почему так происходит? Спасибо за внимание.

pie 24.03.2012 23:22

Ответ: Вопросы от новичка
 
Ссылки на статьи в FAQ.

pax 25.03.2012 00:17

Ответ: Вопросы от новичка
 
Выбери шейдер Transparent или Transparent/Cutout
(не искал ссылки)

pie 30.03.2012 20:13

Ответ: Вопросы от новичка
 
Есть модель человека, есть две анимации - атака и ходьба. Для хотьбы использую Locomotion system. А как при нажатии на ЛКМ во время хотьбы произвести атаку? Просто если я жму удар, то анимация ног просто застывает и больше не воспроизводится. Смотрел код 3d шутера. В коде все просто реализовано с помощью кода проигрывания анимации и все. Не понятно.

cahekp 30.03.2012 22:20

Ответ: Вопросы от новичка
 
to pie:
Смотри в справке такую штуку: AddMixingTransform(mix : Transform);
С помощью нее можно изменить анимацию не всего объекта, а только ее части.
В твоем случае перед проигрыванием анимаций напиши что-то типа:
animation["Анимация_Удара"].AddMixingTransform(ТрансформПозвоночника);

pie 30.03.2012 22:27

Ответ: Вопросы от новичка
 
То есть под ТрансформПозвоночника подразумевается все кости которые будут участвовать в этой анимации?

cahekp 30.03.2012 22:44

Ответ: Вопросы от новичка
 
to pie: только одна кость. Начало цепочки, идущее вверх, к рукам.

pie 30.03.2012 22:47

Ответ: Вопросы от новичка
 
cahekp, Ну вроде так сделал, но все равно не выходит. Анимация удара воспроизводится, а ноги при этом застывшие. Странно.

PHP код:

var attackAnimation AnimationClip;
var 
tr Transform;

animation.wrapMode 1;
animation.Stop();

function 
Update () {

    if (
Input.GetButtonDown ("Attack")){
    
        
animation[attackAnimation.name].AddMixingTransform(tr);
        
animation.CrossFade(attackAnimation.name);
    
    }




cahekp 30.03.2012 23:06

Ответ: Вопросы от новичка
 
Угу, странно... А что ты закидываешь в tr : Transform?
Вообще, как у тебя скелет организован? Вставлять туда надо не самый корневой объект (таз), а только верхнюю часть тела, чтоб только на руки и грудь дополнительная анимация действовала.

pie 31.03.2012 11:30

Ответ: Вопросы от новичка
 
cahekp, задаю вроде бы правильно.

Видео

pax 31.03.2012 12:07

Ответ: Вопросы от новичка
 
Попробуй для анимаций использовать разные слои

pie 31.03.2012 12:14

Ответ: Вопросы от новичка
 
pax, а как узнать на каком слое воспроизводится анимация locomotion?

pax 31.03.2012 12:18

Ответ: Вопросы от новичка
 
в скриптах локомошна ищи, я с ним не разбирался

pie 31.03.2012 12:23

Ответ: Вопросы от новичка
 
pax, cahekp, Спасибо! Все работает.

pie 31.03.2012 13:14

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

pax 31.03.2012 14:01

Ответ: Вопросы от новичка
 
обрабатывать управление во втором тоже

pie 14.04.2012 18:02

Ответ: Вопросы от новичка
 
Как реализован прицел в стандартном примере AngryBots? Копался в примере и нашел только префаб Cursor. Но не нашел его в самой игре.

Lestar 14.04.2012 19:17

Ответ: Вопросы от новичка
 
Это не прицел, это визуальное представление направления выстрела. Привязан к mousePosition.
http://clip2net.com/s/1OdGX

pie 15.04.2012 19:11

Ответ: Вопросы от новичка
 
Спасибо, разобрался. Еще один вопрос по Locomotion. Я хочу сделать что бы игрок поворачивался лицом к мыши, но незнаю как.

Lestar 15.04.2012 19:41

Ответ: Вопросы от новичка
 
На курсор повесить пустой GameObject. Сделать target rotation на него.

pie 16.04.2012 08:19

Ответ: Вопросы от новичка
 
Не совсем понял. А можно кусочком кода?

Онлайн смотреть

Lestar 16.04.2012 11:50

Ответ: Вопросы от новичка
 
В общих чертах. Повесить на обьект, который должен следить за курсором.

PHP код:

Transform target;
RaycastHit hit;

void Update()
{
  
Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);

  if (
Physics.Raycast(ray out hit))
  {
   
target.positoin=hit.point;
  }

  
Quaternion targetRotation=Quaternion.LookRotation(target.position-transform.position);
  
transform.rotation=targetRotation;



pie 16.04.2012 15:14

Ответ: Вопросы от новичка
 
Все равно до меня не дошло.

Lestar 16.04.2012 15:50

Ответ: Вопросы от новичка
 
До меня много чего не доходит, но я как минимум корректно составляю вопросы, что именно не понятно.
Для того чтобы поворачивать обект в каком то направлении, нужно знать это направление. В нашем случае направлением служит курсор.
1.Пускаем луч из камеры в точку, где находится курсор
PHP код:

Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); 

2.Получаем координаты точки на площадке(в вашем случае), соответствующие позиции курсора, если курсор находится над площадкой(луч пересекает коллайдер)
PHP код:

if (Physics.Raycast(ray out hit))
  {
   
target.positoin=hit.point;
  } 

3.Поворачиваем обьект по направлению к курсору.
PHP код:

Quaternion targetRotation=Quaternion.LookRotation(target.position-transform.position);
  
transform.rotation=targetRotation


pie 16.04.2012 16:10

Ответ: Вопросы от новичка
 
Assets/Scripts/Player/Player.cs(18,29): error CS1525: Unexpected symbol `out'

Lestar 16.04.2012 16:26

Ответ: Вопросы от новичка
 
PHP код:

if (Physics.Raycast(rayout hit,Mathf.Infinity)) 


pie 16.04.2012 16:54

Ответ: Вопросы от новичка
 
Ну тогда так уж.

Код:

public Camera cam;

void Update () {
               
                Ray ray = cam.ScreenPointToRay (Input.mousePosition);
        RaycastHit hit = new RaycastHit();
        if (Physics.Raycast (ray, out hit))
        {
            Vector3 rot = transform.eulerAngles;
            transform.LookAt(hit.point);
            transform.eulerAngles = new Vector3(rot.x, transform.eulerAngles.y+90, rot.z);
        }
               
        }


pie 16.04.2012 18:52

Ответ: Вопросы от новичка
 
Вот что получилось. Смотреть Только мне не нравится резкие движения игрока когда мышка прямо на нем. Попробовал сделать через проверку на расстояние (то есть не поворачивает если дистанция < 1), но тогда получается другой баг - если провести мышью через игрока и вывести его с другой стороны то он резко повернется назад. Как Вы посоветуете сделать?

Lestar 16.04.2012 22:08

Ответ: Вопросы от новичка
 
Здесь ты в каждом фрейме ориентируешь обьект на таргет точку.
PHP код:

transform.LookAt(hit.point); 

А ты в Update() просто поворачивай обьект на таргет точку с определенной скоростью.

pie 17.04.2012 16:15

Ответ: Вопросы от новичка
 
Ну хорошо. Допустим я буду делать через вот это:

PHP код:

transform.rotation Quaternion.Slerp(transform.rotationпозиция мышискорость поворота); 

Как определить позицию мыши в пространстве?

PHP код:

Ray ray cam.ScreenPointToRay (Input.mousePosition); 

Не катит, т.к. нужен трансформ или Vector3.

pax 17.04.2012 16:21

Ответ: Вопросы от новичка
 
Очевидно же: Physics.Raycast

pie 17.04.2012 17:27

Ответ: Вопросы от новичка
 
PHP код:

Ray ray cam.ScreenPointToRay(Input.mousePosition); //
        
RaycastHit hit;
        
        if (
Physics.Raycast(rayout hit)) {
            
float rot hit.point;
            
transform.rotation Quaternion.Slerp(transform.rotationrotturnSpeed Time.deltaTime);
        } 

В функцию на место rot нужна переменная float, а hit.point - Vector3 и не может быть float. (((

pax 17.04.2012 19:08

Ответ: Вопросы от новичка
 
Эх....
PHP код:

Ray ray cam.ScreenPointToRay(Input.mousePosition); //
        
RaycastHit hit;
        
        if (
Physics.Raycast(rayout hit)) {
            var 
lookDirection hit.point transform.position;
            
lookDirection.0;
            var 
targetRotation Quaternion.LookRotation(lookDirection);
            
transform.rotation Quaternion.Slerp(transform.rotationtargetRotation turnSpeed Time.deltaTime);
        } 


pie 17.04.2012 20:28

Ответ: Вопросы от новичка
 
Спасибо большое! Просто я не дружу с C#. Мне легче на Java. А на нем я незнаю как это будет выглядеть)

pie 18.04.2012 13:42

Ответ: Вопросы от новичка
 
Вопрос по поводу Biped Edition. Как модельке на которой висит скрипт Biped (т.е. он и будет являться куклой тряпичной) сообщить что нужно начать генерировать физику куклы. То что можно нажать кнопку в окне screene не предлагать. Нужно именно как то сказать чтобы кукла начала работать.

Lestar 18.04.2012 16:05

Ответ: Вопросы от новичка
 
Сделать на основе модели регдол и в нужный момент заменить модель регдолом. Если я правильно понял суть вопроса.

RegIon 06.05.2012 17:03

Ответ: Вопросы от новичка
 
Код:

    if (Rotate) {
           
            var ang = Vector3.Angle (Physics.gravity, new Vector3 (0, 1, 0));
            CamPivot.transform.localRotation = new Quaternion (0, 0, 1, ang*Mathf.Deg2Rad);
           
        }

Хотел развернуть камеру на угол,равный углу вектора гравитации, работает только от PI/4 до PI/4+PI, не знаю почему, где косяк?

Lestar 06.05.2012 23:52

Ответ: Вопросы от новичка
 
Physics.gravity это сила тяжести. Какое она имеет отношение к определению угла между двумя векторами?

pie 22.05.2012 11:44

Ответ: Вопросы от новичка
 
Вопрос по поводу CarTutorial. В примере вроде бы все нормально. Заменил модель машины на свою, все скрипты добавил, все параметры настроил как надо. когда поворачиваешь колеса в одну сторону они плавно поворачиваются. Если резко повернуть в другую сторону то они с рывком поворачиваются в другую. Как это можно исправить?

is.SarCasm 28.05.2012 13:32

Ответ: Вопросы от новичка
 
Как сделать так, что бы OnGUI запускалась только один раз за цикл?

cahekp 28.05.2012 15:47

Ответ: Вопросы от новичка
 
to is.SarCasm:
Никак. Но можно детектить, зачем в очередной раз Юнити решила вызвать эту функцию. Если у тебя внутри нее есть какие-то вычисления (хотя в справке настоятельно рекомендуют этого не делать), то можешь их "обернуть" вот в такое условие:

void OnGUI() {
...
if (Event.current.type == EventType.Repaint)
{
// Весь код, который лежит тут, вызывается только один
// раз за кадр.
Debug.Log("Current frame: "+Time.frameCount);
}
...
}

pax 29.05.2012 10:30

Ответ: Вопросы от новичка
 
1. Можно отключить GUILayout если он не используется например в Start или Awake. Это снизит количество вызовов на 1.
2. Как сказал cahekp - можно выполнять действие один раз за кадр например в событии Repaint, но там другие события не обработать.

Nuprahtor 29.05.2012 10:36

Ответ: Вопросы от новичка
 
У кого-нибудь получалось привязывать мауслок к правому стику геймпада? Сколько гуглил - ничего полезного не нашел, в Input ось x и y всего одна, и по умолчанию X и Y оси привязываются к левому стику, а второй X и Y оси в настройках нет. Пробовал дублировать MouseX/Y оси и настраивать их для геймпада - та же проблема, единственное, что получилось - привязывание левого-же стика и на движение, и на мауслок :c

pax 29.05.2012 15:06

Ответ: Вопросы от новичка
 
Не взял в деревню геймпад к сожалению, но вероятно в инпут менеджере надо во вторых Horizontal и Vertical (хотя нет, надо править Mouse X и Mouse Y оси) выставить третью и четвертую оси джойстика, вместо x и y

WISHMASTER35 29.05.2012 21:57

Ответ: Вопросы от новичка
 
Скажите, yield return new WaitForSeconds(0.01f); прервет работу ровно на 0.01 секунды? Или может на более долгое время прервать, если игра будет тормозить?

Что бы выполнение сложного алгоритма разделить на несколько кадров обязательно в самом алгоритме вставлять строчку yield return new WaitForSeconds?
Хочется сделать, чтобы не тормозила при выполнении этого алгоритма и в алгоритм ничего лишнего не писать.

cahekp 30.05.2012 10:49

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 229037)
Скажите, yield return new WaitForSeconds(0.01f); прервет работу ровно на 0.01 секунды? Или может на более долгое время прервать, если игра будет тормозить?

Что бы выполнение сложного алгоритма разделить на несколько кадров обязательно в самом алгоритме вставлять строчку yield return new WaitForSeconds?
Хочется сделать, чтобы не тормозила при выполнении этого алгоритма и в алгоритм ничего лишнего не писать.

Нет, к сожалению, не ровно. Может прерваться как на 0.01, так и на 0.02, или вообще 0.038 какое-нибудь. Юнити выполняет все скрипты и сопрограммы в одном потоке, по этому прерывание зависит от суммарного количества выполняющихся скриптов в кадре.

Очень хорошее объяснение того, как работают корутины, есть тут:
http://answers.unity3d.com/questions...confusion.html
Прям пошаговое объяснение процесса.

К слову, только FixedUpdate выполняется строго по времени.

WISHMASTER35 30.05.2012 20:38

Ответ: Вопросы от новичка
 
А FixedUpdate в другом потоке выполняется?

Ладно, если я в свой алгоритм вставлю "yield return new WaitForSeconds(time)" То как вычислить это time, чтобы алгоритм работал максимально быстро и не создавал тормозов?
И как определить, что алгоритм уже закончил свою работу?
Надо, чтобы в фоне создавались новые куски уровня.

Nuprahtor 30.05.2012 23:27

Ответ: Вопросы от новичка
 
Хм, в моем геймпаде оси на правом стике странно расставлены, третья ось - горизонтальная, а вертикальная - почему-то шестая, при этом на самом геймпаде шесть осей (с курками).
Тут либо надо писать настройщик управления, чтобы под любой геймпад можно было настроить, либо придется оставлять доступным меню смены управления, которое есть в построенной игре по умолчанию.
Второй вариант меня не устраивает, поэтому я хочу знать - возможно ли менять настройки Input в уже запущенной игре?

Fockerian 31.05.2012 14:24

Ответ: Вопросы от новичка
 
Не могу разобраться в Unity3D 3.5.2

Хотел сделать поиск пути по видеоуроку для одного юнита а у меня не активна кнопка window/navigation. Pathfinding есть только в платной версии? Есть какиенибудь варианты UNITY с возможностью Pathfinding бесплатные предусмотренные разработчиками? КРоме (A*Pathfinding) (с этим я уже знаком)

И еще один вопрос знатакам. Реально ли сделать на юнити игру в которую можно играть вчетвером онлайн. (стратегию) ((имеется в виду играть онлайн вчетвером, будут ли лаги и сильная задержка сигнала?)

RegIon 31.05.2012 15:00

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Fockerian (Сообщение 229115)
Не могу разобраться в Unity3D 3.5.2

Хотел сделать поиск пути по видеоуроку для одного юнита а у меня не активна кнопка window/navigation. Pathfinding есть только в платной версии? Есть какиенибудь варианты UNITY с возможностью Pathfinding бесплатные предусмотренные разработчиками? КРоме (A*Pathfinding) (с этим я уже знаком)

И еще один вопрос знатакам. Реально ли сделать на юнити игру в которую можно играть вчетвером онлайн. (стратегию)

скачай кряк.(правда он у меня не билдил exe, и теперь я на .4.9)
ДА!

cahekp 31.05.2012 15:03

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Fockerian (Сообщение 229115)
Не могу разобраться в Unity3D 3.5.2

Хотел сделать поиск пути по видеоуроку для одного юнита а у меня не активна кнопка window/navigation. Pathfinding есть только в платной версии? Есть какиенибудь варианты UNITY с возможностью Pathfinding бесплатные предусмотренные разработчиками? КРоме (A*Pathfinding) (с этим я уже знаком)

И еще один вопрос знатакам. Реально ли сделать на юнити игру в которую можно играть вчетвером онлайн. (стратегию)

По поводу Pathfinding: да, только в платной.
Если тебе чем-то не угодила A*, можешь просто использовать следующие строчки:
PHP код:

if (Vector3.Distance(enemy.transform.positionplayer.transform.position) < minDistance) {
enemy.transform.LookAt(player.transform.position);
enemy.transform.Translate(005*Time.deltaTime);


Это очень, очень простой алгоритм поиска пути. :)

По поводу игры вчетвером: реально.

А вообще, если делаешь стратегию, то тут без A-Стара никуда, имхо. Это очень толковый алгоритм.

Fockerian 31.05.2012 15:08

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Костян (Сообщение 229121)
скачай кряк.(правда он у меня не билдил exe, и теперь я на .4.9)
ДА!

так в 3.4.9 же не было патчфайдинга?


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

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