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)

WISHMASTER35 26.07.2012 09:52

Ответ: Вопросы от новичка
 
зачем карта нормалей в вершинном шейдере? да хоть чтобы сдвинуть позицию и сделать волну. ну раз текстуры вершине не доступны, то синус нам в помощ.
у меня сейчас такие волны pos.y += sin(pos.x + _Time) + sin(pos.z + _Time)
не пойму как контролировать направление движения волн.
и не знаю как правильно расчитать нормаль, а то нормали так и остаются как у плоскости и красивый блеск волн не сделаешь(

pie 28.07.2012 19:00

Ответ: Вопросы от новичка
 
Всем привет! Есть такая переменная:
Код:

public string code = "1,0,1,32,0,22"
Как раскидать каждую цифру по переменным. Чтобы получилось так:
Код:

arr[0] = 1; arr[1] = 0; и тд.
В php это я делал так:
PHP код:

list($arr[0], $arr[1]) = explode','$code); 


cahekp 28.07.2012 19:34

Ответ: Вопросы от новичка
 
to pie: string[] arr = code.Split(',');

pie 28.07.2012 20:45

Ответ: Вопросы от новичка
 
В чем я ошибся? Выдает такую ошибку: NullReferenceException: Object reference not set to an instance of an object.
Код пишу так:

Код:

isWeapons = sql_weapons.Split(',');
for (int i = 0; i < isWeapons.Length; i++)
        menu.isWeapons[i] = int.Parse(isWeapons[i]);


cahekp 28.07.2012 21:09

Ответ: Вопросы от новичка
 
А на какой строчке выдает эту ошибку?
Судя по коду, в этом участке такой ошибки вообще не может быть в принципе.

pie 28.07.2012 21:23

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

menu.isWeapons[i] = int.Parse(isWeapons[i]);

pie 28.07.2012 21:30

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

public string[] isWeapons;
В скрипте menu:
Код:

public static int[] isWeapons;
sql_weapons - тоже string.
Что примечательно если написать так:
Код:

isWeapons = sql_weapons.Split(',');
//for (int i = 0; i < isWeapons.Length; i++)
        //menu.isWeapons[i] = int.Parse(isWeapons[i]);

То есть не посылать данные и нажав паузу посмотреть массив isWeapons данного скрипта то там есть данные. При чем те которые пришли с БД.

cahekp 28.07.2012 21:52

Ответ: Вопросы от новичка
 
А если попробовать написать так?
Код:

isWeapons = sql_weapons.Split(',');
int k = 0;
for (int i = 0; i < isWeapons.Length; i++)
        if (isWeapons[i]) if (int.TryParse(isWeapons[i], out k)) menu.isWeapons[i] = k;


pie 28.07.2012 21:57

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

if (isWeapons[i]) if (int.TryParse(isWeapons[i], out k)) menu.isWeapons[i] = k;

cahekp 28.07.2012 22:53

Ответ: Вопросы от новичка
 
Погоди-ка... А у тебя переменная menu не пуста, случаем? Ссылка на твой скрипт в ней присутствует?

WISHMASTER35 30.07.2012 14:13

Ответ: Вопросы от новичка
 
немогу понять что такое в шейдере pass. второй пас выполняется сразу после первого или после отрисовки всей модели? или вообще после отрисовки все моделей или как-то еще работает?
не знаете, если будят пустые сабмеши, то они будят вызывать дракалы?

pie 30.07.2012 19:33

Ответ: Вопросы от новичка
 
Вложений: 1
Как назначит приоритет рисования окон (Box, Button и тд) в GUI, если их несколько и они в разных скриптах, но на одном объекте. (см. Скрин)
И еще один вопрос. Как сделать чтобы не нажимались кнопки если появилась всплывающая подсказка. Допустим нажал на купить и вывелся box, button который должен быть на переднем плане и чтобы не нажимались кнопки позади box. Я где то читал что надо на весь экран растянуть какую то переменную, но не представляю как.

pax 30.07.2012 19:46

