[Free Licence compatible][English+Russian]How to use customs collision groups


Go to page 1, 2, 3  Next

Users browsing this forum: No registered users and 1 guest

Next topic
Previous topic
Post new topic Reply to topic  NeoAxis Forum Index » Additional » Tutorials and Articles from Community
Search for:
Author Message

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Thu Sep 17, 2015 3:41 pm Post subject: [Free Licence compatible][English+Russian]How to use customs collision groups
Reply with quote Bottom of Page Back to top
edit:Thanks to Nuada forRussian translation:

English Version ( Scroll for the Russian one )
Intro
Collisions groups are used by physic engine to determine if 2 objects will collide with each other. It's also used when you raytrace to find what object is hit your ray ( it's used to find floor, or only dynamic object)

By default engine has some contact group already setup :
"Collision" that is used represent static physic object
"Dynamic" that represent object that move
"NoContact" that represent a physic object that doesn't collide to anything ( wierd concept right ? you will use it if you want to disable a forcefield wall for exemple so you don't have to move it or destroy it )

you can affect a static object dynamic group or vice versa, it doesn't change static property or anything, it just collision indicator
'Collision' group only contact with Dynamic and NOT with itself (
'Dynamic' group contact with itself, and with 'Collision' ( that's implied when a group contact an other, relation goes in both direction obviously )
in code it's represented by the following lines :
Code: Select all   Expand view
PhysicsWorld.Instance.SetupContactGroups( (int)ContactGroup.Dynamic, (int)ContactGroup.Collision, true );
PhysicsWorld.Instance.SetupContactGroups( (int)ContactGroup.Dynamic, (int)ContactGroup.Dynamic, true );

you can see if i don't specify a relation ( 'Collision' to 'Collision' they won't collide )

we also have some Special groups:
They are here to make ray casting easier, i don't recommend to assign they to a physic object ( even if it will work fine )
'CastAll' will contact with EVERYTHING, even special customs groups ( unless disabled by yourself )
'CastOnlyCollision' will contact only with 'Collision'
'CastOnlyDynamic' will only contact with 'Dynamic', indeed, if you make a raycast with 'Dynamic' group, it's as if you created an object with this group, and it will collide with 'Dynamic' AND 'Collision' as we defined earlier, cast only Dynamic solve this problem :)
'CastOnlyContact' collide only with 'Dynamic' AND 'Collision', it's here in case you create other groups, so it's doesn't mess up everything

some more things :
for information ( used later in the tutorial ), Bullet use a raycast with 'CastOnlyContact' to determin what it has hitted(GitHub). And Character are in group 'Dynamic' (GitHub)

All shapes created are 'Dynamic' by default ( in re or Ingame)
All StaticMesh are in 'Collision' group by default


you can see in the enum 'ContactGroup' than engine has 'CustomUserGroup1' to 'CustomUserGroup8' meant to be availliable to the user
as you can see, we cast the enum element into int before passing it to PhysicSystem, because it use int id, internally, so we don't have to use default 'ContactGroup' enum and can create our own ( that should start at good id to not override first default groups ) and have real names with an actual meaning ( i personally have some like 'DamageLocation', 'Traps', 'Bullet', "OnlyBulletAndColision", etc. The last one is used for decoration floor rock or item,that you can shoot them (and thus apply decal, particle), but it won't touch player nor affect his movement.
But in fact engine can have up to 32 groups ( 0 to 31 ) because it will use 32bit mask for inter group collisions

( please post in comments any question, if i have to clarify something i will edit to add more complete examples for the intro )

Where to start ?

I personally set it in GameWolrd, but you can set it in ManyPlace.
ProjectEntities.GameWorld.cs:
Code: Select all   Expand view
//at the very begining of
internal void DoActionsAfterMapCreated()
{
//add this:
    //if( !EntitySystemWorld.Instance.IsEditor() ) //if you don't want your custom collision to be enabled in editor uncomment this line
    {
        InitPhysicFlags();
    }
// leave rest of the medod like it was

//and add the method in the class too
void InitPhysicFlags()
{
    //our work will take place here empty for now
}

if you want to make groups with your own naming, create a new file in ProjectCommon (it could stay in projectEntity but it should belong to ProjectCommon )
and put you enum inside :
Code: Select all   Expand view
public enum CustomContactGroup
  {
    FirstCustomGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
    SecondCustomGroup,
    //make as much as you want (in the limit of engine as told earlier)
  }


Demo Part 1
From here we will actually put content in our 'CustomContactGroup' enum and 'InitPhysicFlags' method.

To demo the capabilities of CustomContact group we will do the following scenarios:
Character can walk though each other but other interaction with world stay the same.

so first of all we create our group:
Code: Select all   Expand view
public enum CustomContactGroup
  {
    CharacterGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
  }


What do we need for our Character group :
- to NOT collide with itself, but we already saw that if we doest specify it it doesn't contact itsef
- to contact floor, wall, we have seen it's 'Collision' group
- to contact box, doors, balls, etc we have see it's 'Dynamic' group

- Assign it to Character so it use our new properties

Code: Select all   Expand view
void InitPhysicFlags()
{
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Collision, true ); // Contact With Floor
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Dynamic, true ); // Contact With box, doors, balls
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyContact, true ); //can be hitted by bullets
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyDynamic, true );// for Compatibility
}

