C# Class CharacterController2D, WorldsofREM

Inheritance: MonoBehaviour
ファイルを表示 Open project: jmkmoore/WorldsofREM Class Usage Examples

Public Properties

Property Type Description
jumpingThreshold float
platformMask LayerMask
slopeSpeedMultiplier AnimationCurve
triggerMask LayerMask
usePhysicsForMovement bool

Public Methods

Method Description
OnTriggerEnter2D ( Collider2D col ) : void
OnTriggerExit2D ( Collider2D col ) : void
OnTriggerStay2D ( Collider2D col ) : void
move ( Vector3 deltaMovement ) : void

attempts to move the character to position + deltaMovement. Any colliders in the way will cause the movement to stop when run into.

recalculateDistanceBetweenRays ( ) : void

this should be called anytime you have to modify the BoxCollider2D at runtime. It will recalculate the distance between the rays used for collision detection. It is also used in the skinWidth setter in case it is changed at runtime.

warpToGrounded ( ) : void

moves directly down until grounded

Private Methods

Method Description
Awake ( ) : void
DrawRay ( Vector3 start, Vector3 dir, Color color ) : void
handleHorizontalSlope ( Vector3 &deltaMovement, float angle ) : bool

handles adjusting deltaMovement if we are going up a slope.

handleVerticalSlope ( Vector3 &deltaMovement ) : void

checks the center point under the BoxCollider2D for a slope. If it finds one then the deltaMovement is adjusted so that the player stays grounded and the slopeSpeedModifier is taken into account to speed up movement.

moveHorizontally ( Vector3 &deltaMovement ) : void

we have to use a bit of trickery in this one. The rays must be cast from a small distance inside of our collider (skinWidth) to avoid zero distance rays which will get the wrong normal. Because of this small offset we have to increase the ray distance skinWidth then remember to remove skinWidth from deltaMovement before actually moving the player

moveVertically ( Vector3 &deltaMovement ) : void
primeRaycastOrigins ( Vector3 futurePosition, Vector3 deltaMovement ) : void

resets the raycastOrigins to the current extents of the box collider inset by the skinWidth. It is inset to avoid casting a ray from a position directly touching another collider which results in wonky normal data.

Method Details

OnTriggerEnter2D() public method

public OnTriggerEnter2D ( Collider2D col ) : void
col UnityEngine.Collider2D
return void

OnTriggerExit2D() public method

public OnTriggerExit2D ( Collider2D col ) : void
col UnityEngine.Collider2D
return void

OnTriggerStay2D() public method

public OnTriggerStay2D ( Collider2D col ) : void
col UnityEngine.Collider2D
return void

move() public method

attempts to move the character to position + deltaMovement. Any colliders in the way will cause the movement to stop when run into.
public move ( Vector3 deltaMovement ) : void
deltaMovement Vector3 Delta movement.
return void

recalculateDistanceBetweenRays() public method

this should be called anytime you have to modify the BoxCollider2D at runtime. It will recalculate the distance between the rays used for collision detection. It is also used in the skinWidth setter in case it is changed at runtime.
public recalculateDistanceBetweenRays ( ) : void
return void

warpToGrounded() public method

moves directly down until grounded
public warpToGrounded ( ) : void
return void

Property Details

jumpingThreshold public_oe property

the threshold in the change in vertical movement between frames that constitutes jumping
public float jumpingThreshold
return float

platformMask public_oe property

mask with all layers that the player should interact with
public LayerMask platformMask
return LayerMask

slopeSpeedMultiplier public_oe property

curve for multiplying speed based on slope (negative = down slope and positive = up slope)
public AnimationCurve slopeSpeedMultiplier
return AnimationCurve

triggerMask public_oe property

mask with all layers that trigger events should fire when intersected
public LayerMask triggerMask
return LayerMask

usePhysicsForMovement public_oe property

toggles if the RigidBody2D methods should be used for movement or if Transform.Translate will be used. All the usual Unity rules for physics based movement apply when true such as getting your input in Update and only calling move in FixedUpdate amonst others.
public bool usePhysicsForMovement
return bool