Ответ: Вопросы от новичка
 
2WISHMASTER35
Каждый проход (Pass) это отрисовка той же модели поверх нарисованной другим способом, определенным в пассе. На счет дравколов с пустыми сабмешами проще проверить самостоятельно ;)

2pie
Тебе сюда

pie 30.07.2012 20:04

Ответ: Вопросы от новичка
 
2pax, Спасибо. Разобрался. Но а как сделать чтобы кнопки за боксом не нажимались?
И как можно регулировать размер GUI.Box в зависимости от размера текста?

pax 30.07.2012 20:10

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

Сообщение от pie (Сообщение 234779)
Но а как сделать чтобы кнопки за боксом не нажимались?

Не рисовать бокс поверх кнопок.

Цитата:

Сообщение от pie (Сообщение 234779)
И как можно регулировать размер GUI.Box в зависимости от размера текста?

PHP код:

var labelSize GUI.skin.label.CalcSize(new GUIContent("Текст")); 

Далее задавать размер бокса.

EvilChaotic 30.07.2012 21:48

Ответ: Вопросы от новичка
 
Посоветуйте нормальные реализации DeltaPitch/Yaw. Мои какие-то пока кривые.. :pardon:

HolyDel 30.07.2012 21:58

Ответ: Вопросы от новичка
 
в unity же кажись в кватеринонах ориентация?

их же можно просто slerp-ить...

или тебе не для плавных поворотов?

pax 30.07.2012 22:05

Ответ: Вопросы от новичка
 
Может тебе они не нужны, если тебе надо плавно повернуть один объект на другой, то можно воспользоваться примерно таким способом:
PHP код:

public float speed 0.1F;
public 
Transform targetTransform;
...

var 
from transform.rotation;
var 
to Quaternion.LookRotation(targetTransform.position transform.position);
transform.rotation Quaternion.Slerp(from to Time.time speed); 


EvilChaotic 30.07.2012 22:23

Ответ: Вопросы от новичка
 
Не для плавных поворотов, мне надо потом просто нормализовать это значение и помножить на скорость разворотов :) Так что здесь главное, чтобы оно просто правильно выдавало -/+ у значения.

pax 30.07.2012 23:01

Ответ: Вопросы от новичка
 
нашел вот такие, могу переписать на Unity...
http://www.blitzbasic.com/Community/...hp?topic=66209

HolyDel 30.07.2012 23:22

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

var to = Quaternion.LookRotation(targetTransform.position - transform.position);
попробуй для определения направления поворота просто здесь проверять значение to.x(или to.w) (для оси Y), и to.y (для оси X) на меньше-больше нуля.
теоретически должно работать.

EvilChaotic 30.07.2012 23:53

Ответ: Вопросы от новичка
 
Перевел, сейчас посмотрим что получится...
Код:

        float DeltaYaw( Transform p_eEntity1, Transform p_eEntity2) {
                float l_dx = p_eEntity2.position.x - p_eEntity1.position.x;
                float l_dz = p_eEntity2.position.z - p_eEntity1.position.z;
                return -Mathf.Atan2(l_dx,l_dz);
        }
        float DeltaPitch( Transform p_eEntity1, Transform p_eEntity2 ) {
                float  l_dx = p_eEntity2.position.x - p_eEntity1.position.x;
                float  l_dy = p_eEntity2.position.y - p_eEntity1.position.y;
                float  l_dz = p_eEntity2.position.z - p_eEntity1.position.z;
                return( -Mathf.Atan2(l_dy, Mathf.Sqrt(l_dx*l_dx + l_dz*l_dz)) );
        }


pax 31.07.2012 00:00

Ответ: Вопросы от новичка
 
Можно чуть проще записать
PHP код:

float DeltaYawTransform p_eEntity1Transform p_eEntity2) {
   
float l_d p_eEntity2.position p_eEntity1.position;
   return -
Mathf.Atan2(l_d.x,l_d.z);



EvilChaotic 31.07.2012 01:04

Ответ: Вопросы от новичка
 
Обе функции при определенных углах возвращают не правильное значение.
Ща отдохну и попробую вариант Олега.

pax 31.07.2012 01:12

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

Можешь попробовать использовать следующее:

PHP код:

// величина поворота на цель
var rotation Quaternion.FromToRotation(transform.forwardtargetTransform.position transform.position);

// углы Эйлера
var euler rotation.eulerAngles


HolyDel 31.07.2012 02:29

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

Код:

diff = Quaternion.Inverse(from) * to;
или как там в юнити

WISHMASTER35 01.08.2012 00:48

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

pax 01.08.2012 07:12

Ответ: Вопросы от новичка
 
Увеличиваешь массив (на кнопку например), отображаешь пустое поле с типом материала, кликаешь по нему - выбираешь материал из "браузера".

WISHMASTER35 02.08.2012 17:17

Ответ: Вопросы от новичка
 
а в шарпе нет функции для безопасного извлечения элементов из массива? т.т. чтобы вместо ошибки null был? там и кода на 2 строчки, но когда его и так дофига, то не хочется писать такую мелочь ибо и так уже каша из букв.

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

pax 02.08.2012 17:43

Ответ: Вопросы от новичка
 
если массив null, то можно в теории доставать из него элементы без ошибок с использованием методов расширения.

Пишешь расширение
PHP код:

public static class ArrayExtension
{
    public static 
T GetArrayElement<T>(this T[] array, int index)
    {
        try
        {
            return array[
index];
        }
        catch
        {
            return default(
T);
        }
    }


потом используешь
PHP код:

int[] array = null;

int item = array.GetArrayElement(2); 


WISHMASTER35 02.08.2012 19:41

Ответ: Вопросы от новичка
 
сайт юнити лег) Unify Community has been hacked by spammers (again) and is temporarily offline while we clean up the mess and make things secure. This may take quite some time. Please bear with us.

возможно на одном префабе создать несколько scriptable object? нужно создать материал и дополнить его скриптом атласа.

п.с. не знал что можно дополнять чужие классы и даже массивы)

Radnk 02.08.2012 20:13

Ответ: Вопросы от новичка
 
УЖЕ РАБОТАЕТ :)

pax 02.08.2012 21:24

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

Сообщение от WISHMASTER35 (Сообщение 235044)
возможно на одном префабе создать несколько scriptable object? нужно создать материал и дополнить его скриптом атласа.

Не знаю точно подойдет или нет, но можно вот это попробовать использовать.

Цитата:

Сообщение от WISHMASTER35 (Сообщение 235044)
п.с. не знал что можно дополнять чужие классы и даже массивы)

Можно добавлять только методы для экземпляров, на этом LINQ основан.

WISHMASTER35 03.08.2012 00:43

Ответ: Вопросы от новичка
 
теоретически обьект, который добавили через add object to asset должен быть дочерним. но почему-то получается, что дочерний всегда мой атлас, а хотелось бы сделать дочерним материал. т.е. чтобы у атласа был материал, так вроде бы логичнее.

pie 03.08.2012 13:40

Ответ: Вопросы от новичка
 
Загрузил в проект шрифт (Arial). В настройках стоит что Character динамический.

Повесил на переменную. Пытаюсь поменять шрифт вот так:
Код:

GUIStyle.none.fontSize = 5;
Но он почему то не меняется.

pax 03.08.2012 14:10

Ответ: Вопросы от новичка
 
эм, а ты шрифт то вообще применил? Перед использованием шрифта его надо назначить туда, где ты его используешь.

Например
PHP код:

GUI.skin.font myFont

или
PHP код:

GUIStyle none = new GUIStyle(GUI.skin.label);
none.font myFont

Откуда такая конструкция вообще? "GUIStyle.none.fontSize"

Gector 03.08.2012 14:50

Ответ: Вопросы от новичка
 
Вопрос по части записи файла. Есть код который создает файл.
Билд на винде работает отлично. Файл создается. Но в андройде я его найти не могу. В настройках билда ставлю даже установку и запись везде external. Но файл не найден.
Код:

using UnityEngine;
using System;
using System.Collections;
using System.IO;

public class filework : MonoBehaviour
{
        void Awake()
        {
                if (!Directory.Exists("Settings"))
                {
                        Directory.CreateDirectory("Settings");
                }
               
                if (!File.Exists("Settings/settings.ini"))
                {
                        File.Create("Settings/settings.ini");
                        File.AppendAllText("Settings/settings.ini", "test line 1" + Environment.NewLine);
                        File.AppendAllText("Settings/settings.ini", "test line 2");
                }
        }
}

для pax'а На твоем сайте пример видел если что).

pax 03.08.2012 15:09

Ответ: Вопросы от новичка
 
Используй для сохранения http://docs.unity3d.com/Documentatio...tDataPath.html

Gector 03.08.2012 16:54

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

Сообщение от pax (Сообщение 235123)
Используй для сохранения http://docs.unity3d.com/Documentatio...tDataPath.html

Хм... Странно. Даже сейчас не находится никак. Ни поиском по телефону, ни поиском через комп по флешке. :dontknow:

pax 03.08.2012 16:57

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

Gector 03.08.2012 17:00

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

Сообщение от pax (Сообщение 235130)
что именно не находит?

Settings.Ini
Собранное приложение под винду работает. Директория и файл есть. Но на андройде нет.

pax 03.08.2012 17:01

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

using UnityEngine;
using System;
using System.Collections;
using System.IO;

public class 
filework MonoBehaviour
{
        
void Awake()
        {
                var 
settingsPath Application.persistentDataPath+"/Settings/";
                if (!
Directory.Exists(settingsPath))
                {
                        
Directory.CreateDirectory(settingsPath );
                }
                var 
iniFile settingsPath +"settings.ini";
                if (!
File.Exists(iniFile))
                {
                        var 
file File.Create(iniFile);
                        
file.Close();
                        
File.AppendAllText(iniFile"test line 1" Environment.NewLine);
                        
File.AppendAllText(iniFile"test line 2");
                }
        }



WISHMASTER35 03.08.2012 18:12

Ответ: Вопросы от новичка
 
gector, .а почему player prefab не используешь? он вроде бы для сохранения и создан.

черт! не пойму я этих вершинных шейдеров. почему если я меняю appdata_full на _base или свою структуру, то вылвзят какие-то левые ошибки?
я правильно понимаю что если вершинный шейдер возвращает структуру v2f, то сурфейс шейдер не будет работать, а только фрагментный?
и почему после pragma vertex иногда пишется двоеточие?

Gector 03.08.2012 18:56

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

Сообщение от WISHMASTER35 (Сообщение 235138)
gector, .а почему player prefab не используешь? он вроде бы для сохранения и создан.

черт! не пойму я этих вершинных шейдеров. почему если я меняю appdata_full на _base или свою структуру, то вылвзят какие-то левые ошибки?
я правильно понимаю что если вершинный шейдер возвращает структуру v2f, то сурфейс шейдер не будет работать, а только фрагментный?
и почему после pragma vertex иногда пишется двоеточие?

Из справки:
Цитата:

therefore it is not recommended to call during actual gameplay.
:)
Я предпочитаю по-старинке отдельным файлом. Тем более что та штука не предназначена для сохранения в целом.

WISHMASTER35 03.08.2012 19:14

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

Gector 03.08.2012 19:34

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

Сообщение от WISHMASTER35 (Сообщение 235142)
почему она не предназначена для сохранения?
а тебе во время самой игры надо сохранять? не понял почему во время игры не рекомендовано сохранять.

Я как понимаю это для восстановления игры в особо хардкорных случаях).
Тем более, что загрузка через обычный файл более гибкая.

Кстати говоря опять не получилось. Может я не все знаю об андройдовской ФС? Теоретически - что может быть не так? Код ведь прост как две копейки.

Hurrit 03.08.2012 19:47

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

