2013-02-28 9 views
5

Ich habe nur eine grundlegende Frage. Ich versuche zu lernen, wie Funktionen zu verwenden, um mit unityscript und ich erfuhr, dass, wenn Sie eine Funktion erstellen, so etwas wieGrundlegende Funktionen in UnityScript

function Example(text) 
{ 
    print(text); 
} 

verwenden und es dann

Example(); 

Sie tatsächlich eine Zeichenfolge einfügen können mit aufrufen oder eine Zahl in die Klammern für das letzte Stück Code in den Klammern und es wird durchlaufen und fügt sich selbst in die Funktion, die Sie zuvor erstellt haben. In diesem Fall druckt es, was immer ich in die Klammern tippe.

Nun, meine Frage ist, wenn das funktioniert, dann warum funktioniert nicht, wo ich in zwei Zahlen weitergeben und fragen, ob sie Arbeit hinzugefügt haben? Der Code Ich versuche, sieht zu verwenden wie:

Addition(4, 4); 
function Addition(a, b) 
{ 
    print(a+b); 
} 

Wenn ich versuche, dies auszuführen, Unity sagt mir

Operator ‚+‘ mit einer linken Seite des Typs nicht ‚Objekt verwendet werden 'und eine rechte Seite vom Typ' Objekt '.

Ich war bei etwa 9 Minuten this video auf Javascript-Funktionen und im Video ansehen, in den Typen Typen genau das, und bekommen das Skript es für ihn hinzuzufügen. Ich bin ziemlich neu im Scripting und ich habe nicht viel Ahnung davon, was ich falsch machen könnte. Vielen Dank im Voraus für die Hilfe.

+4

Willkommen bei SO! Gute Arbeit beim Formatieren deines ersten Posts. – davidethell

Antwort

5

Eigentlich in Unity würde Ihr Code aussehen haben:

Addition(4, 4); 
function Addition(a:int, b:int) 
{ 
    print(a+b); 
} 

Sie würden rufen müssen, welche Art von Argument Sie in der Funktion der Parameter erwarten. Sie sind völlig richtig, wenn Sie sagen, dass dies in JavaScript normalerweise nicht benötigt wird. In Unity ist es jedoch.

Dies ist, weil es eigentlich UnityScript genannt wird. UnityScript ist der Name, der von Leuten verwendet wird, die darauf hinweisen möchten, dass sich das JavaScript von Unity sehr von der traditionellen Version von Javascript in Browsern unterscheidet.

Ich habe eine schöne Liste von Unterschieden zwischen UnityScript und Javascripthere gefunden. Wenn ich eine schnelle Bullet aus dieser Web-Seite zu erstellen, kann ich Ihnen die Unterschiede erklären sind (vielleicht nicht einmal alle):

  • JavaScript ist Klasse frei
  • JavaScript mehrere Variablendeklarationen in einer var-Anweisung unterstützt.
  • In JavaScript wird die Zuweisung als Ausdruck behandelt.
  • Jede Variable auf oberster Ebene in JavaScript ist global. Darüber hinaus ist jede Variablendeklaration, der die var-Anweisung vorausgeht, global.
  • In Javascript ist dynamische Typisierung effizient.
  • In JavaScript ist die Privatsphäre eher unkonventionell.
  • Dollarzeichen ($) sind in UnityScript-Bezeichnern nicht zulässig, da sie in JS-Bezeichnern enthalten sind.
  • In UnityScript gibt es keine with Anweisung.
  • Javascript unterstützt Regular Expression Literals (RegExp oder regex).
  • In JavaScript this kann auf eine von zwei Dinge beziehen, je nach dem Zusammenhang:
    • Das globale Objekt (am besten hier nicht erklärt)
    • Das Objekt, an dem die aktuelle Methode oder Konstruktor gehört

Ich habe Ihre Frage neu geschrieben, um sie auch in UnityScript zu kategorisieren. Stackoverflow hat dies zu sagen:

Unity JavaScript versucht, den ECMAScript-Standard genau zu verfolgen, es variiert in vielerlei Hinsicht von anderen Implementierungen von JavaScript, die auf dem gleichen Standard basieren. Es ist vielleicht am ähnlichsten zu Microsofts JScript, insbesondere darin, dass beide .NET-Sprachen sind. Die Version von Unity wurde jedoch unabhängig voneinander entwickelt, und es gibt eine Anzahl von Unterschieden zwischen den beiden.

Auch ich musste es auf die harte Tour herausfinden. Ich vermasselte die zwei Sprachen und got to this problem.

0

Unity JavaScript aus irgendeinem Grund macht nicht diese 4 als primitive Number Typen, so kann es keine Addition durchführen.

Sie könnten versuchen, sie in primitive umzuwandeln, indem Sie ihre valueOf() Methode aufrufen.

+0

Wo würde ich valueOf() platzieren? Ich habe ein paar verschiedene Spots ausprobiert, aber ich konnte es nicht alleine herausfinden. – Toushinu

+0

@UselessCode Es müsste '4..valueOf()' sein. – alex

+0

'..'? Verwendet die Einheit '..', um auf Mitglieder zuzugreifen? –