You may wonder WHY i added the last line with 'CastOnlyDynamic', before, your character where in 'Dynamic' group, and thus, a raycast or volume cast with 'CastOnlyDynamic' would include them, it's actually used in teleporter for example.

Now, we need to make characters actually use our group:

go to Character.cs (ProjectEntities/Action Specific/Character.cs)
an look for 'void CreateMainBody()' method (reminder)
Code: Select all   Expand view
//replace the line
shape.ContactGroup = (int)ContactGroup.Dynamic;

//by

shape.ContactGroup = (int)CustomContactGroup.CharacterGroup;



Demo Part 2

At this point, if you test you will have a problem, it look likes you still colide with unit in some way, but you clearly see that main bodies doesn't colide, here why :
we added this line so our player can be hitted by bullets :
Code: Select all   Expand view
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyContact, true ); //can be hitted by bullets

but CastOnlyContact isn't only used by bullets, it's used to help you with small obstacles, crouch body recreation etc, so if we remove the line, it will work better, but we won't be able to by hitted by bullets..
Fine, we're gonna make our own BulletContactGroup! With blackjack...and hookers... In fact, forget the BulletContactGroup ! :mrgreen:

Code: Select all   Expand view
public enum CustomContactGroup
  {
    CharacterGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
    BulletContactGroup, //
  }


we saw earlier that "'CastOnlyContact' collide only with 'Dynamic' AND 'Collision' " let do the same for our new group, and make it also contact our player instead of CastOnlyContact
Code: Select all   Expand view
void InitPhysicFlags()
{
   //Init CharacterGroup
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Collision, true); // Contact With Floor
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Dynamic, true); // Contact With box, doors, balls
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)CustomContactGroup.BulletContactGroup, true); //can be hitted by bullets
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyDynamic, true);// for Compatibility

   //Init BulletContactGroup
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.BulletContactGroup, (int)ContactGroup.Collision, true);
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.BulletContactGroup, (int)ContactGroup.Dynamic, true);
}


Now we need to make our bullets use our custom group :
go to Bullet.cs (ProjectEntities/Bullet.cs)
an look for bool Process( float maxDistanceForBulletWithInfiniteSpeed )' method (reminder)
Code: Select all   Expand view
//replace the line
RayCastResult[] piercingResult = PhysicsWorld.Instance.RayCastPiercing( ray, (int)ContactGroup.CastOnlyContact );

//by

RayCastResult[] piercingResult = PhysicsWorld.Instance.RayCastPiercing( ray, (int)CustomContactGroup.BulletContactGroup );

//you may need to include top class, for exemple if you put your enum CustomContactGroup inside GameWorld class, code would  be:
(int)GameWorld.CustomContactGroup.BulletContactGroup


