Quand je fait une action spécifique dans mon jeu (le jeu fonctionne très bien sans faire cette action), Unity se met en "Pause" et j'ai un NullReferenceExeption. Quand je clique sur "Play" le jeu continue et fonctionne normalement. Je ne sait pas comment régler le problème. Merci pour votre aide :
Message dans ma console :
NullReferenceException: Object reference not set to an instance of an object
GrappleHookHandler.RappelForce (UnityEngine.GameObject hook, System.Int32 dir, System.Single rappelSpeed) (at Assets/GrapHook2D/Scripts/GrappleHookHandler.cs:481)
GrappleHookHandler.Reel (System.Int32 dir) (at Assets/GrapHook2D/Scripts/GrappleHookHandler.cs:148)
PlayerExample.Update () (at Assets/GrapHook2D/Example/PlayerExample.cs:96)
Code (GrappleHookHandler.cs) autours de la ligne 481, la ligne numéro 481 est "playerRB.gravityScale = 0;" :
Code : Tout sélectionner
// Rappel Force, Goes
/// <summary>
/// Get pulled into the hook position
/// </summary>
/// <param name="hook">hook gameobject</param>
/// <param name="dir">1,-1 - go up or down</param>
/// <param name="rappelSpeed">how quick</param>
public void RappelForce(GameObject hook, int dir, float rappelSpeed)
{
DistanceJoint2D distJoint = hook.GetComponent<DistanceJoint2D>();
//save state
bool enforcedDist = distJoint.maxDistanceOnly;
Rigidbody2D playerRB = distJoint.connectedBody;
//make it float and move
playerRB.gravityScale = 0;
playerRB.velocity = rappelSpeed * (hook.transform.position - playerRB.transform.position).normalized;
distJoint.enabled = false;
playerRB.useFullKinematicContacts = true;
distJoint.maxDistanceOnly = enforcedDist;
}
Code (GrappleHookHandler.cs) autours de la ligne 148, la ligne 148 est "RappelDelegate(curHook, dir, reelSpeed);" :
Code : Tout sélectionner
// Public function used to Reeling player
public void Reel(int dir)
{
//only allow if player attached
if (curHook == null)
return;
//set player as travelling
playerTraveling = true;
RappelDelegate(curHook, dir, reelSpeed);
}
Code (GrappleHookHandler.cs) ligne 25, 26 et 27 :
Code : Tout sélectionner
// what function is executed to travel player
delegate void RappelDeleg(GameObject hook, int dir, float rappelSpeed);
RappelDeleg RappelDelegate;
Code (PlayerExample.cs) autours de la ligne 96, la ligne numéro 96 est "grappleHandler.Reel(1);" :
Code : Tout sélectionner
void Update()
{
//left and right on air
if (Input.GetAxisRaw("Horizontal") != 0)
{
rb.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * movementSpeed, rb.velocity.y);
//if not hooked, player stops moving when no key is pressed. This allows for gravity to work when object is indeed hooked
}
//detect if on floor
bool grounded = Physics2D.OverlapCircle(transform.position - Vector3.down * groundOffset, groundRadius);
if (grounded)
{
//jump
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector2.up * jumpForce);
}
//left and right on floor
if (grappleHandler.HookHooked == false)
{
rb.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * movementSpeed, rb.velocity.y);
}
}
//Launch Hook example
if (Input.GetMouseButtonDown(0))
{
//Calculate mouse position in the world
var v3 = Input.mousePosition;
v3.z = 10.0f;
v3 = Camera.main.ScreenToWorldPoint(v3);
Vector2 dir = v3 - transform.position;
grappleHandler.Throw(v3);
}
//Detach Hook
if (Input.GetMouseButtonDown(1))
{
grappleHandler.RemoveHook();
}
//Rappelling Down
if (Input.GetKey(KeyCode.S))
{
grappleHandler.Reel(1);
}
//Rappel Up, If mode is rappelcontrolled
else if (Input.GetKey(KeyCode.F))
{
//only works if reel mode is controlled
grappleHandler.Reel(-1);
}
float characterVelocity = Mathf.Abs(rb.velocity.x);
animator.SetFloat("Speed", characterVelocity);
}
Merci pour votre aide. ;-D