WISHMASTER35 03.08.2012 20:00

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

Hurrit, луч ширины не имеет. используй капсулу.

Gector 03.08.2012 20:12

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

Сообщение от WISHMASTER35 (Сообщение 235150)
Gector, ну для сохранения счета и кол-ва пройденных уровней подойдет. для сохранения больших данных врядли т.к. туда кажется массив байт(файл) не запишешь.
ты только на андроиде в корне папок не создавай, а то от других игр уже и так куча мусора в корне. что-то нужное среди них херь найдешь.

Про корень я знаю).
А вот на счет сохранения это смотря как сохранять. Абсолютно все сохранять это вообще не вариант.
Тут в принципе еще проще. Повесил на объект скрипт для сохранения и все дела. Только надо разобраться как эти файлы создавать. Может я его найти не могу по какой то другой причине...

Hurrit 03.08.2012 23:07

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

Сообщение от WISHMASTER35 (Сообщение 235150)
Hurrit, луч ширины не имеет. используй капсулу.

а можешь переделать вот этот кусок с обычным лучом на капсулу, а то я что-то не врубаюсь:

PHP код:

Ray ray = new Ray(transform.positionMyOwnInput.GetCoordinates() - camera.transform.position);
RaycastHit hitInfo = new RaycastHit();

if (
Physics.Raycast(rayout hitInfo3) == false)
{} 


cahekp 04.08.2012 02:49

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

Сообщение от Hurrit (Сообщение 235174)
а можешь переделать вот этот кусок с обычным лучом на капсулу, а то я что-то не врубаюсь.

Думаю, вместо капсулы тебе лучше использовать сферу.
Вот:
PHP код:

Ray ray = new Ray(transform.positionMyOwnInput.GetCoordinates() - camera.transform.position);
RaycastHit hitInfo = new RaycastHit();
float radius 1// "Ширина луча". Радиус сферы.

if (Physics.SphereCast(rayradiusout hitInfo3) == false)
{} 


Hurrit 04.08.2012 04:50

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

Сообщение от cahekp (Сообщение 235184)
Думаю, вместо капсулы тебе лучше использовать сферу.
Вот:
PHP код:

Ray ray = new Ray(transform.positionMyOwnInput.GetCoordinates() - camera.transform.position);
RaycastHit hitInfo = new RaycastHit();
float radius 1// "Ширина луча". Радиус сферы.

if (Physics.SphereCast(rayradiusout hitInfo3) == false)
{} 


дело в том, что мне нужен объект в вытянутой форме

cahekp 05.08.2012 13:27

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

using UnityEngine;
using System.Collections;

public class 
example MonoBehaviour {
    
void Update() {
        
RaycastHit hit;
        
CharacterController charContr GetComponent<CharacterController>();
        
Vector3 p1 transform.position charContr.center Vector3.up * -charContr.height 0.5F;
        
Vector3 p2 p1 Vector3.up charContr.height;
        if (
Physics.CapsuleCast(p1p2charContr.radiustransform.forwardout hit10))
            
distanceToObstacle hit.distance;
        
    }



Gector 05.08.2012 22:37

Ответ: Вопросы от новичка
 
Народ. Подскажите пожалуйста как на дройде реализовать сохранение\загрузку на скажем 10 слотов. Везде говорят о PlayerPrefs, но инфы как это заюзать очень мало.
UPD: Есть такая идея - сохранять все данные в строковую переменную и от 1 до 10 по выбору через PlayerPrefs. Потом парсить при загрузке данные. Благо в игре не требуется сохранение абсолютно всего.
Хотя классическое сохранение в файл бы подошло лучше).

pax 06.08.2012 00:15

Ответ: Вопросы от новичка
 
Буквально на той неделе переписал пример работы с Ini на PlayerPrefs
PHP код:

using System.Collections.Generic;
using System.Text;
using UnityEngine;