Cool, now we can shot our enemies again !
but one last small thing cause problem, if you walk slowly inside an enemy, you get bumped strangely .. it come from the system that detect where you are looking ( an thus determine your player direction, we will simply add 2 lines to avoid "very close elements" noise in calculation
Go to PlayerIntellect.cs (ProjectEntities/Action Specific/PlayerIntellect.cs)
And loog for "bool GetTurnToPosition( out Vec3 turnToPosition )" method ( Here exactly )

Code: Select all   Expand view
// Just before 
turnToPosition = result.Position;
break;

//add code so it looks like
if((result.Position - from).Length()<0.1) // if result is very close to camera, we looks for an other one
   continue;
turnToPosition = result.Position;
break;



That's it, everything should work now !
Any feedback are welcome ( especially from you, Matov :P )

Russian Version

Введение:
Группы столкновений используются физическим движком для проверки столкновений между двумя объектами. Так же они используются при рэйтрейсинге при поиске, какой объект был "задет" лучом.(для примера, используется для поиска земли/пола или только динамических объектов)

По умолчанию в движке есть несколько взаимодействующих предустановленных групп:
"Collision" - представление для статичных объектов.
"Dynamic" - динамические объекты(которые каким-либо образом могут двигаться)
"NoContact" - группа объектов, которые не взаимодействуют ни с чем.(странно, да? вы будете использовать это, для примера, если хотите отключить силовое поле-стену(чтобы физические объекты могли проходить сквозь неё), к примеру, если не хотите передвигать или уничтожать её)

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

'Collision' группа контактирует только с "Dynamic" и НЕ контактирует сама с собой.
'Dynamic' группа контактирует сама с собой, и с Collision' группой (если одна группа взаимодействует с другой, то верно и в обратную сторону утверждение)
В коде это представлено следующими линиями:
Code: Select all   Expand view
PhysicsWorld.Instance.SetupContactGroups( (int)ContactGroup.Dynamic, (int)ContactGroup.Collision, true );
PhysicsWorld.Instance.SetupContactGroups( (int)ContactGroup.Dynamic, (int)ContactGroup.Dynamic, true );


Как вы можете увидеть, если я не указал отношения между 'Collision' и 'Collision', то она не будет взаимодействовать сама с собой.

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

'CastAll' взаимодействует со ВСЕМ, даже со специальными группами ( только если вы не отключили это сами )
'CastOnlyCollision' взаимодействует только с 'Collision'
'CastOnlyDynamic' взаимодействует только с 'Dynamic'. Если вы сделали рэйкаст с 'Dynamic', получится как будто вы создали физический объект со свойством 'Dynamic': он будет взаимодействовать с обеими группами('Dynamic' и 'Collision'), если же вам нужно только с первой группой получить результат рэйкаста - используйте "CastOnlyDynamic".
'CastOnlyContact' взаимодействует только с 'Dynamic' и 'Collision', этот тип находится здесь на случай, если вы создали ещё другие группы, но взаимодействие с ними вам не нужно.

Ещё немного информации:
Пули используют рэйкастинг "CastOnlyContact" чтобы определить, чего они коснулись. А сущности типа "Character" находятся в группе 'Dynamic' (GitHub).

Все шейпы(shape - форма - составляющие физических тел в движке) создаются по умолчанию помеченные как 'Dynamic'.
Все статические меши помечены по умолчанию как "Collision".

Как вы можете увидеть в перечислении "ContactGroup" есть поля CustomUserGroup1-CustomUserGroup8, предназначенные для пользователей.
Как видите, мы превращаем элемент перечисления в тип Int прежде чем отправить его в PhysicSystem, потому там внутри используется идентификатор типа Int, поэтому мы не обязаны использовать стандартное "ContactGroup" перечисление и волны сделать своё(которое должно начинаться с правильного номера первого элемента, чтоббы не затереть первые три стандартные группы) с актуальными для вас именами(лично у меня есть группы 'DamageLocation', 'Traps', 'Bullet', "OnlyBulletAndColision" и другие. последняя используется для декорирования пола, скалы или вещи выстрелом, но "не замечает" игрока).
По факту в движке может быть до 32 групп(0 - 31), потому что используется 32-битная маска для интовой группы столкновений.
(Пожалуйста, публикуйте в комментариях любые вопросы, если у меня будет что уточнить - я добавлю новые примеры во введение)

Где начать?
Лично я поменял группы в GameWolrd, но вы можете сделать это в любом месте
ProjectEntities.GameWorld.cs:
Code: Select all   Expand view
//at the very begining of
internal void DoActionsAfterMapCreated()
{
//add this:
    //if( !EntitySystemWorld.Instance.IsEditor() ) //if you don't want your custom collision to be enabled in editor uncomment this line
    {
        InitPhysicFlags();
    }
// leave rest of the medod like it was

//and add the method in the class too
void InitPhysicFlags()
{
    //our work will take place here empty for now
}


Если вы хотите сделать группы со своими собственными именами - сделайте новый файл в ProjectCommon(можно и в projectEntity, но он должен принадлежать ProjectCommon
и добавьте ваше перечисление в него:
Code: Select all   Expand view
public enum CustomContactGroup
  {
    FirstCustomGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
    SecondCustomGroup,
    //make as much as you want (in the limit of engine as told earlier)
  }


Демо. Часть 1.
Здесь мы напомним содержимым наше перечисление и вызовем метод "InitPhysicFlags".
Для демонстрации возможностей группы "CustomContact" мы сделаем следующее:
Персонажи могут проходить друг сквозь друга, но остальное взаимодействие с миром останется неизменным.
Для начала создадим нашу группу:
Code: Select all   Expand view
public enum CustomContactGroup
  {
    CharacterGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
  }


Что нам для неё нужно:
- НЕ взаимодействовать с собой, но, как мы уже видели, по умолчанию группа не взаимодействует сама с собой без специального указания
- взаимодействовать с полом, стенами и др. - тем, что находится в группе 'Collision'
- взаимодействовать с коробками, дверьми, мячиками и пр. - то есть с группой "Dynamic"

- Пометить персонажей этой группой
Code: Select all   Expand view
void InitPhysicFlags()
{
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Collision, true ); // Contact With Floor
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Dynamic, true ); // Contact With box, doors, balls
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyContact, true ); //can be hitted by bullets
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyDynamic, true );// for Compatibility
}


