- Home /
Question by
Bocaj_Dnereb · Mar 12, 2017 at 02:56 PM ·
charactercontrollerspherecastisgrounded
How can I edit this script, that it will check if the character is standing on a specific layer?
Hello all,
I am trying to make a third person game, but my character can jump on water. I am fairly new to scripting and I can't find a way to implement something to the script and stop my character from jumping on water. I think there maybe is a way to check if the character isn't standing on the "water" layer. The problem is, I don't know how to do that.
Edit I found out that it wasn't only the water layer but just when the character was below a certain level of height the controller thought it was onground. If this is fixed I think the problem above is fixed too.
Here's the script:
// Is the character grounded?
private void GroundCheck () {
Vector3 platformVelocityTarget = Vector3.zero;
platformAngularVelocity = Vector3.zero;
float stickyForceTarget = 0f;
// Spherecasting
hit = GetSpherecastHit();
//normal = hit.normal;
normal = transform.up;
groundDistance = r.position.y - hit.point.y;
// if not jumping...
bool findGround = Time.time > jumpEndTime && r.velocity.y < jumpPower * 0.5f;
if (findGround) {
bool g = onGround;
onGround = false;
// The distance of considering the character grounded
float groundHeight = !g? airborneThreshold * 0.5f: airborneThreshold;
Vector3 horizontalVelocity = r.velocity;
horizontalVelocity.y = 0f;
float velocityF = horizontalVelocity.magnitude;
if (groundDistance < groundHeight) {
// Force the character on the ground
stickyForceTarget = groundStickyEffect * velocityF * groundHeight;
// On moving platforms
if (hit.rigidbody != null) {
platformVelocityTarget = hit.rigidbody.GetPointVelocity(hit.point);
platformAngularVelocity = Vector3.Project(hit.rigidbody.
angularVelocity, transform.up);
}
//Flag the character grounded
onGround = true;
}
}
//Interpolate the additive velocity of the platform the character might be standing on
platformVelocity = Vector3.Lerp(platformVelocity,
platformVelocityTarget, Time.deltaTime * platformFriction);
stickyForce = stickyForceTarget;
// remember when we were last in air, for jump delay
if (!onGround) lastAirTime = Time.time;
}
Thanks
Comment