2017-05-19 4 views
-2

Ich habe zwei separate Monobehaviors, eine, Card, hat eine Enum für 4 Anzüge und einen Konstruktor für zwei Werte von Anzug und Nennwert. Das zweite Deck hat für jede Schleife eine Instanz, um Instanzen meiner Karte zu erstellen. Es erstellt meine 52 Karten mit einer for-Schleife, die 13 Karten pro Enum begrenzt, aber wenn es versucht, die Instanzen zu machen, sagt es mir, dass new nicht erlaubt ist und addcomponent ist, wie man das macht, aber ich kann es nicht zum Laufen bringen. Ich kann meinen Code zur Überprüfung in Kürze hochladen.Monobehavior Ausgaben

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using UnityEngine; 

public class Deck : MonoBehaviour 
{ 
    public int minVal = 1; 
    public int maxVal = 13; 
    List<Card> _cards = new List<Card>(); 
    public void Awake() 
    { 
     foreach (var Suit in Enum.GetValues(typeof(Card.Suit)).Cast<Card.Suit>()) 
     { 
      for (int i = minVal; i <= maxVal; i++) 
      { 
       _cards.Add(new Card(Suit, i)); 
      } 
     } 
    } 
} 

Dies ist das Deck. Unten ist die Karte:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Card : MonoBehaviour 
{ 
    public enum Suit { Clubs, Hearts, Diomonds, Spades }; 

    public Suit suit; 

    public int faceValue; 

    public Card(Suit _suit, int _faceValue) 
    { 
     suit = _suit; 
     faceValue = _faceValue; 

    } 
} 
+0

"Ich kann meinen Code zur Überprüfung in Kürze hochladen." Immer das tun - nicht unbedingt den eigentlichen Code, sondern ein [mcve] - * vor * die erste Version der Frage zu stellen. Einfach nur Code zu beschreiben ist fast nie hilfreich. –

+0

So haben Sie alle Informationen, die Sie brauchen, kein Konstruktor erlaubt und Sie sollten addComponent verwenden, welches Problem haben Sie? Haben Sie sich addComponent angesehen? – ElDuderino

+0

Und bitte fügen Sie den Code nicht in Kommentare ein - bearbeiten Sie Ihre Frage, um sie dort zu platzieren, einschließlich der genauen Fehlermeldung. –

Antwort

0

Nach dem Unity Docs,

MonoBehaviour ist die Basisklasse, von der alle Unity-Skript leitet.

Ihr Skript ist nicht als Komponente gedacht und verwendet keine der MonoBehaviour-Funktionen. Es ist nur eine C# -Klasse. Um dieses Problem zu lösen, lassen Sie die Card Klasse nicht von MonoBehaviour erben. Ändern Sie einfach public class Card : MonoBehaviour zu public class Card.

Sie können jetzt auch die using UnityEngine; aus Ihrem Kartenskript löschen.