Вы можете удивиться, почему я добавил последней строчкой "CastOnlyDynamic" - для того, чтобы рэйкастинг или объёмный кастинг так же находил нашего персонажа, это, к примеру, используется в телепортах.

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

Откройте файл Character.cs (ProjectEntities/Action Specific/Character.cs)
и найдите метод 'void CreateMainBody()' [url напоминалка]https://github.com/NeoAxis/SDK/blob/master/Project/Src/ProjectEntities/Action%20Specific/Character.cs#L1602[/url]
Code: Select all   Expand view
//replace the line
shape.ContactGroup = (int)ContactGroup.Dynamic;

//by

shape.ContactGroup = (int)CustomContactGroup.CharacterGroup;


Демо. Часть 2.

Теперь, если вы протестируете - вы обнаружите проблему: вы всё равно будете сталкиваться своим персонажем с другими персонажами, но вы увидите, что главные тела персонажей всё уже не взаимодействуют и вот почему:
мы добавили эту строку, поэтому наш персонаж может быть поражён пулями:
Code: Select all   Expand view
  PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyContact, true ); //can be hitted by bullets


Но "CastOnlyContact " используется не только пулями, она(группа) используется для помощи с определением мелких препятствий, пересозданием тела когда персонаж крадётся, поэтмоу если мы удалим эту строку, всё начнёт работать лучше, но мы уже не будем "ловить пули телом".
Отлично! Мы создадим свою группу "BulletContactGroup"! С блэджеком и шлюхами! Хотя к чёрту блэкджек. В общем, забейте на "BulletContactGroup". :mrgreen:
Code: Select all   Expand view
public enum CustomContactGroup
  {
    CharacterGroup=7,  //CustomUserGroup1 is id 7 so we start our special stuff here
    BulletContactGroup, //
  }


