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)

den 28.07.2010 14:14

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

Меняй Field of view камеры, если я правильно понял о чем ты.
Нее, это не то, это вобще по мойму угол обзора!:)
А мне надо приближение сделать, ну например кагбутто через биноколь смотриш.

pax 28.07.2010 14:19

Ответ: Фак по Юнити.
 
Ну уменьши угол обзора до 15-10 единиц, будет тебе зум ;)

den 28.07.2010 14:29

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

Ну уменьши угол обзора до 15-10 единиц, будет тебе зум
а я наоборот увеличивал, иизображение кривое делалось...
спасибо!

den 28.07.2010 23:06

Ответ: Фак по Юнити.
 
Есчё один немного глупый вопрос:) :
т.к. я плохо знаю буржуйский, а промт переводит не понятно, то спрошу вас:
в Юнити есть рагдол виззарт (ГамеОбъект-КреатеОвер-Рагдол), и там появляется список частей тела, можете мне расказать что это за части по русски, а то сделал рагдола, а он ...:-D :-D :-D

pax 28.07.2010 23:31

Ответ: Фак по Юнити.
 
Я сам не пробовал, но в FPS туториале есть небольшое описание:
Цитата:

Ragdolls
Регдолл имитирует настоящую скелетную структуру, позволяя персонажу (нашему роботу) реалистично падать при смерти.
  • Сначала создайте новую сцену. Мы настроим регдолл здесь. Не забудьте сохранить текущую сцену.
  • Создайте куб больших размеров. Он будет служить платформой для робота. Перетащите робота в сцену и расположите на кубе.
  • Удалите компонент Animation. Это важно, иначе анимация будет конфиликтовать с физикой.
  • Используйте мастера создания регдолла: Game object→Create Other→Ragdoll
В появившемся диалоговом окне нужно назначить все кости на нужные слоты. Мы назначим кости, перетаскивая значения из Robot на нужные слоты. Раскройте объект Robot в Hierarchy.
  • Сначала, rootHandle назначаем на root.
  • Установите Total Mass на 4.
LEGS
  • upleg_L на Left Hip.
  • lowleg_L на Left Knee.
  • heel_L на Left Foot.
  • Повторите для правой ноги.
Upper body / Arms
  • upArm_L на Left Arm.
  • elbow_L на Left Elbow.
  • Повторите для правой руки.
  • spine 3 на Middle spine.
  • head на Head.
  • Нажмите Create. Затем запустите игру. Робот упадёт. Однако, пушка не упадёт.
Для создания падения пушки:
  • Выберите gun в Hierarchy.
  • Добавьте Rigidbody.
  • Добавьте Box Collider. Настройте размер коллайдера для
соответствия с пушкой.


den 28.07.2010 23:52

Ответ: Фак по Юнити.
 
Спасибо, но мне нужно для своей модели, прсто перевод понятный нужен;)

pax 29.07.2010 00:00

Ответ: Фак по Юнити.
 
Ну по примеру:
  • root - обычно тазовая кость у скелета, т.е. начало координат скелета
  • Left Hip - Левое бедро
  • Left Knee - Левая голень
  • Left Foot - Левая стопа
  • Left Arm - Левая верхняя часть руки
  • Left Elbow - Левое предплечие
  • Middle spine - Средняя кость спины
  • Head - Голова

den 29.07.2010 00:07

Ответ: Фак по Юнити.
 
Спасибо, то что надо!:)

Fatalix3d 30.07.2010 00:34

Ответ: Фак по Юнити.
 
Pax не мог бы ты обьяснить как избавиться от лагов в сети, и немного про анимацию опять таки для сетевого режима.

Illidan 30.07.2010 04:01

Ответ: Фак по Юнити.
 
для вызова компонента из ГО используется GetComponent(). А можно ли получить ГО если известен компонент?
И если не затруднит расскажите плиз о работе с тегами обьектов. что это и как это естса.

pax 30.07.2010 13:00

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

Сообщение от Fatalix3d (Сообщение 156638)
Pax не мог бы ты обьяснить как избавиться от лагов в сети, и немного про анимацию опять таки для сетевого режима.

Для избавления от лагов нужно использовать интерполяцию с задержкой по времени, пример из Networking Example с оффсайта (NetworkInterpolatedTransform):
PHP код:

using UnityEngine;
using System.Collections;

