disableCollisionWith: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
m (Fix phrasing)
 
(2 intermediate revisions by 2 users not shown)
Line 10: Line 10:
|gr1= Object Manipulation
|gr1= Object Manipulation


|descr= Disable collision between vehicles. This command doesn't disable collision between PhysX objects. The collision is always disabled for both objects in the arguments, i.e. vehicle1 with vehicle2 and vehicle2 with vehicle1
|descr= Disable collision between provided objects. The collision is always disabled for both objects in the arguments.
{{Feature|important|Command has to be executed where objects are [[Multiplayer Scripting#Locality|local]], and as long as they don't change locality, the effect of this command will be global.<br>
{{Feature|important|
If the two objects are not local to the same computer, then it has to be executed on both computers to achieve the desired effect.<br>
* this command does not disable collision between PhysX objects
If one or both objects change locality, the command needs to be executed again on the new [[owner]]'s machine(s) to maintain the effect.}}
* this command has to be executed where objects are [[Multiplayer Scripting#Locality|local]], and as long as they do not change locality, the effect of this command will be global:
 
** if the two objects are not local to the same computer, then it has to be executed on both computers to achieve the desired effect
{{Feature|Warning|Each object can only reference 1 other object for disabled collision. In OOP languages (like C#), this would be equivalent to:
** if one or both objects change locality, the command needs to be executed again on the new [[owner]]'s machine(s) to maintain the effect
<enforce>
* the feature works by having an object registering a reference to the other object; this command stores such reference on both objects - see {{Link|#Example 3}}
obj1.disableCollisionWith = obj2;
obj2.disableCollisionWith = obj1;
</enforce>
This means that an object can only be involved in only 1 '''pair''' for disabled collision. So {{hl|obj1}} can have disabled collision with {{hl|obj2, obj3, ..., objN}}. But if {{hl|objN}} wants to disable collision with another object {{hl|objM}}, it cannot have a disabled collision with {{hl|obj1}} anymore. Because {{hl|objN}} would then be involved in 2 pairs: {{hl|[obj1, objN]}} and {{hl|[objN, objM]}}.
}}
{{Feature|Informative|Try to think of this command as if it forms a two-way link between disabled objects, and keep in mind that each object can only have 1 link with another object. As long as at least a one-way link exists, collision remains disabled:
<sqf>
// Arrows show disabled collision with
_obj1 disableCollisionWith _obj2; // _obj1 <-> _obj2
_obj1 disableCollisionWith _obj3; // _obj1 <-> _obj3 and _obj2 -> _obj1. Thus _obj1 has disabled collision with _obj2 and _obj3
_obj2 disableCollisionWith _obj3; // _obj2 <-> _obj3 and _obj1 -> _obj3. Now _obj1 and _obj2 will collide, because the link was broken.
</sqf>
}}
}}


Line 39: Line 27:
|r1= [[Nothing]]
|r1= [[Nothing]]


|x1= <sqf>[_veh1, _veh2] remoteExecCall ["disableCollisionWith", 0, _veh1];</sqf>
|x1= <sqf>player disableCollisionWith myWall;</sqf>
 
|x2= <sqf>[_veh1, _veh2] remoteExecCall ["disableCollisionWith", 0, _veh1];</sqf>
 
|x3= <sqf>
// this command stores a reference to the other object on both arguments:
_obj1 disableCollisionWith _obj2; // _obj1 has a reference to _obj2, disabling collision with it
// _obj2 has a reference to _obj1, disabling collision with it
 
// only one reference is required to disable collision, allowing more than one disabled collision
_obj1 disableCollisionWith _obj3; // _obj1 has a reference to _obj3, disabling collision with it
// _obj2 has a reference to _obj1, disabling collision with it
// _obj3 has a reference to _obj1, disabling collision with it
// factually, _obj1 has collisions disabled with _obj2 and _obj3
 
// note that _obj1 collision can be changed without using the command on it directly
_obj2 disableCollisionWith _obj3; // _obj1 has no more reference to _obj3 and can collide with it
// _obj2 has a reference to _obj3, disabling collision with it
// _obj3 has a reference to _obj2, disabling collision with it
</sqf>


|seealso= [[collisionDisabledWith]] [[enableCollisionWith]]
|seealso= [[collisionDisabledWith]] [[enableCollisionWith]]
}}
}}


<dl class="command_description">
{{Note
 
|user= Ranwer
<dt><dt>
|timestamp= 20150404120300
<dd class="notedate">Posted on April 4, 2015 - 12:03 (UTC)</dd>
|text= [[disableCollisionWith]] is basically a script that when you apply it to an object, and your unit can go through it like a ghost. However, if you wish the object to be solid again, you may wish to use [[enableCollisionWith]].
<dt class="note">[[User:Ranwer|Ranwer]]</dt>
<dd class="note">
[[disableCollisionWith]] is basically a script that when you apply it to an object, and your unit can go through it like a ghost. However, if you wish the object to be solid again, you may wish to use [[enableCollisionWith]].
<br>
<br>
An example for this is:  
An example for this is:  
<sqf>// name of unit in editor such as player1
<sqf>
// name of unit in editor such as player1
// name of object in editor such as barrel1
// name of object in editor such as barrel1
barrel1 disableCollisionWith player1;
barrel1 disableCollisionWith player1;


// to make the barrel solid again, do this as vice versa if you know what you are doing!
// to make the barrel solid again, do this as vice versa if you know what you are doing!
barrel1 enableCollisionWith player1;</sqf>
barrel1 enableCollisionWith player1;
</sqf>
On a side note: this can come in handy a lot if you want a unit to sit on the back of a car or on top of a container
On a side note: this can come in handy a lot if you want a unit to sit on the back of a car or on top of a container
</dd>
}}


<dt><dt>
{{Note
<dd class="notedate">Posted on May 29, 2018 - 06:58 (UTC)</dd>
|user= bloodwyn1756
<dt class="note">[[User:bloodwyn1756|bloodwyn1756]]</dt>
|timestamp= 20180529065800
<dd class="note">
|text= This command does not disable the roadway LOD.
This command does not disable the roadway LOD.
}}
</dd>
 
</dl>

Latest revision as of 11:29, 30 August 2022

Hover & click on the images for description

Description

Description:
Disable collision between provided objects. The collision is always disabled for both objects in the arguments.
  • this command does not disable collision between PhysX objects
  • this command has to be executed where objects are local, and as long as they do not change locality, the effect of this command will be global:
    • if the two objects are not local to the same computer, then it has to be executed on both computers to achieve the desired effect
    • if one or both objects change locality, the command needs to be executed again on the new owner's machine(s) to maintain the effect
  • the feature works by having an object registering a reference to the other object; this command stores such reference on both objects - see Example 3
Groups:
Object Manipulation

Syntax

Syntax:
vehicle1 disableCollisionWith vehicle2
Parameters:
vehicle1: Object
vehicle2: Object
Return Value:
Nothing

Examples

Example 1:
player disableCollisionWith myWall;
Example 2:
[_veh1, _veh2] remoteExecCall ["disableCollisionWith", 0, _veh1];
Example 3:
// this command stores a reference to the other object on both arguments: _obj1 disableCollisionWith _obj2; // _obj1 has a reference to _obj2, disabling collision with it // _obj2 has a reference to _obj1, disabling collision with it // only one reference is required to disable collision, allowing more than one disabled collision _obj1 disableCollisionWith _obj3; // _obj1 has a reference to _obj3, disabling collision with it // _obj2 has a reference to _obj1, disabling collision with it // _obj3 has a reference to _obj1, disabling collision with it // factually, _obj1 has collisions disabled with _obj2 and _obj3 // note that _obj1 collision can be changed without using the command on it directly _obj2 disableCollisionWith _obj3; // _obj1 has no more reference to _obj3 and can collide with it // _obj2 has a reference to _obj3, disabling collision with it // _obj3 has a reference to _obj2, disabling collision with it

Additional Information

See also:
collisionDisabledWith enableCollisionWith

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Ranwer - c
Posted on Apr 04, 2015 - 12:03 (UTC)
disableCollisionWith is basically a script that when you apply it to an object, and your unit can go through it like a ghost. However, if you wish the object to be solid again, you may wish to use enableCollisionWith.
An example for this is:
// name of unit in editor such as player1 // name of object in editor such as barrel1 barrel1 disableCollisionWith player1; // to make the barrel solid again, do this as vice versa if you know what you are doing! barrel1 enableCollisionWith player1;
On a side note: this can come in handy a lot if you want a unit to sit on the back of a car or on top of a container
bloodwyn1756 - c
Posted on May 29, 2018 - 06:58 (UTC)
This command does not disable the roadway LOD.