Как мы видели раньше, "CastOnlyContact" взаимодействует только с 'Dynamic' и 'Collision' - сделаем то же для нашей новой группы и так же сделаем возможность взаимодействия с нашим персонажем вместо "CastOnlyContact"
Code: Select all   Expand view
void InitPhysicFlags()
{
   //Init CharacterGroup
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Collision, true); // Contact With Floor
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.Dynamic, true); // Contact With box, doors, balls
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)CustomContactGroup.BulletContactGroup, true); //can be hitted by bullets
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyDynamic, true);// for Compatibility

   //Init BulletContactGroup
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.BulletContactGroup, (int)ContactGroup.Collision, true);
   PhysicsWorld.Instance.SetupContactGroups((int)CustomContactGroup.BulletContactGroup, (int)ContactGroup.Dynamic, true);
}


Теперь нам надо сделать так, чтобы пули использовали нашу специальную группу:
Откройте Bullet.cs (ProjectEntities/Bullet.cs)
и ищите метод bool Process( float maxDistanceForBulletWithInfiniteSpeed )' [url напоминалка]https://github.com/NeoAxis/SDK/blob/master/Project/Src/ProjectEntities/Bullet.cs#L384[/url]
Code: Select all   Expand view
//replace the line
RayCastResult[] piercingResult = PhysicsWorld.Instance.RayCastPiercing( ray, (int)ContactGroup.CastOnlyContact );

//by

RayCastResult[] piercingResult = PhysicsWorld.Instance.RayCastPiercing( ray, (int)CustomContactGroup.BulletContactGroup );

//you may need to include top class, for exemple if you put your enum CustomContactGroup inside GameWorld class, code would  be:
(int)GameWorld.CustomContactGroup.BulletContactGroup


Зашибись, братюни, теперь мы снова можем превратить в кровавые ошмётки этих недалёких ублюдков!
Но есть малюсенькая проблема: если вы медленно постараетесь войти во врага(в игре, извращенцы! шагом, а не так, как вы подумали!) вы странно столкнётесь. Это исходит из системы, определяющей направление игрока(куда вы смотрите), чтобы обойти это нам надо добавить лишь 2 строчки, чтобы избежать помех "очень близких элементов" при расчётах.
Перейдите в PlayerIntellect.cs (ProjectEntities/Action Specific/PlayerIntellect.cs)
И найдите метод "bool GetTurnToPosition( out Vec3 turnToPosition )" method [url туточки]https://github.com/NeoAxis/SDK/blob/master/Project/Src/ProjectEntities/Action%20Specific/PlayerIntellect.cs#L235[/url]
Code: Select all   Expand view
// Just before 
turnToPosition = result.Position;
break;

//add code so it looks like
if((result.Position - from).Length()<0.1) // if result is very close to camera, we looks for an other one
   continue;
turnToPosition = result.Position;
break;


Теперь всё должно работать!
Любые комментарии приветствуются!
( только не(зачёркнуто) от тебя, Matov :P)

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Fri Sep 18, 2015 8:13 am 
Reply with quote Bottom of Page Back to top
and here it goes! :) This tutorial opened my eyes about how interactions between physics in this engine works. I expected a lecture about physical bodies and their interactions in unreal vacum machine,but its simple and logical (but i must admit ,beginning was a bit scary :0)

Edited! Everything is working,it was my stupid and crazy mistake :lol:

But there is something strange when i am inside of other character,the other character changes his position and tries to get of from me despite he dont contacts with my physic.

what it can be?

 
 Profile  

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Fri Sep 18, 2015 11:20 am 
Reply with quote Bottom of Page Back to top
Matov wrote:
when i am inside of other character,the other character changes his position and tries to get of from me despite he dont contacts with my physic.

what it can be?


