void Update() { if (_PlayerCollisionManager.PlayerCollisionInfo != collisionInfo.noCollision) { if (_PlayerCollisionManager.touchedSideInfo != sideInfo.up && _PlayerCollisionManager.touchedSideInfo != sideInfo.capraz) { var speed = lastVelo.magnitude; var direction = Vector3.Reflect(lastVelo.normalized, _PlayerCollisionManager.normal); _PlayerRigidBody.velocity = direction * (speed * 0.5f); _PlayerCollisionManager.touchedSideInfo = sideInfo.up; } } lastVelo = _PlayerRigidBody.velocity; setBoundariesforPlayerPosition(); collisionInfo PlayerCollisionInfo = _PlayerCollisionManager.PlayerCollisionInfo; Vector2 PlayerVelocity = _PlayerRigidBody.velocity; touchStatus inputStatus = _InputManager.currentTouchStatus; bool isPlayerStill = (PlayerCollisionInfo != collisionInfo.noCollision && Mathf.Abs(PlayerVelocity.x) < 0.2); if (isPlayerStill) { if (inputStatus == touchStatus.touchReleased) { Vector2 jumpDirectionVector = calculateJumpDirectionVector(_InputManager.TouchEndPos2D, _InputManager.touchHoldTime); _PlayerRigidBody.AddForce(jumpDirectionVector * jumpPower); } } }
private void OnCollisionEnter2D(Collision2D collision) { normal = collision.contacts[0].normal; PlayerCollisionInfo = statusControl(collision.collider); touchedSideInfo = sideControl(collision.contacts[0].normal); isPlayerProperlyOnPlatform = edgeControl(); if (PlayerCollisionInfo == collisionInfo.CollidingWithBasicGround && touchedSideInfo == sideInfo.up) { gameObject.GetComponent <Rigidbody2D>().velocity = Vector2.zero; } }
private void OnCollisionExit2D(Collision2D collision) { PlayerCollisionInfo = collisionInfo.noCollision; }