Je suis actuellement un cours vidéo pour faire un jeu 2D avec Unity, et tout se passait plutôt bien jusqu'à ce que ce problème apparaisse :
The referenced script (Unknown) on this Behaviour is missing
Je n'ai qu'un seul script dans mon projet Unity, nommé Player.cs, et celui-ci sert à faire bouger mon personnage, ainsi qu'à tracer une 'ligne' derrière lui.
Voilà le fameux code :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// < >
public class Player : MonoBehaviour
{
// Variables
Rigidbody2D rb; // RigidBody du joueur
public int speed; // vitesse du joueur
Vector2 dir; // direction du joueur
GameObject wallPrefab; //Mur à instancier
Vector2 lastPos; // dernière position
Collider2D lastWallCol;
float wallWidth = 1;
public GameObject boomParticles;
// Fonctions Unity
void Start()
{
dir = Vector2.up; // Par défaut, direction vers le haut
rb = GetComponent<Rigidbody2D>(); // Récupération du rb
rb.velocity = dir * speed; // Mouvement de départ
wallPrefab = Resources.Load("Wall"+gameObject.tag) as GameObject; // récupération dynamique du mur à instancier
}
// Update is called once per frame
void Update()
{
HandleKeys();
SetLastWallSize(lastWallCol, lastPos, transform.position);
}
private void OnTriggerEnter2D(Collider2D collision) // fonction permettant la colision dans un MUR
{
if(collision != lastWallCol)
{
Instantiate(boomParticles, transform.position, Quaternion.identity);
Destroy(this.gameObject);
}
}
//Fonctions Custom
private void HandleKeys()
{
// récupération des touches directionnelles puis modification de la rb.velocity
if (Input.GetKeyDown(KeyCode.UpArrow))
{
if (dir != Vector2.down)// cette condition interdit au joueur de revenir en arrière, ou d'aller du côté opposé
{
dir = Vector2.up;
CreateWall();
}
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
if (dir != Vector2.up)
{
dir = Vector2.down;
CreateWall();
}
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
if (dir != Vector2.right)
{
dir = Vector2.left;
CreateWall();
}
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
if (dir != Vector2.left)
{
dir = Vector2.right;
CreateWall();
}
}
rb.velocity = dir * speed; // rb.velocity est modifiée avec la dir correspondant à la touche appuyée donc mouvement appliqué
}
private void CreateWall()
{
lastPos = transform.position; // récupération de la position du joueur au moment où il change de direction
GameObject go = Instantiate(wallPrefab, transform.position, Quaternion.identity);
lastWallCol = go.GetComponent<Collider2D>();
}
private void SetLastWallSize(Collider2D col, Vector2 posStart, Vector2 posEnd)
{
if (col)
{
col.transform.position = posStart + (posEnd - posStart) / 2;
float size = Vector2.Distance(posEnd, posStart);
if (posStart.x != posEnd.x)
col.transform.localScale = new Vector2(size + wallWidth, wallWidth);
else
col.transform.localScale = new Vector2(wallWidth, size + wallWidth);
}
}
}
Si quelqu'un sait d'où ça peut venir, ça m'aiderait beaucoup !
Cordialement,
Niiack
EDIT: Suite à un post sur stackoverflow, j'ai effectué la manip suivante :
clique droit sur Assets
Reimport ALL
Le problème semble être résolu, mais est-ce que quelqu'un saurait comment éviter qu'il se reproduise ? Ai-je fait une mauvaise manip sans m'en rendre compte ? Merci
je suis allé consulter la vidéo dans laquelle ce problème m'est apparu, et j'ai constaté que le formateur avait modifié des noms de fichiers à un moment donné. J'ai sûrement suivi bêtement et j'ai du faire une coquille à ce moment.
J'espère que ça ne se reproduira pas.
Sujet résolu, merci, et une bonne année.
« L'ordre mon cul, la liberté m'habite ! »
Unity - Script manquant
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.