is it an AI character ?
if yes, what are his "Optimal range distance" and weapons ranges settings ?

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Fri Sep 18, 2015 12:50 pm 
Reply with quote Bottom of Page Back to top
yes ,i throught about it, but its not an only reason ,because they went much faster than if i was just inside of their optimal range.Or i dont know ,may be its must be that way :| ,but anyway its not a problem for me. Thank you very much for tutorial :)

 
 Profile  

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Fri Sep 18, 2015 1:07 pm 
Reply with quote Bottom of Page Back to top
try to disable AI, if it dosen't change anything i can have a deeper look at it :)

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Fri Sep 18, 2015 2:15 pm 
Reply with quote Bottom of Page Back to top
i think i found the root of problem! when i disabled ai and walked into mobster (right to his center),i still could push him (i could even fly with him and smack him to the wall like wwe smackdow :mrgreen: )
There is a dot in the middle of character that still contacts with me! i can be wrong but i think thats it! we need to eliminate this thing :maniac:

 
 Profile  

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Fri Sep 18, 2015 2:59 pm 
Reply with quote Bottom of Page Back to top
wow, pretty strange ...
Could you enable "show dynamic physic" and screenshot ?
can you make a cube and set it's contact group to CustomUserGroup1 ( editor will not show your named groups ) and try to walk in it ?

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Fri Sep 18, 2015 3:59 pm 
Reply with quote Bottom of Page Back to top
i could not find how to assing collide group to cube But i got screenshot! :)
Image
Image


EDIT: Holly molly what's wrong with this pictures they are so big! And first foto is Embrassing somehow :|

 
 Profile  

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Fri Sep 18, 2015 4:36 pm 
Reply with quote Bottom of Page Back to top
Even stranger... does it repro on clean sdk ? ( i don't have one right now so i can't test )
about images, it does the thumbnail only if you upload them on NA, from external sources, it use full resolution

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Sun Sep 20, 2015 8:04 am 
Reply with quote Bottom of Page Back to top
I dont think that its only related to my project ,because i never changed anything in physics code or added suspicious things to character types in editor(i scanned all of them)
but if i will get clean sdk sometime ,then will try to test it.

 
 Profile  

Joined: Sun Feb 16, 2014
Posts: 111
PostPosted: Sun Sep 20, 2015 11:02 am 
Reply with quote Bottom of Page Back to top
Put specifically, the model file in which the glitch Gamecharacter or Playercharacter. in it the physics settings.

 
 Profile  

Joined: Thu Feb 03, 2011
Posts: 1305
PostPosted: Tue Sep 22, 2015 4:05 pm 
Reply with quote Bottom of Page Back to top
Ok, just had a chance to test the tutorial ( yeah, i wrote it without testing, ask Rulz, i'm always like that :mrgreen: )

it's because of
Code: Select all   Expand view
PhysicsWorld.Instance.SetupContactGroups( (int)CustomContactGroup.CharacterGroup, (int)ContactGroup.CastOnlyContact, true ); //can be hitted by bullets

it's used when recreating the bodies and detecting ground etc, so we need to make a new group for bullet

i will update tutorial tomorrow

ps: (funny fact, i have a force that still push me back in FPS mode but not in TPS mode.. i you have an idea that will save me some time ^^)

 
 Profile  

Joined: Sun Feb 16, 2014
Posts: 111
PostPosted: Tue Sep 22, 2015 6:19 pm 
Reply with quote Bottom of Page Back to top
Firefly wrote:
ps: (funny fact, i have a force that still push me back in FPS mode but not in TPS mode.. i you have an idea that will save me some time ^^)


Is the recoil of the weapon. it works in the first person.

 
 Profile  

Joined: Sun Sep 01, 2013
Posts: 150
PostPosted: Tue Sep 22, 2015 6:55 pm 
Reply with quote Bottom of Page Back to top
Recoil of the weapon? in neoaxis? i know that i dont made any fps project recently but still dont remember that there where recoil in neoaxis :|

But anyway ,Firefly,dont forget to write the reason why this bug is happening,it can be helpfull. waiting for update! :work:

 
 Profile  

Joined: Sun Feb 16, 2014
Posts: 111
PostPosted: Wed Sep 23, 2015 7:51 am 
Reply with quote Bottom of Page Back to top
In the class of weapons recoil when firing in the tank class has the same code, maybe in other classes there are and for other purposes.

 
 Profile  
Display posts from previous:  Sort by  
Post new topic Reply to topic  NeoAxis Forum Index » Additional » Tutorials and Articles from Community
Go to page 1, 2, 3  Next

Jump to:  

Next topic
Previous topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

cron

All times are UTC




Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group