Collisions issues of CharaterController with other box colliders - unity3d

I have a Player with a CharacterCollider & Coins with box collider. When my player collides with coin, then i m disabling coin in OnControllerCollideHit() with hit.gameObject.active = false (where hit = coin gameObject).
But still i m getting some back force or a kind of jerk when i collide with coin.
How can i remove that jerk or force on player collision with any coin box collider.?
I did a lot of research on Google & some forums, but can't find related to this issue.
Any Code will be appreciated.
Thankx

I resolved this issue with a trick.
I added an empty child GameObject with Box collider & Rigidbody in my Player GameObject & increase the collider area that cover my player collider.
This will make me to react before i collide with player collider. And i m handling Coin collision & other collision with empty GameObject collider.
I think this solution might probably help other people on Here. Gud Luck.

If you Don't use Trigger, I suggest check on trigger on Box collider in your Player Object. then OnTriggerEnter function will called when collide with coin.

Related

Unity rigidbody always falling when on another rigidbody. (Unity 2D)

I'm relatively new to Unity, I have a player character and a box sprite, I want the box to be movable by the player and for it to fall, so I gave the box a box collider 2D and a rigidbody2D, the box moves fine and the player can move it OK, however whenever the player is touching the box in any way (standing on it or pushing it) the characters Y velocity begins fluctuating uncontrollably making it play the falling animation. Through some testing I found the problem was the player's rigidbody and boxes rigidbody interaction, I don't know how to fix it. Any help would be great thanks
I think u just need to set both the player character and box sprite 's rigidbody2D to dynamic with 1 gravity scale... u can change their mass to manipulate the motion...

How to have collision detection without physics in Unity?

I am making a simple Unity 2D game. In this there are three gameOjects - 1) The Ground (a long rectangle)2) The player (a square)3) The coin (a circle)Currently i am using colliders on all three. These colliders help the player remain on the Ground and when the player collides with the coin i increment the score.But the problem is that when the player collides with the coin it behaves as if the coin is a physical object and it stops the player.I dont want thisI want that when the player collides with the coin there is no physical interaction between themI tried one thing - switching the colliders in player and coin to isTrigger, but in this case the player and the ground interact in the way they should (the player falls through the ground).What should i do??
Make the interactable objects triggers. That way, you can interract with them, without obstracting your path. To do that, go to the collider Component on the inspector and check the "Is Trigger" checkmark.
Then, go to your scripts and instead of the event OnColliderEnter use the event OnTriggerEnter

In Unity 2D, how do I achieve Non-trigger collsion that doesn't "physically" move the rigidbodies?

I have a bullet game object and an enemy game object.
I want to have the ability of getting the collision point/contact, which's why I think I need the collider of the bullet to not be a trigger collider - this way, I want to have the bullet bounce off the enemy. At times, the bullet will need to bounce off of rectangular objects (not a problem), but I also want the bullet to bounce off of elliptic objects (the problem).
I want the bullet not to "physically" push the enemy, which is why, intuitively, I should set the bullet's collider to be a trigger collider.
When the bullet's collider is a trigger collider, I seemingly don't have a way to implement the bouncing.
But when the collider's not a trigger collider, it pushes the enemy object.
There's no code errors, but I think the code hasn't got anything to do with the problem.
I suspect the problem may have something to do with the Physics Collision Matrix.
EDIT
It seems that raycasting would be the solution to the problem, as Leoverload proposed. My problem became a different problem now, so I'll close off this thread, and open a new one.
Thanks for the help, #Leoverload ! :D
For the position of the hit it's very easy. You must have 2 colliders and 2 Rigidbody and then you can simply add a
Void OnTriggerEnter2D(Collision Coll) and inside it check for the tag : if(coll.compareTag("surface")) and inside you can get the position with collision.transform.position.
The collision matrix on the Physics menu only allows to remove Collision between certain layers, it's useful if you want the enemies not to push eachother!
If you don't want the player pushed you can change the collider to trigger, and destroy the bullet just after the collision with the same method as before with a void OnTriggerEnter2D and the compareTag. In this way it will look like it touches the enemy and explode, but it won't actually touch anything. If you want to add knockback to the player then you could do a simple AddForce based on the direction of the bullet and the work is done!
If you want to avoid the bullet to move walls you can set walls to static and it should work fine

Capsule Collider doesn't move smoothly

I have some issues using CapsuleCollider and RigidBodyController in a Player GameObject in Unity.
Using a CapsuleCollider as collider for the player, I noticed that the player doesn't move like a capsule or a sphere (in other words, I want that the movement should be like a rolling ball, with no stuttering), but its movements like more like a box pushed, with stops and starts, that make some little oscillations of the camera.
Any ideas, solutions or tips?
realy that is all based on how your moving the object, and the rigidbody2D settings of the object, I think using physics forces would roll your character like a ball or capsule, however just setting a velocity wont.

Raytracing not responding correctly

So I'm new to Unity and I'm sure I'm missing an easy step, but after looking online for a while for some reason I can't find the solution.
I have two objects on the screen, player and enemy. Both have Rigidbody2D, and Box Collider 2D attached. On Box Collider 2D I have clicked is triggered On Rigidbody2D for both I have clicked Is Kinematic. On player I have a simple movement script. On the enemy object I have this:
void Update () {
RaycastHit2D hit = Physics2D.Raycast(transform.localPosition,transform.right,Mathf.Infinity);
Debug.DrawRay(transform.localPosition,transform.right);
if (hit)
Debug.Log(hit.collider);
}
Now for some reason when I move player over the object if (hit)
is true, but if I move the player anywhere on the right side it is not true. What would be the reason for this? Thanks.
First of all you don't need Rigidbody for raycast detection, only colliders. Second, Physics2D.Raycast uses world position, not local, so replace "transform.localPosition" with "transform.position", this messes it up a lot if the transform is child of something. Take in mind that you are sending raycast from the right side of your transform, so maybe it's not hitting anything and values you are getting are actually correct.