Render.ru

Управление камерой в Maya клавишами наподобие Coun

#1
Добрый вечер!
По заданию для смоделированного уровня к игре требовалось предварительно в Maya "проиграть" созданный уровень, передвигаясь по нему с помощью клавиш, в идеале как это используется в CounterStrike/
Проблема - длительное удерживание на кнопку не выполняет никаких действий:-(( Приходится для перемещения щелкать по кнопке с частотой дятла, только в таком случае выполняются команды перемещения камеры.
Мои поиски скриптов, плагинов не дали никаких результатов для решения этой проблемы.
Может кто нибудь в курсе как решить этот вопрос?

Не решается также вопрос, как назначить поворот камеры на перемещение мыши, я уже не надеюсь на решение вопроса привязки поворота камеры к мыши :-((

Mike
 
#2
Сам я левел дизайнер на Firestarter`е (http://www.firestarter-game.com/),
и я тоже , было время с этим игрался.
Но руки не дошли довести до конца.
Остановился я на кнопко-щёлкании (с тоё же частотой , дельта).
Идеи правда есть.
Есть такая штука - scriptJob. Ну знаеш вообщем наверно.
Решение:
global proc moveForw(string $cameraName)
{
global float $lastCamMove;
if ( $lastCamMove== 0.0 || (`timerX` - $lastCamMove)> 0.05 ) {
move -r ... $cameraName;
}
}

На клавишу вешаеш
if(`scriptJob -exist ....`)
{ scriptJob -kill ... //Нужно создать глобальную переменную $camMoveSJob и по ней находить scriptJob .
}
else
scriptJob -idle 1 "moveForw";
// ----------
То есть на клавишу вешаеш scriptJob -idle true который каждые 0.05 сек двигает камеру.
И, соответсвенно на отнускание клавиши : scriptJob -kill .
Попробуй.
Для движения мышой. Ну только через Pan Tool или как там его. Прийдется держать мышу нажатой.
П.С. scriptJob -idle 1 - жрёт все ресурсы. В доке написано, почитай.
П.П.С. Если напишеш, поделись. А то у меня руки так и не дошли.
П.П.П.С. Извини если туманно написал. Но должно сработать.
Насчет мышки : я здалал полёт камеры, и всё с клавиатуры. (влево - вправо, вверх-вниз).
Пригодится эта штука много кому. Всем кто моделит нечто большое. Если сцена 10000 на 10000, по пока сфокусируешся там где надо...
Удачи
 
#3
Hey narod a do pramogo exporta pramo v igruhu ne dogadalis???
u nas vse rabotaet i dasge bolee esli interesno mogu raskazat :))
 
#4
Привет!
Спасиб за подсказку, как выделится время, займусь плотнее scriptJob.
при положительном исходе - обязательно пришлю свой вариант решения.

To Buka: - Для прямого экспорта в игру мне приходится предварительно правильно назвать все объекты, триангулировать полигоны, состыковать плоскости, внедрять служебные объекты - что в конечном счете тормозит работу.
Поэтому гораздо проще прямо в майке протестировать уровень на "играбельность"

Кстати написал скрипт, включающий и отключающие горячие клавишы управления камерой на кнопки W;S;A;D (подобие CS), так что проблем с кнопками нет.

Еще раз спасибо за советы.
 
#5
Да ты не шариш :) (без наезда) Тут же по приколу любимую майу заскриптить и за-"хот-киить" так, что-бы после недельного отпуска, приходилось неделю вспоминать, и привыкать, как всё работает. Лично у меня в hotkey editor`е в рубрике User разобратся уже почти не возможно. А для моих скриптов пришлось выделить 3 отдельные папки что-бы этот кошмар хоть как-то упорядочить :)
(ну не так, всё плохо, но почти. Когда начинаеш скриптить майю, остановится сложно)
 
#6
Привет!
Я застрял на команде timerX, никак не получается заставить по таймеру через 3 сек после запуска скрипта сдвинуть кубик :-(
Может у тебя есть какие то наметки или готовый скрипт таймера?
Я скрипты начал недавно изучать, поэтому не все просекаю.

P.S посмотрел ссылку на сайт, классно, кстати с gsc доводилось контактировать в былые времена, когда в Руссобите парился:)
 
#7
Чесно говоря, я сам такое не пробовал, но уверен что работать будет.
Смысл в чем:
1 . Создать scriptJob -idle ourOwnCoolProc
Он всё (всё свободное) время будет запускать ourOwnCoolProc.
Сожрёт все свободные ресурсы компа. (слава богу это не на долго)
2. ourOwnCoolProc - в ней проверяй сколько времент прошло с прошлого двига кубика. Если больше чем "дельта" -> двиг чуть-чуть. Время запомни.
Вот.
timerX -просто возврашает текущее время в float.
Если всё равно не очень понял, вот тебе мой autoSave, там как-раз я что-то типо этого делал. (засунь текст в vovkaAutoSave.mel и помести в дир. со скриптами, хотя я надеюсь ты это и так знаеш)
Если хочеш, может писать мне на мыло, хотя возможно наша переписка будет ещё кому-то интересна.
/***********************************************************
*
* Program: vovkaAutoSave
* Created: 19.09.2002 13:17
* Author: Vladimir Kazantsev aka BoBaH aka Vovka
* (Firestarter project, level designer). Network name - "Vovka".
* Requested: own use
* Comments: Checks for Last Auto Save time. If > 3 minutes, then writes autosave.ma
* Usage: Copy it to your scripts directory. Run "vovkaAutoSave on"
* on start up.
*
*
************************************************************
*
* History:
*
* GSC 2002 vovka@gsc-game.kiev.ua
************************************************************/
//
// description: This procedure performs AutoSave if last auto save was latter then 3 minutes
//
global proc tryAutoSave(string $autoSaveName)
{
global float $lastAutoSaveTime;
if ( $lastAutoSaveTime == 0.0 || (`timerX` - $lastAutoSaveTime)> 300.0 ) {
$lastAutoSaveTime = `timerX`;

$currentSceneName = `file -q -sceneName`;$currentSceneType = `file -q -type`;
file -rename $autoSaveName;
$res = `file -save -type "mayaAscii"`;
print ("// ! - autosave: " + $res +"\n" );
file -type $currentSceneType ; file -rename $currentSceneName;

}
}

//
// description: This procedure Turns AutoSave ON/OFF
// Usage: vovkaAutoSave("1") or simply "vovkaAutoSave on"
// "vovkaAutoSave -q" return current state (ponti dlya priezzih :)
//
global proc int vovkaAutoSave( string $trigger )
{
global int $autoSaveScriptJobNum;
if ( $trigger == "1" || $trigger == "on" ) {
if ( $autoSaveScriptJobNum == 0 ) {
$cmd = "getFileList -folder (`optionVar -q lastLocalWS`+\"/\") -filespec \"*.ma\"";
$filesExists = eval($cmd);
$i = 0;
for(;;$i++)
{
$findI = 1;
for($file in $filesExists)
{
if($file == ("autoSave")+$i+".ma" )
{
$findI = 0 ;
break;
}
}
if($findI)break;
}
$autoSaveScriptJobNum = eval("scriptJob -event \"SelectionChanged\" \"tryAutoSave autoSave"+$i+"\"");
print ( "Activating AutoSave \n" );
return 1;
}
else {
print ( "AutoSave already running\n" );
return 1;
}
}
else if ( $trigger == "0" || $trigger == "off" ) {
scriptJob -kill $autoSaveScriptJobNum;
$autoSaveScriptJobNum = 0 ;
print ( "Disabling AutoSave \n" );
return 1;
}
else if ( $trigger == "-q" || $trigger == "-query") {
if ( `scriptJob -exists $autoSaveScriptJobNum` && $autoSaveScriptJobNum != 0 ) {
return 1;
}
return 0;
}
return $autoSaveScriptJobNum ;
}
 
#8
Hehe u nas vse napisano i rabotaet
nikto nishego na zaputalsa.
polniy export v igruhu i zapust igruhi zanimaest okolo 1 min v srednem.
Pravda esli zapuskat igruhu na PS2 do eto nemnogo dolshe
Gruzinsa po seti a ne po firewire1394 v TEST station
 
#9
Привет!
Я в самом деле в поисках решения просмотрел все скрипты автосейва на http://www.highend3d.com/, и запутался в них. Снова обратился к документации ScriptJob, и твоему скрипту, и помучившись в экспериментах, нашел волшебную формулу:))
scriptJob -e "idle" "команда";

Таким образом на кнопку Forward я навесил скрипт типа:
int $forw = `scriptJob -e "idle" "dolly -d -0.5 camera1"`;
а на отпускание-release кнопки Forward соответственно скрипт-убийца:) :
scriptJob -kill $forw;
Все заработало замечательно, осталось за маленьким - перепрограммировать кнопки
Камера перемещается плавно, даже позволяет одновременно перемещаться и поворачивать, правда с некоторыми рывками.
Только удивительно, что в Maya, не нашлось возможности горячих клавишей для перепрограммирования мыши, хотя может и есть какой - то скрипт, только надо будет порыться.
To Buka:
А ты сам то левел-дизайнер? Ведь проще и приятней путешествуя в Майе, тут же не вставая с кресла, поправить маппинг, геометрию и прочие баги, вместо того, чтобы в игре составлять список замеченных багов, и вновь запускать Майю, но уже с длинным баглистом в руке:))
 
#10
Поздравляю!
Извини, что не очень хорошо тебе всё обьяснил с самого начала.
Ты как таз сделал так как я и имел в виду.
Лично у меня руки не дошли.
Ещё проверь, как у тебя Windows Resourse Manager скачет , когда ты этот
scriptJob вызываеш. (WinAmp не заикается ?)
Ну ты это, поделишся правда? (как левел-дизайнер - левел-дизайнеру)
(я думал это я изврашенец... :)
 
#11

ia game-developoer-level-modeller-anonymouse :)))
a to chto ia skazal pravda i u nas rabotaet :)

po povodu podelitsa - NET
a vot raskazat pgalsta esli zahochetsa.


PS. interesuushie na mail s.zubakov@creatstudio.com
 
Сверху