Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity

Unity Мультиплатформенный инструмент для разработки игр

Ответ
 
Опции темы
Старый 22.07.2012, 17:01   #1
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
_Epic

Привед!
Взялся за голову (Спасибо Arenshi), переезжаю на юнити.

Хотел бы походу жизни этой темы спрашивать у людей вопросы, который в данный момент у меня возникают.

В качестве первой игры выбрал офлайновую версию BlackBird. По ходу ее разработки возникают очень нубские вопросы, которые я сейчас собираюсь озвучить. Ибо нубство нужно искоренять с самого начала.

В данный момент за два дня есть управление самолетом, стрельба, простой ИИ и всякие плюшки с графикой.

Застрял в довольно простой вещи на первый вгляд:
При стрельбе нужно передавать ссылку на стреляющего игрока в его пулю. Читал "Как скрипты общаются" и что-то нифига у меня не выходит ничего. Буду благодарен за помощь.

Также нужно в попавшего игрока обращаться потом что бы пересчитать его хелсы, а пока пуля просто удаляется и спавнит энд эффект.

В общем на таких связующих частях испытаю проблемы при обращении к другим объектам. Сделал пустой объект, к нему хотел сделать скрипт с базовыми функциями, которые я бы хотел вызывать отовсюду по ходу игры. (Например функция шейка камеры), и опять же фэйл при их вызове.

Посоветуйте нормальный гуи. Нужно аддтивно выводить элементы худа самолета. Но как я понял юнити так не умеет.

В самом коде пока не очень все хорошо) Нид хелп.)
Первый итерации выглядели так:

__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо EvilChaotic за это полезное сообщение:
Антихрист (22.07.2012), cahekp (22.07.2012), DStalk (22.07.2012), FREE MAN (22.07.2012), h1dd3n (10.08.2012), HolyDel (22.07.2012), L-ee-X (03.08.2012), Nex (22.07.2012), pax (22.07.2012)
Старый 22.07.2012, 17:37   #2
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: _Epic

При стрельбе нужно передавать ссылку на стреляющего игрока в его пулю.
Навскидку:
скрипт на игроке.
скрипт на префабе пули.

При клацании кнопки "агоньбатареяжгитеффсех!" скрипт игрока спавнит префаб пули. При этом он получает GameObject - пулю. Через этот GameObject он вызывает .GetComponent(имя_скрипта_пули_можно_в_кавычках) и получает ссылку на скрипт этой конкретной пули. А там уже можно установить переменную напрямую. Т.е. что-то типа такого будет:
var BulletPrefab:GameObject;
...
var goddamnFuckinKillerBullet = GameObject.Instantiate(bullet_prefab, transform.position, transform.rotation);
goddamnFuckinKillerBullet.GetComponent(bullet_scri pt).PlayerVar = gameObject;
Также нужно в попавшего игрока обращаться потом что бы пересчитать его хелсы
А в скрипте пули (если пуля - объект с коллайдером... Я, например, люблю делать партикловые пули) мы имеем OnCollisionEnter, который получает объект типа Collision, в котором мы найдём и collider, и gameObject. А уж через gameObject можно получить и скрипт другого игрока. А если данный скрипт на этом gameObject не найден - значит мы ударились в стену.

Нюанс правда: если у нас скрипт игрока висит на некотором пивоте, к которому присобачен объект с коллайдером - то Collision вернёт нам объект с коллайдером, на котором, ессно, никакого скрипта нету. Либо доставать через transform.parent(.patent.parent.parent.parent, иногда и так, да...), либо через transform.root (но тогда низя будет вкладывать кораблики в другие объекты, например, пустые пивоты - а это удобно для организации сцены).

Кстати, из Collider и Transform тоже можно вытащить скрипт через GetComponent. Потому что они все наследованы от абстрактного Object, в котором лежит этот метод.

Надеюсь, понятно объяснил..
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Taugeshtu за это полезное сообщение:
EvilChaotic (23.07.2012), ЕвГен (15.04.2014)
Старый 22.07.2012, 17:53   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: _Epic

Давай по порядку:
Чтобы передать пуле ссылку на игрока надо чтобы на пуле висел скрипт, который будет хранить эту ссылку. Скрипт можно повесить заранее, а можно во время создания пули. В первом варианте после создания объекта пули надо "добыть" скрипт этой пули и инициализировать ему переменную игроком. Во втором случае у тебя будет ссылка на скрипт при его добавлении.

Допустим скрипт пули

