Это копия, сохраненная 15 октября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
А я люблю обмазываться не свежими ассетами и таскать их мышкой. Каждый день я хожу по ассет стору с черным винтом для ассетов и собераю в него все ассеты которые вижу. На два полных винта целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, иду к компьютеру, включаю юнити...ммм и сваливаю в нее свое сокровище. И таскаю ассеты мышкой, представляя, что меня поглотил единый организм юнити. Мне вообще кажется, что ассеты, умеют думать, у них есть свои семьи, города, чувства, не удаляйте их в корзину, лучше приютите у себя, говорите с ними, ласкайте их.... А вчера за компьютером, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в ассеты, рыбы, водоросли, медузы, все из ассетов, даже небо, даже Аллах.
Предыдущий тред >>109094 в бамплимите
Полезные ссылки:
http://docs.unity3d.com/Documentation/ScriptReference/ справка по скриптингу в юнити
unity3d.ru - Русскоязычный форум
forum.cgpersia.com - главный пиратский форум для всех юнитибогов, огромная свалка, в которой при желании можно найти практически любой ассет для юнити
https://mega.co.nz/#F!YBNjmZZa!BcEIxhmg6ykJivStEQXVQg -
Сборочка ассетов от доброго анона на 48 Гб. Запускать через хром.
зафейлил оп пост:
А я люблю обмазываться не свежими ассетами и таскать их мышкой. Каждый день я хожу по ассет стору с черным винтом для ассетов и собераю в него все ассеты которые вижу. На два полных винта целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, иду к компьютеру, включаю юнити...ммм и сваливаю в нее свое сокровище. И таскаю ассеты мышкой, представляя, что меня поглотил единый организм юнити. Мне вообще кажется, что ассеты, умеют думать, у них есть свои семьи, города, чувства, не удаляйте их в корзину, лучше приютите у себя, говорите с ними, ласкайте их.... А вчера за компьютером, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в ассеты, рыбы, водоросли, медузы, все из ассетов, даже небо, даже Аллах.
Предыдущий тред >>109094 в бамплимите
Полезные ссылки:
http://docs.unity3d.com/Documentation/ScriptReference/ справка по скриптингу в юнити
unity3d.ru - Русскоязычный форум
forum.cgpersia.com - главный пиратский форум для всех юнитибогов, огромная свалка, в которой при желании можно найти практически любой ассет для юнити
https://mega.co.nz/#F!YBNjmZZa!BcEIxhmg6ykJivStEQXVQg -
Сборочка ассетов от доброго анона на 48 Гб. Запускать через хром.
Надеюсь код не придется кидать, есть проблема: в скрипте 1 я создаю инстанс объекта, достаю из объекта скрипт 2 и у скрипт 2 вызывается метод setTrue, который ставит флаг в ТРУ, когда флаг ТРУ - а update скрипта 2 срабатывает анимация движения.
Так вот, если я вызову этот метод setTrue прямо в start скрипта 2 - то все работает, а если из скрипта 1 вызываю скрипт2.setTrue - то флаг меняется на ТРУ в методе setTrue, а в update этого изменения не видно. Т.е. значение переменной меняет в методе, а для объекта класса ничего не меняется. Причем, если я меняю любые переменные класса, трансформ например - они меняются только в пределах метода, а для всего экземпляра класса - нет. Как такое вообще может быть?
Вот, у чувака в точности моя проблема, но я так и не понял как он её решил,
GetComponent<Movement>()
я ведь тоже получаю экземпляр объекта через GetComponent.
http://answers.unity3d.com/questions/682798/calling-function-from-other-script-doesnt-change-i.html
>Надеюсь код не придется кидать,
Ну хуй знает.
Есть два стула скрипта
s1.cs
public class s1 : MonoBehaviour
{
public GameObject source;
int idx = 0;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.H))
{
Debug.Log("press H");
var newObj = GameObject.Instantiate(source) as GameObject;
newObj.transform.parent = this.transform;
newObj.name = "second " + idx++;
newObj.GetComponent<s2>().SetTrue();
}
}
}
s2.cs
public class s2 : MonoBehaviour
{
bool boolValue = false;
void Start()
{
Debug.Log("start "+ name + ": value: " + boolValue);
}
void Update()
{
Debug.Log("update " + name + ": value: " + boolValue);
}
public void SetTrue()
{
boolValue = true;
}
}
Вывод дебага на пике.
>Надеюсь код не придется кидать,
Ну хуй знает.
Есть два стула скрипта
s1.cs
public class s1 : MonoBehaviour
{
public GameObject source;
int idx = 0;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.H))
{
Debug.Log("press H");
var newObj = GameObject.Instantiate(source) as GameObject;
newObj.transform.parent = this.transform;
newObj.name = "second " + idx++;
newObj.GetComponent<s2>().SetTrue();
}
}
}
s2.cs
public class s2 : MonoBehaviour
{
bool boolValue = false;
void Start()
{
Debug.Log("start "+ name + ": value: " + boolValue);
}
void Update()
{
Debug.Log("update " + name + ": value: " + boolValue);
}
public void SetTrue()
{
boolValue = true;
}
}
Вывод дебага на пике.
Не ну а че ты, думаешь книг по геймдизайну не написано и по организации рабочего процесса? Ну статейки точно есть, читни. А так да, записать, все продумать, а потом разбить на подзадачи, написать сколько на каждую понадобится часов (тут тебе будут нужны люди, которые хоть примерно в теме), потом прикинуть, сколько с тобой будет работать людей и, соответственно поделив одно на другое получить время разработки.
>Много ли придется перепиливать, если я захочу добавить фишки в существующий код?
Я без понятия что за код и что за фишки, но да, дохуя.
Ну что ты за дебил то такой? Третий раз тебе говорю, прочитай документацию. Прочитай, дурень, а не просто глазами пробеги. Проанализируй и сделай выводы для себя.
Ага, нашел ошибку - компонент доставал у gameObject-а, для которого инстанс не создал. Т.е. объект как-бы не нулл, он паблик и инициализирован в инспекторе префабом (который не на сцене), в итоге ни на что не ругалось, но и не работало.
Мне вот интересно, а какой статус у такого объекта? Который задан через инспектор - он инициализирован, но на сцене его нет, или как?
>Третий раз тебе говорю, прочитай документацию.
А вот не был бы ты мудаком и просто подсказал. Другой-кун.
Ну сём, если я тебе подскажу, то ты так и останешься макакой, которая при каждой проблеме бежит на форум, а не решает её самостоятельно.
1Это не мой пост.
2Нихуя не понятно где проебался, сегодня я уже по урокам с ютюба даже пробовал, каждый начинал с чистого листа.
У них срабатывает у меня нет.
Ты меня тралишь кароч, а "прочитай документацию" это такой новый мемчик.
Нет, я конечно догадывался, что ты беспросветно туп, но ты просто побил все рекорды.
Забудь короче, тебе даже документация не поможет. Ты навсегда останешься ассетодауном.
А каким образом? Я вешал звук как ассет и проигрывал через audio.play, но это только для одного звука.
Да!
>документация
>бесполезная вещь
я нихачу ничо четать, никакие дакументации, там жи думать нада еще как ети функции использавать)) да и эта все хуйня там ничо полезнава нету)) ти миня тралируешь прост)) вот есле бы ти за миня падумал и скозал как игру зделоть, вот тагда бы заебися была))
Охуеть просто. Местные кирюхи никогда не меняются. Человеку с мозгом достаточно открыть референс и найти за пару минут нужный компонент, узнать его свойства. Погуглить как что-то делается на худой конец. Но даун даже не допускает такой мысли, что кто-то уже сталкивался с его проблемой и описал решение. Ему гораздо проще спросить хуйню в милионный раз, пусть другие найдут решение.
Вот тебе песенка для мотивации.
Подзабил я пока на создание мигающих лампочек, так как всё это требует долгого ковыряния в движке Q1. Перекинулся на реализацию системы Entit'ей.
Гифрелейтед - path_track и некое подобие func_tracktrain. Едет по указанному пути, изменяя скорость по параметрам указанным там же. Поворачивает мгновенно, потому что не реализована линейная интерполяция по точкам "на концах трамвая". Скриптовой логики пока тоже нет никакой.
Начало положено, в общем.
Может кто подскажет хороший софт пишущий скринкасты в .webm?
Поссал тебе в ротик на всякий случай.
>Может кто подскажет хороший софт пишущий скринкасты в .webm?
Bandicam записываю && xMedia recode конвертирую (аноним-легион)
||
Fraps && ffmpeg (я)
ты крут, но ты реально упоротыми вещами занимаешься.
Бамп. Никто не знаит? Мне пока только друг показал как шар с горы зделать. Я хочу чтобы он спускался неровно и стрелять по нему. Потом я скачаю джип и зделаю его вместо шара, чтобы его взрывать и он разлетался. Это я сам смогу заменить шар на джип. Скажите как зделать неровным скатывание!
Какая-то хуёвая ирония, чувак.
> Пока только лую
> нодовый редактор логики
Ясно, я пока тогда на юнити останусь. Все равно у меня модельки уровня УГЛЕПЛАСТИКА
Тебя ебёт?
Что не так?
Фишки уровня статов персонажа.
Ситуация: скачал последнюю юнити и говноисходник флаффибёрда, занимаюсь переиначиванием на свой лад, точнее - мои картинки в HD, заточка под флэш 800х600
Оригинал: http://rghost.ru/56524324
Моя альфа: http://rghost.ru/56524319
Сфотаю сиськи своей тян с супом, если мне пояснят следующие вопросы:
Почему во флеше не работает кнопка OK когда сдохнешь, как исправить?
Нихуя не понял с координатами. Когда я ставлю объект на поле, у него всегда 0:0
Относительно чего блядь, самого себя?
Вот например слева ReadyScreen. В GameController он в начале игры пихается в Vector3.Zero. Это типа середина экрана. В данный момент проблемы нет, но пока экспериментировал с камерой оно часто пихалось вовсе не в центр, а левее. Где я могу увидеть эту нулевую координату?
Далее ScoresScreen. Сейчас он торчит справа. Если я все элементы его выделяю и перетаскиваю правее за экран, то при проигрыше надпись и медаль встают как надо, в центр, а кнопки нихуя. Какого чёрта?
Генератор труб - генерит и дестроит их опять же хуй пойми где - в 1f и -1f - а где я могу увидеть эти границы в редакторе и поменять их?
Ну что же вы, програмизды?
С 1f -1f решил проблему сменив на 2f -2f - это что, привязано к Size мэйнкамеры?
Element хранит функцию коллбэк, и когда заканчивают свои дела - вызывает её, в качестве параметра калбэк передается из Controller.
class Element{
public delegate void OnMoveComplete();
private OnMoveComplete callback;
public void setCallBack(OnMoveComplete _callback){
callback = _callback;
}
public void applyMove(){
//все дела, код движения
if(moveProgress >= 1){
if(callback != null){
callback();
callback = null;
}
}
}
}
В Controller
private void onMoveEnd(){ ... }
private void move(){
.....
element1.setCallBack(onMoveEnd);
element1.applyMove();
element2.setCallBack(onMoveEnd);
element2.applyMove();
.....
}
Проблема в том, что если в одном экземпляре Element после вызова калюэка я ссылке на функцию присваиваю null - то и во втором экземпляре Element тоже становиться null. По итогу калбэк вызывается только раз в первом экземпляре, а во втором - из-за проверки на нулл - нет.
Как так - функция это же объект, т.е. передается по ссылке, и нихуя не статический. Я в растерянности.
Проверял на чистом шарпе вот тут
http://www.compileonline.com/compile_csharp_online.php
код почти такой же - все нормально работало.
class Program
{
static void Main()
{
Class1 test = new Class1();
test.run();
}
}
public class Class1{
public void func(){
Console.WriteLine("FFFFFFUUUUu");
}
public void run(){
Lol lol1 = new Lol();
Lol lol2 = new Lol();
lol1.setAnim(func);
lol2.setAnim(func);
lol1.apply();
lol2.apply();
}
}
public class Lol{
public delegate void Mahdelegate();
private Mahdelegate func;
public void setAnim(Mahdelegate _func){
func = _func;
}
public void apply(){
if(func != null){
func();
func = null;
}
}
}
Element хранит функцию коллбэк, и когда заканчивают свои дела - вызывает её, в качестве параметра калбэк передается из Controller.
class Element{
public delegate void OnMoveComplete();
private OnMoveComplete callback;
public void setCallBack(OnMoveComplete _callback){
callback = _callback;
}
public void applyMove(){
//все дела, код движения
if(moveProgress >= 1){
if(callback != null){
callback();
callback = null;
}
}
}
}
В Controller
private void onMoveEnd(){ ... }
private void move(){
.....
element1.setCallBack(onMoveEnd);
element1.applyMove();
element2.setCallBack(onMoveEnd);
element2.applyMove();
.....
}
Проблема в том, что если в одном экземпляре Element после вызова калюэка я ссылке на функцию присваиваю null - то и во втором экземпляре Element тоже становиться null. По итогу калбэк вызывается только раз в первом экземпляре, а во втором - из-за проверки на нулл - нет.
Как так - функция это же объект, т.е. передается по ссылке, и нихуя не статический. Я в растерянности.
Проверял на чистом шарпе вот тут
http://www.compileonline.com/compile_csharp_online.php
код почти такой же - все нормально работало.
class Program
{
static void Main()
{
Class1 test = new Class1();
test.run();
}
}
public class Class1{
public void func(){
Console.WriteLine("FFFFFFUUUUu");
}
public void run(){
Lol lol1 = new Lol();
Lol lol2 = new Lol();
lol1.setAnim(func);
lol2.setAnim(func);
lol1.apply();
lol2.apply();
}
}
public class Lol{
public delegate void Mahdelegate();
private Mahdelegate func;
public void setAnim(Mahdelegate _func){
func = _func;
}
public void apply(){
if(func != null){
func();
func = null;
}
}
}
Первый елемент, создается, из него вытаскивается скрипт и сохраняется в ArrayList snakeElements. (Да-да, я пишу ссаную змейку в качестве тестового).
GameObject instanceSnakeElement = (GameObject)Instantiate (prefabSnakeElement);
instanceSnakeElement.transform.parent = transform.parent;
instanceSnakeElement.transform.position = startPosition;
SnakeElement snakeElement = instanceSnakeElement.GetComponent<SnakeElement>();
snakeElements.Add (snakeElement);
snakeCoords.Add (startCoords);
Второй, хранится не в всписке, а сам по себе.
public void setPickUpOnField(Vector3 position){
GameObject pickUpInstance = (GameObject)Instantiate (prefabSnakeElement);
pickUpInstance.transform.parent = transform.parent;
pickUpInstance.transform.position = position;
pickUp = (SnakeElement)pickUpInstance.GetComponent<SnakeElement>();
}
Ну и в определенный момент, я им передаю функцию для колбэка и вызываю старт анимации.
pickUp.setCallBack (onSwitchComplete);
pickUp.moveTo ( ...); // вызов анимации, когда отработает, вызывает колбэк, и присваивает переменной с колбэком null
(snakeElements [0] as SnakeElement).setCallBack (onSwitchComplete);
(snakeElements [0] as SnakeElement).moveTo (...); //вызов анимации, тут уже не вызывается колбэк, он с какого-то хера стал null
> Даун с триггером: rigidbody
Сам такой, бака! О ригид боди я написал еще в первом посте. Ригидбоди-хуеди, все правильно настроено, но не работает.
В чем дело?
Какая-то хуйня.
Можно сделать так например? будет работать как ты хочешь.
class Element
{
public delegate void OnMoveCompleteHandle();
public event OnMoveCompleteHandle OnMoveComplete;
public void applyMove()
{
//все дела, код движения
if (moveProgress >= 1)
{
if (OnMoveComplete != null)
{
OnMoveComplete();
}
}
}
}
public class Controler
{
private Element element1;
private Element element2;
private void OnMoveEnd()
{
// фактическая реализация
}
// инициализация - одни раз
private void Init()
{
element1.OnMoveComplete += new Element.OnMoveCompleteHandle(OnMoveEnd);
element2.OnMoveComplete += new Element.OnMoveCompleteHandle(OnMoveEnd);
// можно еще так
// element2.OnMoveComplete += OnMoveEnd;
}
private void move()
{
element1.applyMove(); // будет вызван OnMoveEnd()
element2.applyMove();
}
// НЕ забудь отписаться от события при удалении элемента - память не резиновая!!
// element2.OnMoveComplete -= OnMoveEnd;
}
Можно сделать так например? будет работать как ты хочешь.
class Element
{
public delegate void OnMoveCompleteHandle();
public event OnMoveCompleteHandle OnMoveComplete;
public void applyMove()
{
//все дела, код движения
if (moveProgress >= 1)
{
if (OnMoveComplete != null)
{
OnMoveComplete();
}
}
}
}
public class Controler
{
private Element element1;
private Element element2;
private void OnMoveEnd()
{
// фактическая реализация
}
// инициализация - одни раз
private void Init()
{
element1.OnMoveComplete += new Element.OnMoveCompleteHandle(OnMoveEnd);
element2.OnMoveComplete += new Element.OnMoveCompleteHandle(OnMoveEnd);
// можно еще так
// element2.OnMoveComplete += OnMoveEnd;
}
private void move()
{
element1.applyMove(); // будет вызван OnMoveEnd()
element2.applyMove();
}
// НЕ забудь отписаться от события при удалении элемента - память не резиновая!!
// element2.OnMoveComplete -= OnMoveEnd;
}
Документацию курил, настройки риджид-боди и Physics 2D Manager не помогают.
У тебя раздвоение личности?
Дрови ректангл и аддируй ему хейт при чтобы колумн райзился.
а что приборы?
да на, блять.
using UnityEngine;
[ExecuteInEditMode]
public class FuckingCube : MonoBehaviour {
GameObject Cube;
[Range(0,10)]public float height = 5f;
void Update () {
if(Cube == null)Cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Cube.transform.position = transform.position + new Vector3(0, height * 0.5f, 0);
Cube.transform.localScale = new Vector3(1,height,1);
}
}
Сделай скрипт FuckingCube.cs, перетяни на пустой геймобжект и увидиш как работает.
Да это давно сделал тремя способами. Теперь думаю как же мне толщину то понаделать.
Рисуй закрашеную окружность с радиусом пропорциональным расстоянию от точки А до текущей точки Ц. Ц же мееедленно двигай к Б.
мимодругойгодныйсовет
ОбоJSрался
Как я тебе навангую? Кидай демку или хотя бы скрин со статами сцены
>видео 512
Слабая. Надо видюху на гиг или лутше на два. Бери такую, базарю: http://www.dns-shop.ru/catalog/i175516/videokarta-pci-e-palit-geforce-gt-630-2048mb-64bit-ddr3-dvi-dsub-hdmi.html
Я после AS и задаюсь вопросом как организовать систему сейв лода в юнити, мне кажется что с xmlями можно заебаться тут. Может есть какието популярные готовые решения?
тi такой-ка какол.
Вообще, по печальному опыту, в ассет сторе сплошное говно за редким исключением. Лучше потратить время и самому написать что-то, чем там брать.
Если есть, оставляйте фейкоконтакты пожалуйста.
if (Input.GetMouseButtonUp(1))
{
Rigidbody2D magicBulletInstance = Instantiate(magicBullet, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D;
magicBulletInstance.velocity = new Vector2(20, 0);
}
Предполагалось что этот код будет создавать и запускать префаб по координате x с постоянной скоростью. Однако вместо этого он просто перебрасывает 1 раз префаб на некоторое расстояние вперед. Если поставить в префабе у Rigidbody2D галочкy "is kinematic", то все работает прекрасно. Но к сожалению этот вариант не подходит по причине сложностей определения коллизий.
К тому же это код из юнитивского примера (про картошечку), и там этот код работает в методе Update(). У меня же начинает подавать признаки жизни только в FixedUpdate().
Ты попробуй, ну.
Только не забудь вывести переменную с пулей в глобальные поля объекта. И лист запили, если таких много нам.
Хуйня.
Проапгрейдил юнити до 4.5.1f3, эта проблема исчезла, зато появились другие проблемы с физикой, пиздец вообщем.
Умник. Тебя мамка не учила не трогать велосити? Это ж вообще низя делать если не хочешь шоб физон не распидорасило.
Двигать надо через ригидбоди.АддФорсе(дохуя, Форсмод.ЧерезЖопу)
лол, с сажей зачем-то отписался.
C аддфорсом такая же хуйня, префаб исчезает и появляется немного дальше. На счет распидорашеной физики и велосити - код взят из их платформера в ассет сторе, по которому они делали обучающие гайды. Скорее у меня в юнитях наебнулось что либо.
Я через физон вообще ниего не двигаю, либо через CharacterController либо напрямую меняю координаты у трансформа через апдейт
Ну и зря. Сделал персонажа для платформера, который целиком двигается через velocity. Брат жив, зависимость есть. Только багованые коллизии в юнити не дают покоя.
Нанах епта.
Бля, бротиш ты гений короч, не знаю как я не додумался до етой хуйня. Спасибо.
#pragma strict
var SpawnPoint : Transform[];
function Start () {}
function Update () {}
function OnTriggerEnter (man : Collider2D) {
if (man.Collider2D.tag == "Player") {
var element : int = Random.Range (0,SpawnPoint.length);
man.transform.position = SpawnPoint[element].position;
}
else {}
}
Консоль ругает:
Assets/4lvl/SpawnPoint.js(6,17): BCE0019: 'Collider2D' is not a member of 'UnityEngine.Collider2D'.
О себе:
Учил Паскаль, Дельфи, Си. ООП до прозрения презирал. Си Шарп учить или скрипты на жабу или ассеты таскать, как вообще происходит разрабкотка игр, на этих ваших Юнитах? Планирую пилить простую РПГ нитакуюкаквсе игру, на ведро и на ПК.
Понгозмейкотетрисный минимум, затем только "простую" РПГ.
Ну выключи гравитацию и добавь торможение, уёба.
Мне бы сам принцип понять.
Неужели нужно писать некий глобальный скрипт, который будет проходить по всем объектам в сцене и сохранять параметры в текстовый файлик.
А потом все это дело считывать и восстанавливать вручную. Это же забебисто щописец. Много же разных объектов по типу - персонаж, кораблик, машина - у всех разный набор компонентов и переменных.
У меня блеать прототип готовый лежит, на этом встрял - не хватает скилов программирования. (
Сериализация, чувак.
ЧТО ДЕЛАТЬ БЛЯДЬ?
Формат какой особый нужен? ЧТО ЕМУ БЛЯДЬ НУЖНО?
Вся суть юнитискама.
В пределах каждой отдельной сцены сейв/лоад работает отлично,
А вот когда мне нужно загрузить сейв извне - из другой сцены, то выходит хуйня (90% объектов не загружены), прозреваю что это потому, что Save Game Manager трекает только объекты в пределах своей сцены.
Намекните как эту траблу преодолеть. Мануал читал.
Все, в layers было скрыто
Попробуй шейдер сменить у материалов, может косячит видяха
Так что, нету в Serializer возможности корректно грузить сейв из другой сцены? Или это я нихуя не понял в room-ах?
Вечер в хату, пацаны. Хочу запилить свой рогалик, но не тут-то было.
Карту я генерирую, и когда хочу её отрисовать (карта 200*200 тайлов), каждый тайл стены - куб, тайл пола - сплющенный куб) происходит страшное - юнити начинает тормозить страшно, хотя в Update() у меня вообще пусто...
Ну и чёрные точки на местах стыков - хз что с ними делать.
> хочу её отрисовать (карта 200*200 тайлов), каждый тайл стены - куб, тайл пола - сплющенный куб
У тебя больше 40к кубов в сцене и ты удивляешься тормозам?
Многовато? Ладно, уменьшил карту в 25 раз (40*40), настроил материалы. Тормоза пропала, но я ещё хочу чтобы на хендхелдах работало.
И карта - бейби сейз получается, вообще ни о чём.
Как правильно делать, чтобы большие карты и без тормозов чтобы?
>я ещё хочу чтобы на хендхелдах работало.
Нажми в окошке "Game" кнопочку "Stats", обрати внимание на Draw Call, уясни, что на айфонах нужно меньше сотни draw call. Заплачь.
можешь попробовать описать процесс создания карты как процедурную генерацию меша. разделить карту на более крупные сегменты и подгружать только ближайшие к игроку, а не пиздилиард кубиков. или если хочешь кубики то делай активными только ближайшие.
Юнити, видимо, оптимизирует их, не так уж и плохо, правда?
>>124774
Как видишь, на количество вызовов DrawIndexedPrimitive количество моих кубов зависит мало. Я так понимаю, тормоза идут от того, что кубы в юнити считаются отдельными ГеймОбжектами, и юнити каждый кадр опрашивает их, вызывает пустой апдейт и т.д.
Как можно сделать так, чтобы куб появлялся не геймобжектом, а просто тупой геометрией, присоединённой к какому-нибудь объекту?
Тогда я смогу выделить все внутренние кубы (которые не образуют стены, потому что стены я ещё какими-нибудь красивыми сделаю) и сделать из них один объект.
Пик отвалился.
Попробуй динамически отключать всю хуйню кроме мешрендера у своих кубов дальше определенного радиуса вокруг персонажа.
А насчет дравколлов - юнити рисует все, что запилено одним и тем же материалом, за один дк, хоть 1, хоть 1000 объектов.
У меня пока даже персонажа нет, лол. Я с лабиринтом никак не совладаю. И алгоритм комнат у меня тоже никакой, надо его изменить будет.
Вообще я теперь хочу запиливать лабиринт процедурно, а всякие объекты вроде украшательств стен и т.д. отдельно уже поверх них накладывать. Хорошая идея?
Мой тебе совет: делай так, как получается и как быстрее, если сейчас начнешь ебать голову оптимизацией, то нихуя не сделаешь в принципе. Лучше иметь скрепяще-пердящий и дышащий на ладан прототип, чем нихуя и распухшую от интернетов и матана голову.
>запиливать лабиринт процедурно, а всякие объекты вроде украшательств стен и т.д. отдельно уже поверх них накладывать
вроде не вижу препятствий, ебашь.
{
Texture2D grass = (Texture2D)Resources.Load("grass");
SplatPrototype[] splats = new SplatPrototype[1];
splats[0].texture = grass;
}
ЧОМУ NullReferenceException: (null) НА ПОСЛЕДНЕЙ СТРОКЕ, ЕСЛИ ТЕКСТУРА В ПЕРЕМЕННУЮ ПОДГРУЖАЕТСЯ НОРМАЛЬНО?((((
public static void CreatePlanetSurface ()
{
Texture2D grass = (Texture2D)Resources.Load("grass");
SplatPrototype[] splats = new SplatPrototype[1];
splats[0].texture = grass;
TerrainData surfaceData = new TerrainData();
surfaceData.size = new Vector3(2000, 600, 2000);
Terrain.CreateTerrainGameObject(surfaceData);
RenderSettings.skybox = (Material)(Resources.Load("skyboxes/space01"));
GameObject player = (GameObject)Instantiate(Resources.Load("characters/player"), new Vector3(20, 1, 20), Quaternion.identity);
GameObject handler = GameObject.FindGameObjectWithTag("handler");
handler.transform.parent = player.transform;
handler.transform.localPosition = new Vector3(0, 0, 0);
}
Солюшен, если кому пригодится:
SplatPrototype[] splats = new SplatPrototype[1];
splats[0] = new SplatPrototype();
splats[0].texture = grass;
Я не знаю, как там в ваших юнитях, но тебе нужно создать меш, чтобы был доступ к его вертексам. После того, как создашь - идёшь по своему массиву и смотришь, является ли текущий элемент стеной. Если нет, то просто добавляешь квад пола в вертекс-буффер меша. Если же стена, то смотришь, с какой стороны она граничит с полом. Если ни с какой, то просто пропускаешь её. Если граничит, то создаёшь с той стороны квад стены. За вечер сделаешь (скорее всего, придётся слегка поебаться с текстурными координатами, а в остальном сложностей нет).
В результате получишь один геймобжект с одним мешем. Для того, чтобы отрисовать только то, что видно игроку, создаёшь таким же алгоритмом непрозрачный чёрный полигон поверх уровня.
Стд::ошибка невбая на шарпе - сделать новый массив, но не делать новых элементов в нем, и сразу к ним обращатся.
>ВСЮ НОЧЬ ЕБАЛСЯ
Ничего, первый секс он трудный самый. Скоро через пол года на полуавтомате будешь за такими вещами следить.
ЕОИ, которую я запилил на коленке за два дня. Трабла в том, что то, как она идет у меня и у других - две совсем разные вещи.
http://pastebin.com/ALXBi1Ng - практически весь код.
Сначала тик Update у меня и у моих товарищей отличался в десятки раз. Потом и вовсе перестал "спавнится" Йоба. RaycastHit работает плохо, "хитрег" совершенно не того размера которого должен быть.
Может вы что-нибудь посоветуете?
Просто даже не понятно с какой стороны подойти. Мнеб способ полегче.
Ну его на тайлах делать или как? Получится ли адатпировать стандартный физон юнити2д для платформера? Или он слишком уж заточен под реализм и легче просто свой упрощенный написать? Как-то вродеб это должно было быть не сложно но я чего-то туплю@торможу.
И ещё реквестирую книги, туториалы etc.
Или просто надо свет настроить? А может я не так конвертировал? Хз короче.
Чё делать-то?
Вот такая ерунда (дирекшонал поставил :3):
https://pp.vk.me/c619224/v619224311/f9a4/S2HZ-ioR6Q4.jpg
А надо:
https://pp.vk.me/c619224/v619224848/ce83/ze64wHn2aJ4.jpg
https://pp.vk.me/c619224/v619224526/bc1e/6rt5cNvl42M.jpg
https://pp.vk.me/c619224/v619224466/1e0a1/kzQ_OgYwg4s.jpg
Или лучше сначала сохранить в ДАЕ, а потом конвертнуть в ФБХ в блендере?
Тебе надо свойства материала смотреть, а не текстуры
Чтобы сделать норм, способа полегче ты не найдешь где угодно.
>>124793
с UV разверкой меньше всего ебли, после такого. Да, в юнити легко это делается. Вертексы указываются как массив Vector3, потом массив int указывает индексы в предыдущем массиве для составления треугольников и дальше опционально можно сделать развертку. у меня больше всего ебли было со вторым пунктом.
http://jayelinda.com/modelling-by-numbers-part-1a/ полезная ссылка на эту тему.
>>124790
Да, сплат прототип это же класс. его со скобочками призывать надо. Если будешь кодом накладывать еще и травку, то не забудь поменять местами оси.
Когда уровень пройден и грузится следующий (сцена) саундтрек/эмбиент резко прерывается, выходит некрасиво.
Как сделать затухание музыки при загрузке новой сцены? В каждой сцене своя музыка. Куда копать.
прихуярь к своему говну, которое воспроизводит музыку вот это
http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html
и лови событие загрузки уровня, по нему скриптом хуярь плавное снижение громкости в ноль а потом самоуничтожение объекта.
Но я бы вообще не уничтожал нахуй такие штуки при загрузке уровней, а реиспользовал бы старые.
>с UV разверкой меньше всего ебли, после такого
Ну хуй знает. Создать квады - просто, ибо там без оптимизаций делается, так что это то же, что и кубы, только без лишних граней. Пол - вообще что-то вроде if(lvl[y][x]==FLOOR) addVertex(x * TILE_WIDTH, 0, y * TILE_HEIGHT). А вот чтобы текстурка правильно на этом отбражалась - тут уж я поебался в своё время.
void OnJoinedRoom()
{
GameObject Player = PhotonNetwork.Instantiate("Player", new Vector2(0,6), Quaternion.identity, 0);
PlayerController controller = Player.GetComponent<PlayerController>();
controller.enabled = true;
CameraFollow camera = Player.GetComponent<CameraFollow>();
camera.enabled = true;
}
Спасибо, охуеть как все просто.
Завис только на этом:
>плавное снижение громкости в ноль скриптом
Как сделать плавно? Мне только намек.
http://docs.unity3d.com/Manual/Coroutines.html
На, держи.
Как же мне печет от того, что я даю советы людям, а сам нихуя не делаю, пиздец блять, как в старом анекдоте про учителя физкультуры
ладно, насчет пустых объектов я поторопился, сцены сохраняются отдельно от объектов
>>124897
Нет, это говно крашится даже если в скрипте присутствует метод Update(). Кто-нибдуь может объяснить, что за хуйня происходит? Я создал объект, прилепил к нему скрипт, в скрипте меняю позицию у ригидбоди в методе FixedUpdate() - все по туториалам. Скрипт сохранен, юнити на него не ругается. Но при запуске краш. Проект 2Д. ???
Fatal error in gc
GetThreadContext failed
Ебал я в рот такое двигло
quadro.rigidbody2D.MovePosition (quadro.rigidbody2D.position + speed * Time.deltaTime);
Хотя в манах блять написано, что так можно делать:
public class ExampleClass : MonoBehaviour {
private Vector3 speed = new Vector3(3, 0, 0);
void FixedUpdate() {
rigidbody.MovePosition(rigidbody.position + speed * Time.deltaTime);
}
}
Единственное, из-за чего у меня юнька крашилась - это когда я по глупости обмазывался говноплагинами и не завершал цикл while
function OnLevelWasLoaded (level : int){
if (level == 2)
{
GetComponent(SpriteRenderer).color = Color.red;
}
}
Почему аналогичная хуйнюшка не срабатывает применительно к стартовой (1) сцене?
И вообще, почему срабатывает только на второй сцене:
function OnLevelWasLoaded (level : int){
//////////////////////////////////////////////////////////
if (level == 2)
{
GetComponent(SpriteRenderer).color = Color.red;
}
//////////////////////////////////////////////////////////
if (level == 3)
{
GetComponent(SpriteRenderer).color = Color.green;
}
//////////////////////////////////////////////////////////
if (level == 4)
{
GetComponent(SpriteRenderer).color = Color.blue;
}
//////////////////////////////////////////////////////////
}
Функция не та?
Красное и коричневое - это два меша, я их генерирую, стены оставил кубами, не знаю почему, наверное, потому что мне уже стало надоедать ебаться с картой.
Большие карты овер 100*100*50комнат генерятся ОООЧЕНЬ долго (более 2 минут), но зато после генерации не тормозят.
Короче, как мне тут советовали, я решил перестатать заморачиваться генерацией и оптимизацией, а начать пилить фишку какую-нибудь, вроде главного героя, врагов и т.д.
пнх, так-то я баг нашел.
Братишка, кинь ссылок по алгоритмам генерации карт.
Заделал так, теперь ругается "error CS0103: The name `photonView' does not exist in the current context"
void OnJoinedRoom()
{
if (photonView.isMine)
{
GameObject Player = PhotonNetwork.Instantiate ("Player", new Vector2 (0, 6), Quaternion.identity, 0);
PlayerController controller = Player.GetComponent<PlayerController> ();
controller.enabled = true;
CameraFollow camera = Player.GetComponent<CameraFollow> ();
camera.enabled = true;
}
}
Ну я же тебе говорю, полуркай. В ассет сторе есть бесплатная демка с викингами, там все этим моменты показаны.
Да блин, просто я сравниваю с другим скриптом где такая же штука есть, и там всё норм работает.
Компонент PhotonView дообавь, лолка. И создавай через PhotonNetwork.Instantiate
Добавлен к модельке игрока.
>И создавай через PhotonNetwork.Instantiate
Создаю же.
GameObject Player = PhotonNetwork.Instantiate ("Player", new Vector2 (0, 6), Quaternion.identity, 0);
Теперь компилит без проблем, но можно управлять моделькой, но не камерой.
Ок, теперь интересный момент.
Запускаю в редакторе - заходит на сервер, респавнится моделька, можно ходить.
Запускаю другую версию стендалоун, заходит на сервер и тоже одна моделька, которую страшно дергает, и если попытаться ей двигаться, то всё равно тянет обратно к какой-то точке на уровне, как будто на резине.
Никакая это не шлюха
но девственно чистая, как лотосные стопы Будды, няша-стесняша.
Ты просто обиделся, что она тебе срамные пасы показывала.
Вот, держи охуенный ботинок.
Перестают работать только если их //"испортить" или удалить из объекта.
Почему?
Ты Лерпаешь к нулевому вектору скорее всего. Если у тебя фотонвью свой то ты должен посылать координаты, если не свой то наоборот принимать и лерпать к ним.
Выключаются только стандартные методы а ля start awake update, вызов своих методов можно делать у 'выключенных' обьектов.
https://psm.playstation.net/portal/en/index.html#register
спс
Есть я, почти не могу в код, описываю всю механику, взаимодействие, интерфейсы, баланс, ну вы поняли, это простонихуя не просто, конечно нужно перенести в код.
Есть художник.
Есть еще один кодер, но он пока вливается, учится.
Денег нет.
Планируем пилить сперва под гугл плей, потом и под андроид.
gd_anon@мейл.ру
Пиздуй на cgtextures, уёба
using UnityEngine;
using System.Collections;
public class LevelLoadMusicFade : MonoBehaviour {
public void FadeOutMusic()
{
StartCoroutine(FadeMusic());
IEnumerator FadeMusic()
while(audioSource.volume > .1F)
audioSource.volume = Mathf.Lerp(audioSource.volume,0F,Time.deltaTime);
yield return 0;
audioSource.volume = 0;
}
}
Лог ошибки то сбрось, лалка.
Анон, помоги. Как ты строил меш по LUMP_VERTEX'ам? Там же нигде не описано как соединять эти точки в треугольники, а про нормали я вообще молчу. Нашел только еще одну бесполезную структуру с гранями.
когда импортнул модельку, в ее настройках, во вкладке Rig, ставь тип анимации generic. Во вкладке animations выставляешь кадры анимаций. Все сохраняешь. Воспроизводишь через Animation или через Animator(он же меканим), это когда модель на сцену кинул.
>forum.cgpersia.com - главный пиратский форум для всех юнитибогов, огромная свалка, в которой при желании можно найти практически любой ассет для юнити
Сама юнити должна быть тоже пиратской? Где брать, какую версию?
Если продавать не плпнирую есть вобще смысл делать в бесплатной? Хотя и йоба мыло с поддержкой еблофона мне не нужно.
Короче какую качать для начала. Хочу сделать свой шутан без графона, но с физоном.
Все отлично, но напрягает почти незаметное выделение, тупо подчеркиванием.
{
...
}
Как настроить, чтобы было ярко?
#pragma strict
DontDestroyOnLoad (transform.gameObject);
enum Fade {In, Out}
var fadeTime = 0;
var levelToExecute = 0;
var DestroyTime = 0;
function OnLevelWasLoaded (level : int) {
if (level == (levelToExecute))
FadeAudio(fadeTime, Fade.Out);
Destroy (gameObject, DestroyTime);
//Destroy (gameObject, 20);
}
function FadeAudio (timer : float, fadeType : Fade) {
var start = fadeType == Fade.In? 0.0 : 1.0;
var end = fadeType == Fade.In? 1.0 : 0.0;
var i = 0.0;
var step = 1.0/timer;
while (i <= 1.0) {
i += step * Time.deltaTime;
audio.volume = Mathf.Lerp(start, end, i);
yield;
}
}
Есть три уровня, на каждом играет своя уникальная mp3шка
с приатаченым этим скриптом и, естественно, следующим уровнем в строчке levelToExecute.
Проблема следующая:
Если mp3шка есть только в одном из уровней,
музыка при переходе на следующий уровень затухает и исчезает ОК.
Но, если на всех уровнях музыка+скрипт установлены,
и загрузить первый а с него перейти на второй,
то есть у нас на уровне одновременно находятся 2 mp3шки - предыдущая и текущая, но с разными параметрами в строчке levelToExecute
то DestroyTime убивает и музыку предыдущего уровня и музыку текущего.
Почему?
#pragma strict
DontDestroyOnLoad (transform.gameObject);
enum Fade {In, Out}
var fadeTime = 0;
var levelToExecute = 0;
var DestroyTime = 0;
function OnLevelWasLoaded (level : int) {
if (level == (levelToExecute))
FadeAudio(fadeTime, Fade.Out);
Destroy (gameObject, DestroyTime);
//Destroy (gameObject, 20);
}
function FadeAudio (timer : float, fadeType : Fade) {
var start = fadeType == Fade.In? 0.0 : 1.0;
var end = fadeType == Fade.In? 1.0 : 0.0;
var i = 0.0;
var step = 1.0/timer;
while (i <= 1.0) {
i += step * Time.deltaTime;
audio.volume = Mathf.Lerp(start, end, i);
yield;
}
}
Есть три уровня, на каждом играет своя уникальная mp3шка
с приатаченым этим скриптом и, естественно, следующим уровнем в строчке levelToExecute.
Проблема следующая:
Если mp3шка есть только в одном из уровней,
музыка при переходе на следующий уровень затухает и исчезает ОК.
Но, если на всех уровнях музыка+скрипт установлены,
и загрузить первый а с него перейти на второй,
то есть у нас на уровне одновременно находятся 2 mp3шки - предыдущая и текущая, но с разными параметрами в строчке levelToExecute
то DestroyTime убивает и музыку предыдущего уровня и музыку текущего.
Почему?
Я тебе предлагаю идти нахуй.
А теперь захуячь в блендере новую анимацию, она в юнити появится?
Как заставить сферу крутиться по направлению к курсору?
Ты тупой? Даже я знаю.
Cross-Product.
Берешь два вектора, перемножаешь их x-y, y-x координаты, ибо в 2д. Складываешь. Получаешь или положительное число, или отрицательное. Исходя из этого полуаешь знак для дельта угла вращения.
Иди туториал для новичков на оффсайте смотри, остальные основы векторной алгебры тоже выучи.
Ок, спасибо.
Вращается, но сами снаряды летят прямо, просто появляются в разных местах.
if (Input.GetButton("Fire1") && canShoot)
{
Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
}
Сам снаряд летит через:
rigidbody2D.AddForce(new Vector2(speed, 0f));
Как ему лететь именно в направлении курсора?
>но сами снаряды летят прямо
>AddForce(new Vector2(speed, 0f));
ты же сам прописываешь, чтобы они летели только прямо. Вектора еще не проходили?
>Вектора еще не проходили?
Нет.
Нашёл такое, http://answers.unity3d.com/questions/591383/fire-at-mouse-position-2d-game.html
буду втыкать.
Очевидно епт1!
Единичный вектор
Вычитаешь из координат мыши координаты сферы твоей, место спавна пуль короче, нормализуешь, т.е. делишь на длину (теорему Пифагора ты ещё не забыл?) и получаешь вектор, куда надо лететь пуле. Всё. Школьная геометрия же, ну.
Ну и дебил, вектор - это стрелка. Обозначает любую направленную хуйню, понял?
>нормализуешь, т.е. делишь на длину (теорему Пифагора ты ещё не забыл?)
Маны не курим, велосипедист?
Что тебе надо, юнитивыродок?
Нормализация вектора - привидение вектора к единичному.
Т.е. был вектор
x=3
y=4
нормализуем
ищем длину c = sqrt(x*x+y*y) = 5
x1 = 3/5 = 0.6
y1 = 4/5 = 0.8
Получается единичный вектор, который можем умножать на что-нибудь.
Что не так тебе?
Ведь все необучаемые школьники-гейдизайнеры сидят тут и не лезут в другие топики.
>>125639
Школие намекает на то, что есть у класса ВЕКТОР метод НОРМАЛАЙЗ? И из-за этого ты развел срач?
Да похуй мне на твои рефы, я в твоей юнити не сидел даже, она мне в жопу не сдалась.
Я пытался обьяснить ананасу геометрию уровня 10 класса шараги, а ты тут вплелся со своими рефами, где обращаются к кватернионам, чтобы получить единичный вектор.
УУУУУУУУ
>Да похуй мне на твои рефы, я в твоей юнити не сидел даже, она мне в жопу не сдалась.
Ты посмотри как меня разозлил, а.
Или я просто аутист и хочу спать. 49 часов без сна тоже плохо, наверное.
Нет не коннектится
И еще вдогонку пишут lod support, Stereo, Видео, Dynamic Obstacles на фри нет.
Разве такое говно не должно писаться самостоятельно за 15 минут? Или там эта возможность анально огорожена?
Поддержу вопрос.
Не встречал нормальных пост-эффектов уровня платной версии. Все поделия для фришки а-ля псевдо-моушнблюр, псевдо-доф, псевдо-аберации и т.д. - адовое говно. Неужели все так плохо? И нет способа запустить ванильные эффекты на фришке?
- При столкновении ГГ со стенами и прочими 2Дколлайдерами,
а также при перемещении ГГ по поверхности, которая состоит из многоточечного 2Д эдж-коллайдера,
происходит некоторое взаимопроникновение и обратное выталкивание лол (на почти незаметную глубину) объектов, получается эдакий эффект дрожания.
2. Также, ГГ иногда после падения проваливается сквозь пол, если тот состоит из 2Д эдж-коллайдера.
Как преодолеть?
Нужно что-то выкрутить в коллайдерах, в рижид боди ГГ или в Phisics2DSettings ?
Камеру с camera_follow скриптом на ГГ тоже колбасит.
Или это все из-за того, что у меня движение по горизонтали через transform.position ?
Для нормальных пост-эффектов нужен рендер в текстуру, которого во фришке нет.
>Или это все из-за того, что у меня движение по горизонтали через transform.position ?
Пиздец. А сам как думаешь?
var speed: float = 666;
function Start ()
{
rigidbody2D.AddForce(Input.GetAxis("Horizontal") * Vector3(speed,0,0));
//или
//rigidbody2D.AddForce(new Vector3(Input.GetAxis("Horizontal") * speed, 0, 0));
}
Ясно, спасибо. Погуглил, понял.
Заменил transform.position на простенький скрипт с rigidbody2D.AddForce:
var horizontalForce : float = 50;
function Update ()
{
rigidbody2D.AddForce (new Vector3(Input.GetAxis("Horizontal") * horizontalForce, 0, 0));
}
Конечно, всякого рода дрожание исчезло, но управление теперь ведет себя непредсказуемо:
"ноги" (Circle Collider 2D) часто застревают в малейшей горке (поверхность эдж коллайдера 2Д) или просто при восхождении на горку резко пропадает скорость и восхождение дается с трудом,
если идти относительно долго или при спуске с горки - наоборот, появляется какое-то непредсказуемое ускорение.
Phisics2DSettings -> Gravity: -30
масса ГГ: 1
сила: 50
Пробовал разные комбинации силы/массы - не помогает.
Нужно "усложнять" скрипт дальше?
Чувак, ты пишешь код для перемещения персонажа-гг, я правильно понимаю? Нахуя ты тогда ебешься с силами? Потому что в юнити-треде кто-то так написал? Хуярь через velocity, железно работает. Например, вот так:
public Vector2 speed = new Vector2(50, 50);
private Vector2 movement;
void Update () {
float inputX = Input.GetAxis("Horizontal");
float inputY = Input.GetAxis("Vertical");
movement = new Vector2(speed.x * inputX, speed.y * inputY);
}
void FixedUpdate () {
rigidbody2D.velocity = movement;
}
Спасибо, теперь идеально. Цистерну чаю тебе :3
> Чувак, ты пишешь код для перемещения персонажа-гг, я правильно понимаю? Нахуя ты тогда ебешься с силами? Потому что в юнити-треде кто-то так написал?
Я вообще типа художник и к программированию до недавних пор не имел никакого отношения.
Но вот очень хочу делать игры, месяцев ~5 как пересилил себя и сел изучать JS и C#,
возбудился после написания простой программки и понеслось.
Пока нихуя не понимаю, работу забросил, но адово доставляет.
У меня не предусмотрено управление/перемещение по y,
но есть падения с платформ.
Если честно, я не понял как убрать влияние на y - твой скрипт замедляет падение.
public Vector2 speed = new Vector2(3, 0);
private Vector2 movement;
void Update () {
float inputX = Input.GetAxis("Horizontal");
movement = new Vector2(speed.x * inputX, 0);
}
void FixedUpdate () {
rigidbody2D.velocity = movement;
}
}
Попробуй вот так
public Vector2 speed = new Vector2(3, 0);
private float movement;
void Update () {
float inputX = Input.GetAxis("Horizontal");
movement = speed.x * inputX;
}
void FixedUpdate () {
rigidbody2D.velocity = new Vector2(movement, rigidbody2D.velocity.y);
}
}
Спасибо, добрый анон.
Одна проблема осталась с этим методом/скриптом - не могу взобраться на крутые склоны эдж_коллайдера_2Д, такие как на пикрилейтед.
Мне достаточно намекнуть в каком направлении кроме нахуй это решить.
Я решил это так - сделал физ.мат для поверхностей и в нем bounciness 0.1 (а трение 1).
Короч, тебе нужно взять нормаль коллайдера под ногами и повернуть вектор движения перпендикулярно ей. Справишься?
if (Input.GetMouseButtonDown(0)) {
var pos = Input.mousePosition;
pos.z = transform.position.z - Camera.main.transform.position.z;
pos = Camera.main.ScreenToWorldPoint(pos);
var q = Quaternion.FromToRotation(Vector3.up, pos - transform.position);
var go = Instantiate(prefab, transform.position, q);
go.rigidbody2D.AddForce(go.transform.up * 500.0);
}
Помогите ретарду переписать эту срамоту в C#. Особенно последняя строчка напрягает.
Какие же тут дауны обитают, в векторную простейшую математику не могут
Чтобы конец и начало семпла плавно взаимосмешивались.
Хотелось бы в Аудасити или ФЛ, но там я такого не нашел, так что все подойдет.
mp3-кодек вставляет мгновения тишины в начало и в конец трека либо у меня руки из жопы, юзай wav или ogg.
Алсо, можешь попробовать запускать проигрывание файла, не дожидаясь окончания предыдущего, т.е. сверху на юнити накодить свой саунд манагер. То же самое, что и вариант ниже, только микс в реалтайме.
Алсо, а что мешает в том же аудасити смиксовать сэмпл так, чтобы
>конец и начало семпла плавно взаимосмешивались
? Пикрелейтед.
мимо с дивана
Ну пиздец, америку открыл, а то здесь никто не знал, что в шарпе есть неявная типизация.
>Ну а как в аудасити наложить так, как обведено красным?
Например, вот так. Потом можно собрать все дорожки в одну.
Спасибо.
Сделал в эдоб аудишн, как я понимаю пикрил это тоже самое.
Огг в юнити звучит прекрасно (плавный переход)
а вот мп3 таки да, вставляет в начало/конец что-то типа тишины.
Жаль только, что страдает начало/финал, особенно начало - во время загрузки сцены оно появляется более резко, без обрезанного наполовину вступления и/или плавного усиления и смешанное с финалом.
Можно наверное попробовать еще всунуть в готовый переход затухание с обоих концов, чтобы начало появлялось плавно, но как-то коряво выходит.
Ну ладно, для моего говноэмбиента не очень критично.
Думаю, стоит сделать скрипт для плавного усиления громкости, когда загружается сцена, а дальше уже плавно будет играть.
Какие подводные камни? Проекту никак не навредит, например после окончания триала?
Просто вернется обратно в обрезанный режим?
>Сделал в эдоб аудишн, как я понимаю пикрил это тоже самое.
Да, один-в-один практически. Аудишен просто опенсорсное говно, там ниасилили сделать удобное редактирование/сведение звука. Ну хоть envelop'ы завезли, и то радует.
>Жаль только, что страдает начало/финал, особенно начало - во время загрузки сцены оно появляется более резко, без обрезанного наполовину вступления и/или плавного усиления и смешанное с финалом.
Ну блджад, я ж тебе расписал уже. Сделай скрипт для звука, который будет ставить на первое повторение трек без финала и с усилением громкости в начале, а на второе и последующее - loop из трека, смиксованного с собой же с обеих сторон.
Алсо, мог бы сам додуматься, элементарно жи.
>Аудишен просто опенсорсное говно
Аудасити, конечно же.
быстрофикс
>Ошибка: Вы уже отправили один пост, подождите 60 секунд перед отправкой нового.
Ограничения пиздец смешные, админы куда смотрите.
Просто вернется в обрезанный режим.
Что интересно, я как-то пытался собирать фришной версией проект, в котором юзались фичи из про-версии, и блять все нормально собиралось и работало. А вот в редакторе да, ошибку выдавало.
Заодно плавное удаление на следующем уровне прикрутил.
Пойду съем сала.
Разрешение, тип фильтрации?
Все еще висит в списке "Pending Packages",
хотя в факах написано, что если поделие отклонено, то на имейл прийдет уведомление с подробно указанными недочетами.
Хули они так долго блядь? У кого был опыт?
да хуй знает че им надо, какую-то херь пишут я прозревший сижу
Все данные - ValueType, никаких генериков, никакого боксинга. Я чего то не понимаю?
Странно.
Сделай дебаг, чтобы выводил point, и остальные значения, увидишь пустой он или нет
Пройти по обеим массивам и проверить (struct В)A.MyVector3 == (struct В)Б.MyVector3 ?
Разобрался в чём было дело, похоже я баг словил. Исключение на самом деле кидал совсем другой участок (немного дальше этой функции). А вот почему в stacktrace попала именно эта функция, а не та что нужно - загадка.
UnityVS
Как вариант, вместо массивов зделоть списки и юзать их методы для поиска.
Пиши свою, епт, че, не пацан штоле? Все пацаны свои пишут и ты пиши, че, пацанов не уважаешь?
Отключал все сопутствующие методы, оставил только звук.
Перепробовал все варианты что в голову пришли, да и теми что нагуглил не гнушался - Invoke(), InvokeRepeating(), корутины с WaitForSeconds(), пихал таймеры во все апдейты.
Проблема в том, что когда скорость стрельбы становится выше нескольких выстрелов в секунду, звук и анимация начинают ощутимо спотыкаться. Как я понимаю, с Invoke'ами и корутинами из-за того, что их таймеры недостаточно точные, а FixedUpdate вызывается раз в 0.02 секунды и вовсе не факт, что ожидаемое время стрельбы совпадет с апдейтом, и в этом случае очередь звучит косячно и с слышимыми задержками. Пробовал для эксперимента точно подгонять время стрельбы под кратное фикседапдейтами, но что-то лучше не стало. Может и объебался где. Ну с обычным Update() и так понятно, что хуйня получится.
Подумывал уже о том, чтобы использовать внутренний таймер, вроде там точность максимальная, но все равно ведь один выстрел в каком-то из апдейтов надо делать, в итоге лучше не будет.
Боюсь, что придется читерить и записывать сразу очередь, но тогда пока не совсем понятно как с трассерами быть (хочу каждую пулю отдельно отрисовывать), да и RPM через инспектор/код так просто не поменяешь.
Где я неправ? Может кто наставит на путь истинный? В первый раз приходится с вопросами обращаться, до этого интернеты спасали. А тут прям no fate какой-то от этой хуйни.
А можно модельки из, например, майи переносить в юнити? Насколько вообще моделлинг, анимацию, текстуры и так далее можно делать вне юнити, потому что привык к другим программам? А саму юнити использовать только для скриптинга и так далее.
Мимокрокодил-никогда-на-юнити-не-работал
Ну хорошо, спасибо.
Примерно, чуть побольше, но это не критично. Слышишь как спотыкается, ага?
С другой стороны, запустил старый добрый Soldat, там та же хрень, но чуть менее ярковыраженная. Мне кажется потому что у того движка частота обсчета выше. Однако попробовал поэкспериментировать с частотой FixedUpdate, но что-то не только сильно лучше не стало. Или я где еще напортачил, уже заебло за сегодня, на отъебись пишу.
И раз уж я в Солдате этого ни разу не замечал, то пожалуй стоит хуй забить, выбрать вариант где меньше всего заметно, несколько чуть отличающихся вариантов звука стрельбы сделать и жить дальше.
Это спотыкание вызвано звуком, там есть такая хрень, что когда грузишь в юнити свой звук, то в начале и в конце звука есть пустота, то есть, вот начался проигрываться звук - слышно какой-то шум, потом идет сам звук, потом снова шум, и поэтому вот это спотыкание
Игра типа пошаговая будет. Нажал кнопку - персонаж начал бежать тайл, пробежал тайл - остановился.
Но когда я прикручиваю к этому анимацию (через аниматор котроллер, туда перетащил мышкой анимацию от стандартного юнитивского мужика с гаечным ключом, и соответственно, через CrossFade("walk",0.0f) и CrossFade("idle",0.0f) переключаю её в начале и конце хода) случается какая-то херня.
У геймобжекта, в котором установлен аниматор начинает ехать трансформ. Насколько я успел заметить, в каждый переход анимации из одной в другую позиция трансформа съезжает на какое-то расстояние.
Я, конечно, могу прикрепить туда скрипт, который будет каждый кадр ставить трансформ в 0,0,0, но что-то мне кажется, что я неправильно импортировал анимацию.
Там были какие-то ебучие галки Луп Поз, Бейк инто Позе и т.д. Я до конца не понимаю, что они означают, но крутил их и добился, что трансформ не крутится при анимации, а как настроить чтобы он ещё и не съезжал никуда - хз. Поясните.
У меня просто управление идёт не объектом с анимацией, а объектом его родителем, и когда я его поворачиваю, ГГ заносит на несколько метров получается.
О, спасибо! Так просто, а я вчера весь вечер ебался с этим.
Вычти из координат объекта куда лететь координаты объекта откуда лететь, нормализируй и вот тебе нужное направление.
Думаешь он знает что значит 'нормализуй'?
Ты молодец ещё, что про термин вектора не упомянул, боже упаси.
сенкью
По идее надо проверять что я не зажал кнопку ходьбы и если зажал, то не включать анимацию стояния и т.д. Это понятно, но я не об этом хотел спросить.
Я иду влево с зажатой кнопкой (на видео), персонаж проходит клетку с анимацией ходьбы, а затем включается анимация стояния и идёт что-то долговато, гораздо дольше чем 0.1 секунда.
Самое интересное, что если ходить не с зажатой клавишей, а дождаться, пока персонаж встанет и затем уже нажать влево (на видео), то анимация отработает как надо.
Может я не до конца понимаю как работает Кросс Фейд и что делает второй аргумент там, поясните
Поскольку мои планы перейти с Флеша на HTML5 погорели, я так понимаю, что Юнити - единственная альтернатива, посему вопрос. Для Флеша есть неплохая связка с отрытым компелятором и IDE. Есть ли что-то подобное уже для Юнити?
Я нихуя не понял, чего ты хочешь. Ты хочешь бесплатную IDE для юнити? Монодевелоп господи иисусе, тот еще кусок дерьма, но зато ШВАБОДНОЕ в комплекте и денех за него никто не требует. Или ты хочешь еще и свободную реализацию движка? Не, вот это уже не сюда. Да и нахуя, вопрос?
Алсо, юнити то ли в следующем, то ли через один релизе научится собирать проекты под хтмл5.
Попытаюсь лучше сформулировать. Хочу аналог Флекса (https://ru.wikipedia.org/wiki/Apache_Flex) для Юнити, т.е. открытый-швабодный SDK под Юнитиевский браузерный плагин.
парни, помогите запилить физику для 2D тачки, там куча этих Joint'ов, а у меня только кузов и два колеса, что куда лепить, чтобы можно было потом катать на тачке по району и снимать телок?
А нахуя он для 2д? Какие приемущества? Пока что по моему небогатому опыту меканим - модно-молодежно, такой то конечный автоматон.
>>126330
Что-то я не уверен. Встречал такую версию, но ситуация то какая - звуки воспроизводятся как надо несколько раз подряд, потом спотыкаются, потом опять всё норм, потом опять спотыкач и т.д.
Но раз уж ты упомянул - как с этим бороться? Вроде в Answers что-то про кроссфейд было, это то есть надо в начало и конец звука куски предыдущего и следующего вставлять или я совсем не пони?
Хуй его знает, обещают 4.5 (новый гуй + что-то еще) в августе вроде, но могут и затянуть.
>>126373
Я поддал и сейчас плохо соображаю, но судя по статье в вики флекс - это фреймворк поверх флеша. Зачем оно для юнити, которое и так собирает приложение даже под самого Аллаха - я хз. Беда а по мне так радость в том, что Юнити проприентарная и ей и будет оставаться, так что хуй вам и нам, а не швабодные спецификации и сдк.
>>126387
> А нахуя он для 2д? Какие приемущества? Пока что по моему небогатому опыту меканим - модно-молодежно, такой то конечный автоматон.
В том-то и суть, что он возьмет на себя всю еботу по лупу и переключению анимации и не будет у тебя дерганых одноногих спецназовцев, хотя хуй знает
> Но раз уж ты упомянул - как с этим бороться?
А у тебя звуки в каком формате? Для коротких часто используемых звуков рекомендуется использовать wav с предварительной загрузкой в память. От кодека още многое зависит, чувак.
что-то я перебрал, совсем хуево мозги ворочаются.
В последнем апдейте завезли wheel joint
>флекс - это фреймворк поверх флеша
Не совсем. Флекс - это прежде всего компилятор, который собирает SWF-файлики, которые может играть Флеш-плеер, из кода на AS 3, не требуя никакого платного закрытого ПО от Adobe.
>Юнити проприентарная и ей и будет оставаться
Ну, так и насчет Флеша говорили, а потом они часть цепочки открыли, правда, оставив закрытым сам плеер.
http://webplayerbuild.ru/view.php?id=129733
Как сделать, чтобы шарик не подпрыгивал на дороге, если наезжает на какой-то горбик, но чтобы нормально выпрыгивал, если построить транплин, на конце которого кончается дорога?
юзаю Rigidbody2D, толкаю при помощи AddForce
> так и насчет Флеша говорили, а потом они часть цепочки открыли, правда, оставив закрытым сам плеер
Знаешь, смотря на текущие события, мне кажется вполне реальной перспектива покупки целиком/выкупа контрольного пакета акций Юнити Майками и открытие как минимум спецификаций. Ибо моно они все сильнее продвигают на линух и недавно Наделла говорил, что игровое направление для Майков будет одним из важнейших. Вон, недавно выкупили компанию-разработчика плагина под ВС для Юнити и сделали его бесплатным, чем черт не шутит. Да и в ВС с недавних пор можно текстурки с модельками ковырять.
Но вообще это все бабка надвое сказала.
>В том-то и суть, что он возьмет на себя всю еботу по лупу и переключению анимации
Ну какбе ты вроде как про меканим говоришь. А я спрашивал зачем от него оказываться в 2д, какие вообще профиты могут быть. Тут нюанс в том, что я тоже упорот был в полуговнину и вопрос вот этому боярину адресован был >>126366
Навскидку могу предположить что меканим мб избыточен если предполагается всего один стейт, анимация выстрела или там взрыва через смену спрайтов. Быстрее будет через Animation клипчик прокрутить. Но емнип там какая-то ебота с типами клипов анимации, чтобы легаси создать надо что-то там в дебаг моде менять.
>4.5 (новый гуй + что-то еще)
5.0 в смысле? Тут недавно 4.5.2 вышел.
>А у тебя звуки в каком формате? Для коротких часто используемых звуков рекомендуется использовать wav с предварительной загрузкой в память. От кодека още многое зависит, чувак.
Эт понятно. Сейчас мепетри, но стоит decompress on load, так что с этим проблем быть не должно. Вообще проблемы то не со звуком как таковым, а с тем что выстрелы по времени рассинхронизированы с апдейтами юнити и получается порой, что появляется промежуток, а в следующем кадре уже два одновременно звучат. По крайней мере так мне это сейчас видется, если кто поправит и объяснит збс будет.
А по поводу VS и моно кстати если кто еще не, то очень советую поскорее купить на торрентах VS и UnityVS. Второй всё никак не начнут раздавать за спасибо, но найти рабочую версию можно.
После Mono - будто с запорожца на межгалактический крейсер пересел. Конечно не без майкрошофто особенностей вроде принудительного CRLF и отсутствия toggle comments как класса, что подбешивает, но всё равно жалею, что батхерт от багов моны только сейчас меня вынудил поставить студию.
Спасибо, блять.
проиграл))
Ок, спасибо.
Только вот эту строку как правильно переписать?
go.rigidbody2D.AddForce(go.transform.up * 500.0);
Пиздос!! сука ты уёб ок блять ебаный тебя что ЕБЁТ ЧТОЛИ мудак сука БЛЯТЬ вот за ТАКИЕ вопросы у меня во дворе убивают нахер!!!!!
Не надо нихуя переписывать.
Да ругается если не переписывать.
error CS1503: Argument
#1' cannot convert
object' expression to type `UnityEngine.Vector2'error CS1502: The best overloaded method match for `UnityEngine.Rigidbody2D.AddForce(UnityEngine.Vector2)' has some invalid arguments
error CS0019: Operator
*' cannot be applied to operands of type
UnityEngine.Vector3' and `double'>Operator *' cannot be applied to operands of type UnityEngine.Vector3' and `double'
Бля, просто изучи хотя бы основы того языка, на котором ты пытаешься писать. Не спрашивай такую хуйню.
>go.transform.up
Это Vector3 а надо:
>best overloaded UnityEngine.Rigidbody2D.AddForce(UnityEngine.Vector2)
>500.0
это Double но
>Operator *' cannot be applied to operands of type UnityEngine.Vector3' and `double'
Вектор3 нельзя умножать на давл только на флоат.
Гугли преобразование типов и читни уже какую-нибудь книжку по шарпу, например.
Запекает.
Только.
>на русском
Инстант фейл. Посоветуй ему годных видеоуроков по английскому языку с elementary и до upper intermediate.
Приперся в юнититред, требует видеоуроков на русском, ему говорят - нет таких, смотри на инугурише, а он - Я ВАМ НИВЕРЮ, ВЫ ВСЕ ВРЕТИ. Охуительные истории. Нет их, блять, смирись! Все, кому действительно надо, смотрят/читают на английском.
единственный ништяк, который знаю, так это то, что были версии юнити с флешем, а потом его не стало.т.е. было логично не обновляться тем, кому он нужен был
У меня есть статичный класс, в котором есть статичная функция в которой перебирает входящий массив и возвращает хуйню. Я хочу чтобы при первой и последней итерации происходило то что отличается от всех остальных. Как это можно описать? Через if()else if я и сам додумался, через switch .Length массива не является константой, а какие еще варианты есть?
/* первая итерация, array[0] */
for(int i=1; i<array.Length-1;i++)
{ /* тут перебор, array[i] */ }
/* последняя итерация, array[array.Length - 1] */
Вообщем такое не прокатывает:
Sprite s = spr.sprite;
Rect r = s.rect;
r.width = 500;
r.height = 500;
s.rect = r;
Пишет что rect нельзя трогать. А как тогда?
Если единственное, это ебаться с коэффициентами масштаба, то дай пожалуйста матан, а то я забыл как коэффициентами увеличивать/уменьшать изображение на нужное количество пикселей.
И второй вопрос, блядь, почему в Mono после установки новой юнити, отвалился список методов (тот который появляется когда нажмешь точку)?
>Пишет что rect нельзя трогать. А как тогда?
Попробуй создать новый Rect а не менять в уже существующем
Rect r = new Rect(размеры);
s.rect = r;
Либо создать новый спрайт с нуля и записать туда рект
>размер спрайту в пикселях
>rect
Это не размер спрайта, а его положение в текстурке.
>Location of the Sprite on the original Texture, specified in pixels.
>s.rect
Только на чтение походу. На сайтике у них не написано про это, догадайся мол сама.
>увеличивать/уменьшать изображение на нужное количество пикселей
Посчитать размер пикселя в ед.изм.мира, например 1 пикслеь равен = 1 метру. и оскалить на нужное кол-во метров.
Алсо в конструкторе есть такой параметр
>pixelsToUnits - Scaling to map pixels in the image to world space units.
Можеет, это уже и есть доп. коф. масштаба.
максимум гугл
>>например 1 пикслеь равен = 1 метру.
Нихрена не понял.
>>максимум гугл
Гуглю уже третий месяц. Создавал тред на русском форуме юнити. Но там мне рассказали что надо делать через ортогональную камеру, я так и нихуя не понял
Мне че надо, есть спрайт, я хочу задавать ему размеры в пикселях. Без всякого гемороя, тип тысяч настроек из-за которых нихуя больше не будет работать
Вообщем сейчас думаю только про кастыль со скалями.
1 скаль равен размеру в пикселях (например 500 пикселей)
тогда 2 скаля равны 1000 пикселей. А значит чтобы спрайт увеличить с 500 до 750 пикселей, надо указать масштаб равным 750/500 = 1.5 скалей.
Хрень, но видать придется таким мучаться
>>например 1 пикслеь равен = 1 метру.
>Нихрена не понял.
Ето и есть твой костыль со скалями. Но в конструкторе спрайта можно задать базовый машстаб по преобразованию пикселей в метры сцены (pixelsToUnits).
>>Вообщем сейчас думаю только про кастыль со скалями.
Обломс. нихуя не работает, ебанный юнити
Оригинал имеет ширину 460. Хочу увеличить до 800 пикселей. 800/460 = 1.7
Хуй оно правильно отскелило
Что за блядь? пробовал 2.7. Таже хуйня - изображение меньше 800 пикселей.
Анон, ну дай мне какой-нибудь скрипт. Или неужели в юнити одни только школьники которые ничего кроме видеоуроков не делают?
Фув, разобрался. Надо было размер камеры повставить (ну и хрень же они там намутили со всеми этими настройками).
Второй вопрос. Я сделал масштабирование карты
float orthosize = (float)Screen.height / 2.0f / 100.0f;
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
Camera.main.orthographicSize = Mathf.Max(Camera.main.orthographicSize - 0.1f, 1);
}
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
Camera.main.orthographicSize = Mathf.Min(Camera.main.orthographicSize + 0.1f, orthosize);
}
То есть кручу колесико, и камера приближается и удаляется. Вопрос вот в чем - как теперь в связи с этим ограничить камеру чтобы она не выезжала за игровую область независимо от ее размера? Что вообще такое orthographicSize и из какой математики выродилось (в оригинале на низком уровне я не помню чтобы у ортогональной камеры был такой размер, там классически Width и height)
Ой, как то я тебя не заметил, поясняю:
В Lump'е с Vertex'ами хранятся вершины, ну ты это и так понял.
В Lump'е с Edge'ами хранятся грани модели, в каждой структуре по два индекса, эти индексы указывают на Vertex'ы. Если нарисовать линии между вершинами указанными во всех Edge'ах, то получишь каркас уровня.
Дальше нужен Lump с Surface Edge'ами, в этом lump'е хранятся списки индексов на Edge'ы, причём если индекс элемента меньше нуля, нужно инвертировать индекс, и прочитать вершины в обратном порядке.
if(edgeId > 0)
{
v1 = vectors[edges[edgeId].first];
v2 = vectors[edges[edgeId].second];
}
else
{
edgeId = -edgeId;
v1 = vectors[edges[edgeId].second];
v2 = vectors[edges[edgeId].first];
}
После чего - главное, Lump с Face'ами, у каждого фейса есть ссылка на первый элемент в Surface Edges и их количество. Ну и пробегаешься по SurfaceEdge'ам которые ссылаются на Edge которые ссылаются на вершины, и рисуешь это добро Triangle Fan'ом.
-----
Ананасы, назрел новый вопрос, я вот таки допёр что всякие мигающие лампочки хранятся внутри .bsp (прямо за остальными Lightmap'ами для этого face'а, если у него есть lightstyle).
И я заблуждался, у каждого фейса может быть аж до 4 динамических Lightmap'ы. Так вопрос - каким образом лучше всего смешивать всё это дерьмо, наиболее меньшим количеством DrawCall'ов?
Не будь ограничение на 2 uv набора, засовывал бы туда и не парился.
Было бы динамических Lightmap'ы 2 - засовывал бы их uv координаты в Tangent (всё равно шейдер его не читает) и тоже мог бы жить.
А тут тонна наборов, причём это говно ещё и интегрировать с освещением Unity надо, что в случае со статическими Lightmap'ами я сделал, лампочка может освещать тёмные места, а вот как сделать то же самое для такого наборища текстур, я даже не пойму.
Кто работал с Graphics.Blit? Оче быстро рисует на текстуре? Стоит качать ломанный Unity ради смешивания Lightmap'ов в риалтайме при его помощи?
Пикрелейтед - для всех face'ов загружен lightmap 1, на месте включающейся лампочки корректное освещение, на остальных участках графический мусор.
Ой, как то я тебя не заметил, поясняю:
В Lump'е с Vertex'ами хранятся вершины, ну ты это и так понял.
В Lump'е с Edge'ами хранятся грани модели, в каждой структуре по два индекса, эти индексы указывают на Vertex'ы. Если нарисовать линии между вершинами указанными во всех Edge'ах, то получишь каркас уровня.
Дальше нужен Lump с Surface Edge'ами, в этом lump'е хранятся списки индексов на Edge'ы, причём если индекс элемента меньше нуля, нужно инвертировать индекс, и прочитать вершины в обратном порядке.
if(edgeId > 0)
{
v1 = vectors[edges[edgeId].first];
v2 = vectors[edges[edgeId].second];
}
else
{
edgeId = -edgeId;
v1 = vectors[edges[edgeId].second];
v2 = vectors[edges[edgeId].first];
}
После чего - главное, Lump с Face'ами, у каждого фейса есть ссылка на первый элемент в Surface Edges и их количество. Ну и пробегаешься по SurfaceEdge'ам которые ссылаются на Edge которые ссылаются на вершины, и рисуешь это добро Triangle Fan'ом.
-----
Ананасы, назрел новый вопрос, я вот таки допёр что всякие мигающие лампочки хранятся внутри .bsp (прямо за остальными Lightmap'ами для этого face'а, если у него есть lightstyle).
И я заблуждался, у каждого фейса может быть аж до 4 динамических Lightmap'ы. Так вопрос - каким образом лучше всего смешивать всё это дерьмо, наиболее меньшим количеством DrawCall'ов?
Не будь ограничение на 2 uv набора, засовывал бы туда и не парился.
Было бы динамических Lightmap'ы 2 - засовывал бы их uv координаты в Tangent (всё равно шейдер его не читает) и тоже мог бы жить.
А тут тонна наборов, причём это говно ещё и интегрировать с освещением Unity надо, что в случае со статическими Lightmap'ами я сделал, лампочка может освещать тёмные места, а вот как сделать то же самое для такого наборища текстур, я даже не пойму.
Кто работал с Graphics.Blit? Оче быстро рисует на текстуре? Стоит качать ломанный Unity ради смешивания Lightmap'ов в риалтайме при его помощи?
Пикрелейтед - для всех face'ов загружен lightmap 1, на месте включающейся лампочки корректное освещение, на остальных участках графический мусор.
Ссылки с чтивом забыл приложить:
http://hlbsp.sourceforge.net/index.php?content=bspdef
http://www.gamers.org/dEngine/quake/spec/quake-spec34/qkspec_4.htm
http://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml
Подробнейшая инфа по описанию формата q1, q2, goldsrc, они весьма похожи.
Есть да префаба. В каждом свои источники освещения. Как сделать, чтобы эти источники освещали только свой префаб?
Тобишь чтобы в culling mask освещения был задан только текущий префаб.
Зарание спасибо.
В юнити можно отключить влияние анимации на позицию игрока, а можно включить. Естественно через скрипт лучше, ведь можно контролировать скорость, физику и т.д.
Маска, безусловно, есть. Только в маске задается слой. А так как префабов может быть много, то я не думаю что это вариант.
Есть игровое поле, вид сбоку. Поле разделено на сектора равных размеров. В конце - конечный сектор, куда попадают мячи. Мячи появляются в случайных секторах. После появления мяча, он падает вниз, отскакивает от земли, подлетает вверх и летит в следующий сектор. И так до тех пор, пока мяч не попадёт в конечный сектор.
Собственно, как это лучше реализовать? Меня интересует именно движение мячей. Нужно использовать кубические кривые Безье?
Привязывайся к фиксированному FPS, тогда не нужно будет никаких сложных кривых (к слову, тут парабола по мнению физики должна быть, а не Безье), они сами будут получаться из координат мячика по несложным формулам (рассчитывать каждый кадр):
dt = 1/60; (можно и не константой, если допустить плавающий FPS)
x = x_prev + dt * Vx;
y = y_prev + dt * Vy;
Vx = Vx_prev + dt * (1);
Vy = Vy_prev + dt * (-9.8);
(Ускорение - производная скорости по времени; скорость - производная перемещения по времени.)
dt
Иногда, при одновременном прыжке и флипе в обратную прыжку/бегу сторону, "съедается" (исчезает) половина спрайта по вертикали.
Это всегда "не нарисованная" сторона ГГ,
та которая создаётся флипом.
Не уверен, но вроде бы в момент переключения анимации с прыжок на айдл.
В чем может быть причина?
Вот, допустим, мне нужно наблюдать изменение параметра, которым управляет скрипт -
я как дебил должен переключатся в списке с объекта на объект курсорными клавишами, чтобы видеть обновление нужного параметра?
Это я о громкости, но не суть.
Вообще реклама в игре и покупка предметов легко делается?
Эниван?
Использую 2D Toolkit.
parallax scrolling?
Да фон то я двигаю. Мне теперь нужно отображать отдельные объекты, которые будут дополнять фон. При этом они могут появится в случайно позиции по X. Это может быть звезда, планета, говно.
Есть я, есть средние навыки паскаля, слабое представление о программировании в целом и идея игры. Игра несложная, но 3д.
Возможно ли просто взять и создать игру с такими минимальными навыками или надо выучиться чему-то?
Скорее всего тебе всё же придётся изучить основы C#. Но и этого будет маловато. Ещё нужно понять устройство игр. Как и что функционирует. Хотя, школьники и без этого делают игры на юнити. Просто пробуй.
Т.е. мне нужен определенный тег. Есть скрипт, что бы он работал нужно пометить объект определенным тегом. Но в поле тегов есть только уже определенные, не те что нужно. Как прописать определенный тег?
раз уж спиздил 2дтулкит, прочитай мануал
в настройках 2дтулкит камеры в граффе овверайдс поставь всегда растягивать
Начни с изучения C#. Почитай сначала "C# для школьников", а потом "Герберт Шилдт - C# 4.0. Полное руководство". Можешь пропустить главы про многопоточность. Когда изучишь основы, можешь уже повторять за уроками по Юнити.
Спасибо, анончик.
>>127329
А так же проникайся духом великих людей. Будешь читать Шилдта - обрати внимание на уровень его познаний, количество его книг по разным языкам программирования. Еще можно послушать прог-рок Starcastle, где Шилдт является клавишником.
>Возможно ли просто взять и создать игру с такими минимальными навыками или надо выучиться чему-то?
Надо стремиться стать таким как Шилдт. Не только он один такой, конечно же.
Придумай еще для Вирта, Кнута и Дейкстры.
Спасибо. А ты через опенгл отрисовываешь? Или все же через меш? Мне пришлось костыльную триангуляцию полигонов делать чтобы меш построить, но вроде как уже все хорошо. Решил попробовать mdl считать, но пока все закончилось отдельно моделькой и структурой скелета.
Спасибо. А ты через опенгл отрисовываеш? Или все же через меш? Мне пришлось костыльную триангуляцию полигонов делать чтобы меш построить, но вроде как уже все хорошо. Решил попробовать mdl считать, но пока все закончилось отдельно моделькой и структурой костей скелета которые хрен склеишь.
спасибо. буду разбираться.
Сейчас юзаю Mesh, но на подходе наверное уже шестое глобальное перелопачивание кода под БОЛЕЕ ЛУДТШУЮ архитектуру, будет время чтобы поиграться с OpenGL и мигающими лампочками.
А читалку .mdl я тоже с год назад делал, с загрузкой почти всех данных и анимациями.
http://pastebin.com/gVuLraVs
Но её я заново писать буду, тот код что есть содержит кучу магических оффсетов и почти нерасширяем. Да и загрузка анимации для очень хорошо анимированных персонажей (Например учёный в халате из набора HD моделек, который содержит в себе ~140 костей) длится ОЧЕНЬ долго.
С пикрелейтед нихуя не надо делать, оно само всё сделается. Создавай AnimatorController и перетаскивай туда файлы анимаций, соединяй их между собой, потом щёлкаешь на стрелки и там настраиваешь параметры перехода. Параметры меняешь через скрипты. Потом всё бахаешь на Animator и всё готово ебать
Я так и делал
Но анимация нихуя не работает
Думаю, это потому, что мой пикрелейтед весь красный
Алсо, где про анимацию почитать, а то в юнити первый раз с ней столкнулся
Неплохо, пойду посмотрю
Все в итоге шикарно получилось, спасибо
1) Стоит ли беспокоится о переполнении координат? Придется ли раз в н секунд переставлять все на 0 или оно вмещает миллиарда четыре и можно забить??
2) Как сделать так, чтобы можно было прыгать сквозь платформы? В голову приходит поставить коллайдеры сверху и снизу и выключать платформу при столкновении с верхним/включать при столкновении с нижним, но это как-то костыльно.
> 1) Стоит ли беспокоится о переполнении координат?
Нет, ведь они тебе нахуй не нужны. Генерируй части уровни во время движения и всё. А сам игрок должен быть на месте постоянно.
>2) Как сделать так, чтобы можно было прыгать сквозь платформы?
Во всех нормальных платформерах проверяется столкновение только если игрок выше этой платформы.
Если ты про те, на которые можно запрыгнуть и с которых можно спрыгнуть, держа кнопочку вниз.
http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx
Это же ужас какой то. Ничего найти невозможно. Только ассет стор, но там все платно
>Теперь этот дебагер бесплатный + новыш фишки.
И теперь все игры написанные с помощью него принадлежат микрофоту?
За читалку спасибо, будет что завтра почитать. У меня вообще хрень какая то с креплением костей к точкам меша, вроде как беру одни и те же индексы, но получается неведомая хуйня при движении костей.
Петросян чтоли? Микрософт никогда ничего не требовала, ни за использование студии, ни за использование DX, даже за то что пишешь в Windows не запрещает тебе писать приложение для линукса
Сюда выложи
При зажатии клавиши забиваешь в список через определённые промежутки времени координаты мыши переведённые в мировые координаты. Потом двигаешь по ним объект
Какие программы используете для быстрой (шаблонной) генерации персоонажей?
Сам использую связку: MakeHuman + Blender + Unity, но есть ряд минусов. Думаю использовать Poser, Daz или IСlone. Что посоветуете?
> Сам использую связку: MakeHuman + Blender + Unity, но есть ряд минусов.
Каких?
>IСlone
Что за зверь?
Мало моделей одежды. А сами модели не найти.
Если делать самому (благо, есть утилита для импорта из blender-а) то бывают косяки. К примеру, у тебя в модели одежды должен быть только один материал. + мелкие ошибки.
Еще проблема с обувью на каблуке. Нужно править кости в модели.
При импорте в unity если это mecanim - неправильно определяются кости пальцев (но это не так страшно).
Вообщем, затыков хватает.
>IСlone
Комплекс программ для генерации, анимации персоонажей.
+ работа с видео.
Анон, посмотрел только что MakeHuman, вопрос. Есть ли какие дополнения? В оригинале очень мало вариантов кастомизации прическа/нет шрамов и так далее а оффициальном сайте в галерее очень годные и мускулистые персонажи, это дорабатывалось в других редакторах или надо что то скачать?
В нем есть только дополнения к blender. Шмотки/волосы делаю сам.
т.е. Моделишь одежду (blender) -> Создаешь персоонажа, добавляешь шмот (MH) -> Правишь в blender (т.к. мелкие детали) -> Портируешь в unity.
Сами шмотки и волосы не нашел (формата .mhcloth).
Шрамы можно добавить правя текстуру персоонажа, но не в самом MH.
Вообще, ближе к вечеру могу запилить видео-гайд на youtube-чике, если кому интересно.
Мне очень интересно. Я вот только начал изучать блендер. Алсо, расскажешь как делать материалы одежды? На всех скринах она вся как пластмассовая.
Когда Ю5 будет? Заебали уже затягивать.
Анон, где же гайды? Расскажи, как добавлять одежду и прически в программу? Где ты вообще?
Сделал видео, но получилось долго и монтаж занял много времени. А в общем camtasia вообще сделала crash проекта.
Сегодня выложу все видео.
127985-кун
А ты можешь объяснить как одежду и прически добавлять в программу? Не в блендер а в MakeHuman.
В Maкehuman ты их никак не добавишь. (только если найдешь и скинешь в "makehuman\data\clothes\", что маловероятно)
Можно сделать тулзами в блендер и в нем же сделать экспорт
>Надо ли выдрочить отдельно основы сишарпа
Надо. Впервую очередь.
>обмазаться книгами по ооп и алгоритмам
Не надо, но потом посмотри если не стухнешь.
>Или не ебать голову, обмазаться референсами и копипиздить?
Референсами обмажся после освоения шарпа, но тупо не копипизди, иначе так и останешься тупой макакой, которая при каждой ошибке компиляции бегает на форум за советом.
>Давайте ваши советы мудрые.
Сначала гугли, потом спрашивай. Пиши прохладные в тред. Телепатов несуществует.
Добра тебе. Очень годно.
Кстати, ты использовал фрагменты из готовой модели. Можешь пояснить еще, как делать одежду из моделей такого же типа, как на пике? Вроде бы подробно все объяснил, но хочу быть уверен, что ничего не пропустил.
Тоесть, блять, я конечно могу написать Какую-нибудь функцию Copy() которая бы копировала вот конкретно этот struct, но интересно существуют ли предусмотренные способы.
List<string> list1 = new List<string>();
list1.Add("element1");
list1.Add("element2");
list1.Add("element3");
List<string> list2 = new List<string>(list1);
var list = new List<Huita>();
list.add(new Huita());
var newList = list.ToList<Huita>();
мимосишарпобог
Точно.
Я совсем недавно начал изучать блендер и боюсь напутать чего нибудь при применении к MH.
>ноуп
еп. Поверхносная копия, до ю ундестенд ит?
В обеих Massivach структуры скопированы, ссылочные объекты скопированы по ссылке и указывают на один и тоже обьект (List<int> например)
проверь:
ReferenceEquals(MassivA[0], MassivB[0])) // будет false - структуры копируются по значению
ReferenceEquals(MassivA[0].ints, MassivB[0].ints)) // будет true - один объект
Глубокую копию надо делать клешнями руками, IebuchiyiIdiot.
Блять ну говно тогда, хули. Я и спрашивал изначально есть ли нормальные методы делания глубоких копий. Нет так нет.
Компилер не догоняет как именно делать глубокую копию - поэтому только самому.
И да, 1) не юзай структуры, 2) на скрине у тебя структура курильщика.
лень пояснять
Потомушо надо помнить кучу отличий структуры от класса и несколько подводных камней при использовании.
Навскидку:
1) копирование по ссылке/значению
2) возможность изменерия в функции (ref атрибут)
3) отсутствие нормального конструктора по-умолчанию(он есть, но переопределить его нельзя)
4) Что-то там с инициализаторами еще..
Тупо мимнимизация мозговых усилий требует выпила всего это цирка.
Ну и наконец, самая суть структуры - это легкий тип-значение, который внутри тоже должен содержать только типы-значений (никаких ссылок) - и тогда не будет никакой пичали с копированием и ебли ref атрибутов. Это надо относительно редко и можно обойтись классом.
Есть способ.
Загрузить меш. Сделать, чтоб он подходил к персоонажу.
Проследить, чтобы на модели одежды был только 1 материал (иначе не импортнет). Сгенерировать вертекс группы, как на видео.
Прадва сам я такое не пробовал.
Формат конечно пиздос как отличается от того что есть в q1, q2, goldsrc. Сразу видно что был переработан в угоду удобства работы на графических ускорителях. Работать с ним во много раз проще чем с остальными. Да и к тому же, он не поддерживает мигающие Lightmap'ы. И так как читалка теперь работает с абстракциями более высокого уровня, она может грузить и такое.
Интересная херня эти Bezier Patch, все изогнутые поверхности на картах q3 рисуются с их помощью (Пасть на q3dm1 полностью состоит из них). Задаются 9 управляющими точками, а для генерации поверхности их нужно тесселировать.
Потом надо будет почитать исходники q3, и поглядеть, каким образом берётся название текстуры у Face'а, на котором находится шейдер, ибо не совсем совпадают.
А ещё, как оказалось, я не первый человек додумавшийся сделать читалку .bsp в Unity:
https://github.com/mikezila/uQuake3
я не знаю зацем ты это делаешь, но безусловно это круто. Хочешь я тебе сотку задоначу, чтобы ты не останавливался?
1) Создаю простой скелет в 3ds Max и создаю анимацию бега. Анимация выглядит так https://www.youtube.com/watch?v=pBzhPq_eowk
2) Экспортирую это дело и импортирую в юнити.
3) Вот, как выглядит настройка в юнити
http://puu.sh/aDkmn/75f2b4b7d0.png
http://puu.sh/aDkpW/a39c8f9b7c.png
4)Делаю Enforce T-pose и жму Done
и вот, как выглядит анимация в Юнити, видиворелейтед
Видете левую ногу? Как её отремонтировать?
но зачем заниматся хуйней, и иметь с этого опыт в создании хуйни, если в будущем тебе не придется делать эту хуйню
зато я ебал твою мамашу
Нахуй ты мне нужен, я вообще мимокун.
Даже себя нарисовал в воздухе, какой талантливый.
Лол.
Да, было такое, чтобы анимация грузилась коряво. Сейчас не вспомню, но вроде как такое происходило, когда я решил оптимизировать цикл while() грузящий анимации, выкинув из него все, как мне казалось ненужные пропуски индексов, заменив их смещениями. И когда юзал встроенную в Unity функцию перемножения кватернионов, когда заменил её той что есть в официальной рисовалке .mdl всё заработало.
Кстати, по анимации, ты так же, через AnimationClip всё это делаешь?
Так в итоге решилась проблема с анимацией?
Сейчас и не вспомню, говорю, но помню что дебажил я на очень простой модельке футбольного мячика у которого была всего одна кость и 3 анимации, который сейчас я тоже врядли найду.
А ты откуда информацию по читалке берёшь? Тоже как я из GoldSRC SDK просмотрщик .mdl ковыряешь? Можешь в таком случае с моим кодом сверяться да хоть скопипастить себе нужный участок, мне не жалко.
Ну да, вроде как и я эту софтину ковырял.
Проблема у тебя где то в реализации CalcBoneQuaternion, по крайней мере именно там я накосячил когда у меня анимация читалась неправильно.
И ещё, не используй Unity'вскую функцию расчёта поворота Quaternion'а, перепиши AngleQuaternion оттуда, они по результатам отличаются.
А, может быть и в CalcBonePosition поглядеть придётся, уже и не помню в которой из них была проблема.
> И зачем нужны бон контроллеры? Я на них тупо забил.
Самое главное то сказать забыл.
Bone Controller'ы в оригинальной игре позволяют процедурно управлять некоторыми костями. Открывающийся рот у учёных, поворачивающееся туловище у персонажей, всё это через эти самые контроллеры и сделаны.
Нет, в юнити 4 еще твоего батю ебать можно, а в предыдущих только мамку.
юнити 4 - это unity3d версии 4.x
Это копия, сохраненная 15 октября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.