Ich habe einen Spieler und ein paar NPCs. Die NPCs haben zufällige Bewegungen, und ich kontrolliere meine Spielerbewegung. Beide haben RigidBody2D, um sich mit Physik und BoxCollider2D mit Kollisionen zu befassen.Einheit: Stop RigidBody2D von einander schieben
Jedoch, wenn ich in einen NPC gehe, drückt mein Spieler es. Das Gleiche gilt, wenn ein NPC in meinen Player zieht, während der Spieler still steht.
Ich kann die Masse eines Objekts nicht auf eine extreme Zahl setzen, da dies das Verhalten anderer Objekte in meinem Spiel beeinträchtigt.
Was ich will: Wenn ein NPC kollidiert mit dem Spieler, die NPC stoppt (ich diesen Effekt, wenn ich Spieler Masse ab auf 1000, aber dann kann der Spieler die NPC schieben, die ich nicht wollen.), und der NPC agiert als eine "Wand", dh er bewegt sich nicht, aber der Spieler kann ihn auch nicht herumschieben. Wie kann ich das machen?
EDIT: Also habe ich meine eigene Methode für sie:
void OnCollisionEnter2D(Collision2D other){
if (other.gameObject.name == "Player") {
collidedWithPlayer = true; //we only move if !collidedWithPlayer
isMoving = false; //stop moving
myRigidBody.mass = 1000; //turn NPC into "wall"
}
}
void OnCollisionExit2D(Collision2D other){
if (other.gameObject.name == "Player") {
collidedWithPlayer = false;
waitCounter = waitTime; //stop NPC from starting to move right after we exit
myRigidBody.mass = 1;
}
}
Ich meine dies funktioniert, aber es gibt keine native Methode, dies zu tun?