public class BulletMonoBehaviour
{
    public 
Player player;

далее где-то в скрипте Player при стрельбе (первый вариант):
var bulletGameObject = (GameObject)Instantiate(bulletPrefab);
var 
bullet bulletGameObject.GetComponent<Bullet>();
bullet.player this
второй вариант:
var bulletGameObject = (GameObject)Instantiate(bulletPrefab);
var 
bullet bulletGameObject.AddComponent<Bullet>();
bullet.player this
Можно слать мессаджи объектам, с передачей параметров. Например при ударе о объект - можно послать ему сообщение Damage(countDamage). Если в скриптах объекта реализована такая функция, то она будет вызвана. GameObject.SendMessage Правда сообщения поддерживают 0 или 1 параметр.


По поводу пустого объекта с функциями можно поступить по разному:
1. Создать объект в сцене, на него повесить скрипт с глобальными функциями. В Awake записать на него ссылку в статическую переменную. Через нее использовать функции этого объекта.
public class GlobalFunctions:MonoBehaviour
{
    public static 
GlobalFunctions instance;

    public 
void Awake()
    {
        
instance this;
    }

    public 
void ShakeCamera()
    {
       
// тряска камеры
    
}


Тогда использовать функцию тряски можно так:

GlobalFunctions.instance.ShakeCamera(); 
2. Сделать instance из этого примера свойством, автоматически создающим такой объект в сцене (если интересно, то напишу пример позже)

3. Писать функции статическими, тогда их можно вызывать отовсюду и не обязательно вешать скрипт на объект:
public class GlobalFunctions
{
    public static 
void ShakeCamera()
    {
       var 
cam Camera.main;
       
// тряска камеры
    
}


Тогда использовать функцию тряски можно так:
GlobalFunctions.ShakeCamera(); 
PS: долго писал)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (23.07.2012)
Старый 22.07.2012, 19:05   #4
cahekp
Разработчик
 
Аватар для cahekp
 
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений
(для 883 пользователей)
Ответ: _Epic

По поводу ГУИ.
На данный момент сделать аддитивные элементы ГУИ можно таким образом:
1. Создаешь дополнительную камеру. Называешь ее "GUI Camera". Закидываешь ее куда-нибудь подальше от "глаз" основной камеры (либо можно использовать слои, чтоб каждая из камер не видела объекты друг друга).
2. Ставишь "Clear Flags" у ГУИ камеры на "Depth" (чтоб ГУИ камера рисовала гуи-элементы поверх того, что уже отрендерилось).
3. Значение "Depth" делаешь чуть побольше, чем у основной камеры (чтоб ГУИ камера рендерила элементы однозначно позже основной камеры).
4. Перед ГУИ камерой ставишь какую-нибудь плоскость с материалом, который юзает шейдер Particles/Additive.

Вот и всё.

P.S. Поздравляю с переходом на Unity3D! Нам такие люди нужны. )
P.P.S. Depth во 2 и 3-ем пункте - разные вещи и никак друг с другом не связаны.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilChaotic (23.07.2012)
Старый 23.07.2012, 13:18   #5
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: _Epic

Разобрался походу. Ну все, теперь только практика.
Как вам идея насчет того, чтобы написать игрушку для вконтакта?
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 13:24   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: _Epic

Лучше для iOS
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 13:39   #7
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: _Epic

*обиженый ПеКа-фаг мод он* лучше для Win *обиженый ПеКа-фаг мод офф*

Ну и как бы да, тебе точно нужна помощь?)) Мне кажется, только мешать будем.
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 19:23   #8
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: _Epic

У нас на работе парни хорошо шарят в юнити, один из них в составе 3х человек разрабатывает под вконтакт небольшую игрушку. Немного с ним переговорив, я понял, что может это шанс впервые заработать нормальных денег. Может это плохая идея, но я бы очень хотел попробовать, все таки опыт. Поэтому хотел бы знать все плюсы и минусы такого проекта. Ну и в геймдизайне подзаточусь еще (мне это по основной работе очень необходимо).
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (23.07.2012)
Старый 23.07.2012, 19:25   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: _Epic

Сообщение от EvilChaotic Посмотреть сообщение
У нас на работе парни хорошо шарят в юнити, один из них в составе 3х человек разрабатывает под вконтакт небольшую игрушку. Немного с ним переговорив, я понял, что может это шанс впервые заработать нормальных денег. Может это плохая идея, но я бы очень хотел попробовать, все таки опыт. Поэтому хотел бы знать все плюсы и минусы такого проекта.
Ну раз так, то тебе карты в руки
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
EvilChaotic (23.07.2012), Taugeshtu (23.07.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com