- Home /
How do you stop the player from falling through objects?
Seriously, when I programed the player to reset position when it touches the water, it just falls infinitly, does anybody know a way to stop this?
Need a little more info. Are you using a rigid body which is causing the infinite fall? If so, a collider stops a rigidbody.
also check, when you reset the position, that position is above the floor / ground / terrain / whatever collider..
Answer by joan_stark · Aug 03, 2020 at 08:32 PM
We will need more details to be able to help you.
What's your script? Make sure there is a collider set as triggers. This will allow your water to detect that player is in it. You can find more info on unity's wiki. Also, make sure your player has a collider and a rigidbody to it so it can detect the water.
Hope it helps. Or give more detail please.
Answer by Ooblue365 · Aug 05, 2020 at 05:29 PM
Here is the script I used:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pos_reset : MonoBehaviour{
private Vector3 initialPosition;
private Quaternion initialRotation;
private float distance = 0.5f; // change this depending on how "close" it needs to be
void Start () {
initialPosition = transform.position;
initialRotation = transform.rotation;
}
void Update () {
// Move the object upwards??
transform.Translate(Vector3.up * Time.deltaTime);
// Reset the position if we are sufficiently close to (0,0,0)
if( Vector3.Distance(transform.position, Vector3.zero) < distance)
{
transform.rotation = initialRotation;
transform.position = initialPosition;
}
}
}
So, it is meant to reset position when it touches the water, I have made a rigidbody for my player so then it has gravity.
You shouldn't do it this way. Read documentation about colliders and triggers. You can put a collider in the water so whenever player reaches water, it calls a function that it would be:
OnTriggerEnter() or OnTriggerEnter2D() if its 2d.
Also, vector3.zero as you said is (0,0,0) that means that if player is in z,x,y coordinates further than 0.5 points it wont work. Check that (if you are in 2d) player is in z = 0, and if its in 3d, that hwen player is intended to touch the water his coordinates are lower than 0.5. you could try increasing distance check, but i recommend you again to look for documentation and tutorials about Colliders.
They let you check if one thing is hitting another thing, so you can tell if player is hitting water.
Your answer
Follow this Question
Related Questions
possible bug black bar when you re enter app lollipop 5 1 Answer
Your program is not working for whatever reason. 1 Answer
Gravity Switch by button? 1 Answer
How can I fix a bug in the mono dlls used by unity ?, 0 Answers
Unity Pro Water Bug 0 Answers