public class 
NetworkInterpolatedTransform MonoBehaviour {
    
    
// временная задержка для интерполяции
    
public double interpolationBackTime 0.1
    
    
internal struct  State
    
{
        
internal double timestamp;
        
internal Vector3 pos;
        
internal Quaternion rot;
    }

    
// Сохраняем 20 состояний с информацией "для воспроизведения"
    
State[] m_BufferedState = new State[20];
    
// сколько состояний используется
    
int m_TimestampCount;
    
    
void OnSerializeNetworkView(BitStream streamNetworkMessageInfo info)
    {
        
// Всегда отсылаем трансформ 
        
if (stream.isWriting)
        {
            
Vector3 pos transform.localPosition;
            
Quaternion rot transform.localRotation;
            
stream.Serialize(ref pos);
            
stream.Serialize(ref rot);
        }
        
// Когда принимаем - буфферизируем информацию
        
else
        {
            
// Принимаем последнее состояние
            
Vector3 pos Vector3.zero;
            
Quaternion rot Quaternion.identity;
            
stream.Serialize(ref pos);
            
stream.Serialize(ref rot);
            
            
// Смещаем данные в буфере на 1
            
for (int i=m_BufferedState.Length-1;i>=1;i--)
            {
                
m_BufferedState[i] = m_BufferedState[i-1];
            }
            
            
// сохраняем полученные данные под нулевым индексом
            
State state;
            
state.timestamp info.timestamp;
            
state.pos pos;
            
state.rot rot;
            
m_BufferedState[0] = state;
            
            
// увеличиваем количество сохраненных состояний, но не больше количества слотов
            
m_TimestampCount Mathf.Min(m_TimestampCount 1m_BufferedState.Length);

            
// проверяем целостность данных
            
for (int i=0;i<m_TimestampCount-1;i++)
            {
                if (
m_BufferedState[i].timestamp m_BufferedState[i+1].timestamp)
                    
Debug.Log("State inconsistent");
            }
            
            
//Debug.Log("stamp: " + info.timestamp + "my time: " + Network.time + "delta: " + (Network.time - info.timestamp));
        
}
    }
    
    
// Работает только когда компонент включен, т.е. на удаленных соединениях (server/clients)
    
void Update () {
        
double currentTime Network.time;
        
double interpolationTime currentTime interpolationBackTime;
        
// Ищем промежуток, подходящий по отложенному времени
        
if (m_BufferedState[0].timestamp interpolationTime)
        {
            for (
int i=0;i<m_TimestampCount;i++)
            {
                if (
m_BufferedState[i].timestamp <= interpolationTime || == m_TimestampCount-1)
                {
                    
// два состояния, в промежуток которых попадает времяя
                    
State rhs m_BufferedState[Mathf.Max(i-10)];
                    
                    
State lhs m_BufferedState[i];
                    
                    
// промежуток времени между состояниями
                    
double length rhs.timestamp lhs.timestamp;
                    
float t 0.0F;
                    
// интерполирующая переменная
                    
if (length 0.0001)
                        
= (float)((interpolationTime lhs.timestamp) / length);
                    
                    
// интерполируем трансформации
                    
transform.localPosition Vector3.Lerp(lhs.posrhs.post);
                    
transform.localRotation Quaternion.Slerp(lhs.rotrhs.rott);
                    return;
                }
            }
        }
        
// для экстраполяции используем последнее полученное значение
        
else
        {
            
State latest m_BufferedState[0];
            
            
transform.localPosition latest.pos;
            
transform.localRotation latest.rot;
        }
    }


Для синхронизации анимаций там же найдете пример Networking Scripts\NetworkSyncAnimation


Цитата:

Сообщение от Illidan (Сообщение 156647)
для вызова компонента из ГО используется GetComponent(). А можно ли получить ГО если известен компонент?
И если не затруднит расскажите плиз о работе с тегами обьектов. что это и как это естса.

У всех компонентов есть свойство gameObject, которое указывает на объект, к которому прикреплен компонент.

Тэги помогают разделить объекты при поиске. Особенно, если им не назначен компонент, по которому можно определить тип объекте в сцене. Например хочется указать места, в которых время от времени будут появляться бонусы. Мы создаем тэг с названием "Bonus" и создаем пустые GameObject'ы и назначаем им этот тэг. Далее какой-то скрипт управляющий появлением бонусов находит все эти объекты с помощью функции GameObject.FindGameObjectsWithTag и создает в этих местах эти бонусы.

den 30.07.2010 19:39

Ответ: Фак по Юнити.
 
У меня два похожих вопроса, которые скорей всего решаются функцией GetComponent() но я точно не пойму как:
1) У ГО имеится 3д источник звука (Audio Source ) как в скрипет тогоже ГО написать, чтобы когда надо он включался, а когда, надо выключался?
2) Тоже самое, но только у ГО имеется например 4 скрипта - "Самолёт","Машина","Лодка","Главный" . "Главный" всегда включен, как в нём прописать чтобы какой либо из этих скриптов включался/выключался ?

pax 30.07.2010 20:00

Ответ: Фак по Юнити.
 
1) this.audio.enabled = false;
2) this.GetComponent<Самолёт>().enabled = false; или this.gameObject.GetComponent<Самолёт>().enabled = false;

den 30.07.2010 21:48

Ответ: Фак по Юнити.
 
хех, спасибо! сколько раз уже выручал!
------
Цитата:

this.audio.enabled = false;
А если у ГО несколько источников?
То так чтоли -
Код:

this.GetComponent<3дМузончик№1>().enabled = false;
this.GetComponent<3дМузончик№2>().enabled = false;
this.GetComponent<3дМузончик№3>().enabled = false;

???
--------
И сюда же: как выключить/включить гравитацию о ГО?

pax 30.07.2010 22:02

Ответ: Фак по Юнити.
 
Тогда вот так:
PHP код:

AudioSource[] музончики = (AudioSource[]) GetComponents(typeof (AudioSource));
foreach (
AudioSource музон in музончики)
{
    
музон.enabled false;


А по поводу графитации, то она включается/отключается у твердого тела, а не у GO:
PHP код:

this.rigidbody.useGravity false



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

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