Статья: “Начало всему, учимся с нуля!”. В этой статье я дам самое подробноё описание движка Ultimate 3D. Если вы до этого были просто ГМ-щиком, то после этой статьи вы станете настоящим ультиматорам! Если вы хоть раз делали 2Д игру жанра ТДС (вид с верху) или понимаете принцип ТДС, то вы в лёгкую поймете как строить игры на этом движке! Ну переедем к делу! Сейчас создайте папку с вашим обучениям (например’Experement0’). В ней создайте три папки: ‘gfx’, ‘models’, ‘effects’. Теперь сохраните там ваш исходник (он должен быть пуст!). Теперь скачайте АРХИВ ФАИЛОВ (лицензия, опции, 2е картинки, эффекты, и длл). Разархивируйте этот архив в свою папку Затем нажмите в своём исходнике: скрпты=>импортировать скрипты=>и выберите набор скриптов из скаченного архива(Ultm3d_scriptS.gml). Картинки киньте в папку ‘gfx’! Ну начнём писать скрипты! Создайте объект “control”, в создание поставьте скрипт: BG_r=0; BG_g=0; BG_b=0; show_cursor=false; display_help=false; Init(); SetFont("Arial",0,12,0,255,255,255,255); LoadBackground("gfx/nebo.jpg"); SetAmbient(50,50,50,0,0); Так, теперь скачайте рисунок неба __. И поставьте его к себе в папку ‘gfx’. (Рисунок должен называться “nebo”, и иметь формат ‘jpg’.) Если хотите его заменить то в эту строчку- LoadBackground("gfx/nebo.jpg"); впишите путь к своему рисунку за место этого "gfx/nebo.jpg" В степи: external_call(global.u3d_present); external_call(global.u3d_transmit_controller_information,BG_r,BG_g,BG_b,show_cursor); external_call(global.u3d_render); Конец игры: external_call(global.u3d_cleanup); Так с основой разобрались! Теперь создадим объект камеры. Назовем его ‘camera’. В создании объекта пишем: z=6;//высота на которой находится камера view=90;//угол зрения height=9;//высота камеры mouse_speed=0.1;//чувствительность мыши speedx=0.2;//скорость движения MoveCamera();//прописываем камеру В степи пишем: MoveCamera();//степавский скрипт камеры //вращение камерой при помощи мышки GetMousePos();//вытаскиваем переменные мыши из движка rotx+=(global.mouse_y-display_get_height()/2)*mouse_speed;//меняем угл осиХ на сдвиг мыши от центра по оси У roty+=(global.mouse_x-display_get_width()/2)*mouse_speed ;//меняем угл осиУ на сдвиг мыши от центра по оси Х SetMousePos(display_get_width()/2,display_get_height()/2);//ставим мышь в центр //ставим ограничение вращения камеры вверх-вниз(вращение по осиХ) if(rotx<-60){ rotx=-59; } if(rotx>60){ rotx=59; } С камерой всё! Теперь можете посмотреть что вышло! Ну вот, основу вы создали! Теперь загрузим модель пола, для ориентировки. Создаём объект с названием “island”. И в его создании пишем: file='models\island.3ds';//путь к самой модели. z=-60;//ставим высоту на которой наша земля будет находится. (-60 потаму что эта модель не отцентрована) scalx=1.9;//скалинг по оси Х (то есть меньше 1-сжимаем, более-растягиваем) scaly=1.9;//скалинг по оси У scalz=1;//скалинг по оси Z LoadMesh();//загрузка модели Теперь это в степ: Step();//Это что бы модель всё время обновлялась (короче обязательно!) Это в уничтожения: Destroy();//что бы сама модель тоже удалилась, если удалится сам объект. Смотрим что вышло! Осматриваться можно а ходить нельзя? Так давайте заставим камеру ходить! Есть такой скрипт, называется “Move()”. Это передвижение в направление. Move имеет три аргумента : 1)Угол движения по оси Х. 2)Угол движения по оси У(так же как direction!затрагивает тока х, у!). 3)Скорость Допустим введём вот что в степ камеры – Move(-90,0,8). Получится что камера начнёт двигаться в верх! Вот так вот в низ- Move(90,0,8). Вот так- Move(0,40,8). –пойдёт в сторону под углом 40градусов. Но думаю ясно… Если вы уже вводили Move() в степ камеры то уберите его, это была демонстрация скрипта. Поставьте это в степ: if(keyboard_check(vk_up)){//если нажата кнопка вверх Move(rotx,roty,speedx);//движемся туда куда смотрит камера } Смотрите! только под землю на залатайте! Теперь можно латать туда куда смотрит камера. Теперь внимание- вот вам задача, заделайте так что бы при нажатие кнопки вниз, камера летела назад. Подсказка: в Move(rotx,roty,speedx); нужно в первый или второй аргумент добавить или ‘-30’, или ‘-55’, или ‘-270’, или ‘-180’, или ‘-90’, или ’+80’. Это важная задачка, и не надо делать всё проверенным методом тыка! Здесь додуматься надо… Не знаю вышло у вас или нет. Но надеюсь что да! Далее в степ допишите: if(keyboard_check(vk_left)){//если нажата кнопка влево Move(rotx,roty-90,speedx);//движемся в лево } Теперь смотря на это сделайте, так что бы при нажатии вправо камера летела вправо! Это тоже вам задачка, тут тоже кое что кое куда вам нужно добавить.
Ну вот вы и научились основам! Есть ещё вам задачка, загрузить модель в формате ‘3ds’, в ваш проЭкт. Подсказка: island, это тоже 3Д модель. По её образцу можно загрузить модель в игру. Только не забудьте про переменную z, в ней напишите z камеры!.
И вот я здесь после своего первого комента(31.10.2009 13:23), прошло столько времени и я научился многому, как работать с двигами, как работать с графикой. Вот теперь мне пора юзать Ultimate по полной!!!!!!!!!
Если такая же ошибка в исходники- значит у тебя что то с компом((( Возможные причины: Установлена система виста или линакс Не установлена\или не та видо карта\драйвер. - это можно проверить запустив любую другую 3Д игру... Или у тебя ГМ8, хотя в ГМ8 такого быть не должно…
___________________________________________ ERROR in action number 1 of Create Event for object camera:
In script MoveCamera: Error in code at line 1: // MoveCamera()// This function should be called in the step event of every object // that's used as camera.u3d_type=15;InitializeVariable("number",0);InitializeVariable("actual_aspect",0);InitializeVariable("render_target",0);InitializeVariable("v_left",0);InitializeVariable("v_top",0);InitializeVariable("v_width",view_wport[0]);InitializeVariable("v_height",view_hport[0]);InitializeVariable("view",90);InitializeVariable("height",0);InitializeVariable("falling",0);InitializeVariable("falling_speed",0);InitializeVariable("follow",0);InitializeVariable("perspective",0);InitializeVariable("distance",10);InitializeVariable("rotatex",0);InitializeVariable("rotatey",0);InitializeVariable("min_range",0.5);InitializeVariable("max_range",100000);InitializeVariable("z",0);InitializeVariable("rotx",0);InitializeVariable("roty",0);InitializeVariable("rotz",0);InitializeVariable("rotzprevious",0);// Validate the values of the variablesv_left=max(v_left,0);v_top=max(v_top,0);if(v_width==0 && v_height==0){ v_width=view_wport[0]-v_left; v_height=view_hport[0]-v_top;}if(min_range<=0){ min_range=0.5;}if(max_range<=min_range){ max_range=100000.0;}// Calculate the gravityzprevious=z;if(falling){ z+=falling_speed; falling_speed-=global.gravitation;}// Follow the given object if requestedif(follow!=0 && perspective==0){ rotx=-point_direction(0,0,point_distance(x,y,follow.x,follow.y),z+height-(follow. z+follow.height)); roty=-90+point_direction(0,0,x-follow.x,y-follow.y); Move(0,roty,(point_distance(x,y,follow.x,follow.y)-distance)/distance);}if(follow!=0 && perspective==1){ falling=0; falling_speed=0; x=follow.x; y=follow.y; z=follow.z+follow.height-height; rotx=follow.rotx+rotatex; roty=follow.roty+rotatey; Move(rotx,roty,-distance);}if(follow!=0 && perspective==2){ var temp,tempx,tempy,tempz; falling=0; falling_speed=0; tempx=x; tempy=y; tempz=z; x=follow.x; y=follow.y; z=follow.z+follow.height-height; rotx=follow.rotx+rotatex; roty=follow.roty+rotatey; Move(follow.rotx+rotatex,follow.roty+rotatey,-distance); temp=x; x=tempx; tempx=temp; temp=y; y=tempy; tempy=temp; temp=z; z=tempz; tempz=temp; x+=(tempx-x)*0.1; y+=(tempy-y)*0.1; z+=(tempz-z)*0.1; rotx=-point_direction(0,0,point_distance(x,y,follow.x,follow.y),z+height-(follow. z+follow.height)); roty=-90+point_direction(0,0,x-follow.x,y-follow.y);}external_call(global.u3d_update_camera_transformation,number,x,y,z+height,rotx,r oty,rotz);external_call(global.u3d_update_camera_projection,number,min_range,max_range,view ,v_left,v_top,v_width,v_height,actual_aspect,render_target);
at position 2538: Unknown variable u3d_update_camera_transformation
Вроде так всё понятно... но давайте продолжение!)желательно где описываеца , как сделать так чтобы например камера не проваливалась в сам остров при движении... Или как сделать 3д объект...заставить его двигаца :)
"желательно где описываеца , как сделать так чтобы например камера не проваливалась в сам остров при движении" Это уже есть но там толька за место острова, ландшафт в 2х частях...