public class 
Ini
{
    public static 
void Save(string keyDictionary<stringstringdata)
    {
        
StringBuilder sb = new StringBuilder();

        foreach (
KeyValuePair<stringstringkeyValuePair in data)
        {
            
sb.AppendLine(keyValuePair.Key "=" keyValuePair.Value);
        }

        
PlayerPrefs.SetString(keysb.ToString());
    }

    public static 
Dictionary<stringstringLoad(string key)
    {
        
Dictionary<stringstringdata = new Dictionary<stringstring>();

        
string[] lines PlayerPrefs.GetString(key).Split(new char[]{'\r','\n'});

        foreach (
string line in lines)
        {
            
string dataString line.Trim();

            if (
string.IsNullOrEmpty(dataString)) continue;

            if (
dataString.StartsWith(";")) continue;

            if (
dataString.Contains("="))
            {
                
int pos dataString.IndexOf("=");

                
string valueKey dataString.Substring(0pos).Trim();
                
string value "";
                if ((
pos 1) < dataString.Length)
                {
                    
value dataString.Substring(pos 1dataString.Length pos 1).Trim();
                }
                
data.Add(valueKeyvalue);
            }

        }
        return 
data;
    }


Пример использования:
PHP код:

//Сохранение
var data = new Dictionary<stringstring>();
data.Add("Key1","Value1");
Ini.Save("GameSave"data);

//загрузка
data Ini.Load("GameSave");
var 
Value1 data["Key1"]; 

Правда PlayerPrefs это и есть простейший ini с поддержкой сохранения целых чисел и флоатов кроме строк. А пример выше - ini в ini ))

PS: На днях поковыряю дроид на счет сохранения файлов, отпишусь.

Gector 06.08.2012 14:55

Ответ: Вопросы от новичка
 
Посоны. Я прошу прощения за свою тупость. :-D Файл сохраняется там же где и кэш, то есть - Android\Data\com.anyappname.company.

pax 06.08.2012 15:04

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

Сообщение от Gector (Сообщение 235334)
Посоны. Я прошу прощения за свою тупость. :-D Файл сохраняется там же где и кэш, то есть - Android\Data\com.anyappname.company.

Значит туда Application.persistentDataPath указывал)

Gector 06.08.2012 15:06

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

Сообщение от pax (Сообщение 235335)
Значит туда Application.persistentDataPath указывал)

Именно). У меня она не читалась потом из-за того что persistentDataPath убрал из адреса. Теперь осталось поковырять его на тему чтения\записи - и вперед).

WISHMASTER35 07.08.2012 23:19

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

pax 08.08.2012 00:25

Ответ: Вопросы от новичка
 
имхо мышь никто не сглаживает, самый простой способ - вращать и перемещать вспомогательный объект вместо камеры, а камеру стремить к ориентации и положению этого объекта. Потом просто две строчки:

PHP код:

transform.position Vector3.Lerp(transform.positiontargetTransform.positionpositionSpeed Time.deltatime);
transform.rotationQuaternion.Slerp(transform.rotationtargetTransform.rotationrotationSpeed Time.deltatime); 


pie 08.08.2012 13:11

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

pax 08.08.2012 13:54

Ответ: Вопросы от новичка
 
вхождение объекта в камеру можно проверить посчитав ее плейны камеры
http://docs.unity3d.com/Documentatio...tumPlanes.html
и протестировав габариты объекта с помощью них
http://docs.unity3d.com/Documentatio...lanesAABB.html

WISHMASTER35 09.08.2012 22:32

Ответ: Вопросы от новичка
 
камере от первого лица легко получилось сделать такое сглаживание. дополнительный обьект там совсем не нужен.
а вот камера от третьего лица начинает дрожать т.к. при интерполяции она сбивается с цели.
можно интерполировать не финкльную трансформацию камеры, а ее углы вокруг цели(angles в MouseOrbit), а вот при интерполяции позии цели почему-то снова дрожания появляются, а хотелось бы и сглаженное движение сделать.

pax 10.08.2012 14:37

Ответ: Вопросы от новичка
 
А пример показать как ты делаешь?


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

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