2016-06-02 18 views
1

Hallo an alle versuchen, zu bauen ein einfaches Spiel,Ausführen von JavaScript-Code bei Unity-Fehlern.

dies mein Code , wenn ich diesen Code ausführen seine mir den Fehler geben ‚playerMovement‘ kein Mitglied von ‚UnityEngine.Rigidbody‘ ist.

public var speed : int = 15; 
var player : Rigidbody; 
var player2 : Rigidbody; 

function Start() { 
player = GetComponent.<Rigidbody>(); 
player2 = GetComponent.<Rigidbody>(); 
} 

function playerMovement(){ 
if(Input.GetKey(KeyCode.UpArrow)){ 
    player.AddForce(Vector3.forward*speed); 
    Debug.Log("Player 1 is moving forward"); 
} 
if(Input.GetKey(KeyCode.DownArrow)){ 
    player.AddForce(Vector3.back*speed); 
} 
if(Input.GetKey(KeyCode.LeftArrow)){ 
    player.AddForce(Vector3.left*speed); 
} 
if(Input.GetKey(KeyCode.RightArrow)){ 
    player.AddForce(Vector3.right*speed); 
} 

} 

function player2Movement(){ 
if(Input.GetKey(KeyCode.UpArrow)){ 
    player2.AddForce(Vector3.forward*speed); 
    Debug.Log("Player 2 is moving forward"); 
} 
if(Input.GetKey(KeyCode.DownArrow)){ 
    player2.AddForce(Vector3.back*speed); 
} 
if(Input.GetKey(KeyCode.LeftArrow)){ 
    player2.AddForce(Vector3.left*speed); 
} 
if(Input.GetKey(KeyCode.RightArrow)){ 
    player2.AddForce(Vector3.right*speed); 
} 

} 

function Update() { 
player.playerMovement(); 
player2.playerMovement(); 
} 

its me den Fehler 'playerMovement' ist was kein Mitglied von 'UnityEngine.Rigidbody'. wie Sie das beheben können.

+2

Funktion Update() { player.playerMovement(); player2.playerMovement(); } –

+0

Was meinst du damit – Sami

+0

Ich schrieb eine Antwort, aber ich sehe jetzt, es ist etwas komplizierter, so dass es gelöscht.Also, was Sie wirklich wollen, ist, zwei separate Skripte für Player1 und Player2 zu haben. Sie haben versucht, die playerMovement-Methode aus RigidBody-Referenz irgendwie magisch aufzurufen. –

Antwort

0

Sie müssen aufpassen, wenn Sie Ihren Code von C# zu Javascript portieren.

player.playerMovement(); 
player2.playerMovement(); 

Die Funktionen, die Sie anrufen, befinden sich beide im selben Skript.

Rufen Sie sie einfach direkt an.

playerMovement(); 
player2Movement(); 

Beachten Sie auch die schlechte Rechtschreibung Änderung im Code über Spieler Bewegung.

Auch wenn Sie festgelegt, dass es ohne Fehler kompiliert wird, aber nicht wie erwartet wegen:

player = GetComponent.<Rigidbody>(); 
player2 = GetComponent.<Rigidbody>(); 

Da Sie verschiedene Gameobject/Bälle zu bewegen. Sie müssen GameObject.Find verwenden, um sie zu finden, bevor Sie die Rigidbody Referenz von jedem von ihnen erhalten.

player = GameObject.Find("Ball1").GetComponent.<Rigidbody>(); 
player2 = GameObject.Find("Ball2").GetComponent.<Rigidbody>(); 

Schließlich sind die Steuerelemente durcheinander. Sie verwenden das gleiche Steuerelement. Ich denke, das ist eine schlechte Kopie und einfügen oder etwas, aber unten ist Ihr ganzer funktionierender Code.

Hinweis:

Bevor Sie sagen, dass es nicht funktioniert, stellen Sie sicher, dass, dass Ihre beiden Gameobject/Kugeln ball1 genannt und Ball2 und auch sicherstellen, dass die alte C# kalt ist nicht an ihnen befestigt. Der Code wurde getestet und es funktioniert!

#pragma strict 

public var speed : int = 15; 
var player : Rigidbody; 
var player2 : Rigidbody; 

function Start() { 
    player = GameObject.Find("Ball1").GetComponent.<Rigidbody>(); 
    player2 = GameObject.Find("Ball2").GetComponent.<Rigidbody>(); 
} 

function playerMovement(){ 
    if (Input.GetKey(KeyCode.A)) 
    { 
     player.AddForce(Vector3.left * speed); 
    } 

    if (Input.GetKey(KeyCode.D)) 
    { 
     player.AddForce(Vector3.right * speed); 
    } 

    if (Input.GetKey(KeyCode.W)) 
    { 
     player.AddForce(Vector3.forward * speed); 
     Debug.Log("Player 1 is moving forward"); 
    } 
    if (Input.GetKey(KeyCode.S)) 
    { 
     player.AddForce(Vector3.back * speed); 
    } 
} 

function player2Movement(){ 
    if(Input.GetKey(KeyCode.UpArrow)){ 
     player2.AddForce(Vector3.forward*speed); 
     Debug.Log("Player 2 is moving forward"); 
    } 
    if(Input.GetKey(KeyCode.DownArrow)){ 
     player2.AddForce(Vector3.back*speed); 
    } 
    if(Input.GetKey(KeyCode.LeftArrow)){ 
     player2.AddForce(Vector3.left*speed); 
    } 
    if(Input.GetKey(KeyCode.RightArrow)){ 
     player2.AddForce(Vector3.right*speed); 
    } 

} 

function Update() { 
    playerMovement(); 
    player2Movement(); 
} 
+1

Gearbeitet! !!! Vielen Dank ... Ich habe keine Ahnung von der GameObject.Find-Methode .. Vielen Dank Alot – Sami

0

playermovement Funktion ist nicht Teil eines rigidbody es Teil des Skripts ist, die zu einem gameObject so jeder Gameobject angebracht ist, dass dies muss dieses Skript an ihnen anrufen will, und Sie können durch den Aufruf ihres Umzugs-Funktion einfach anrufen playerMovement() im Skript

public var speed : int = 15; 
var player : Rigidbody; 

function Start() { 
player = GetComponent.<Rigidbody>(); 
} 

function playerMovement(){ 
if(Input.GetKey(KeyCode.UpArrow)){ 
    player.AddForce(Vector3.forward*speed); 
    Debug.Log("Player 1 is moving forward"); 
} 
if(Input.GetKey(KeyCode.DownArrow)){ 
    player.AddForce(Vector3.back*speed); 
} 
if(Input.GetKey(KeyCode.LeftArrow)){ 
    player.AddForce(Vector3.left*speed); 
} 
if(Input.GetKey(KeyCode.RightArrow)){ 
    player.AddForce(Vector3.right*speed); 
} 

} 


function Update() { 
playerMovement(); 
} 

und was du hast, schrieb ein anderes Problem, und das ist, dass Sie Ihr beide Spieler mit den gleichen Schlüssel zu den gleichen Zeiten bewegen, so müssen Sie separate Tasten für jeden Spieler Eingabe machen oder es machen Turn based, es liegt an deinem Spiel

public var speed : int = 15; 
var player1Obj: GameObject; 
var player2Obj: GameObject; 
var player : Rigidbody; 
var player2 : Rigidbody; 

function Start() { 
player = player1Obj.GetComponent.<Rigidbody>(); 
player2 = player2Obj.GetComponent.<Rigidbody>(); 
} 

function playerMovement(){ 
if(Input.GetKey(KeyCode.UpArrow)){ 
    player.AddForce(Vector3.forward*speed); 
    Debug.Log("Player 1 is moving forward"); 
} 
if(Input.GetKey(KeyCode.DownArrow)){ 
    player.AddForce(Vector3.back*speed); 
} 
if(Input.GetKey(KeyCode.LeftArrow)){ 
    player.AddForce(Vector3.left*speed); 
} 
if(Input.GetKey(KeyCode.RightArrow)){ 
    player.AddForce(Vector3.right*speed); 
} 

} 

function player2Movement(){ 
if(Input.GetKey(KeyCode.W)){ 
    player2.AddForce(Vector3.forward*speed); 
    Debug.Log("Player 2 is moving forward"); 
} 
if(Input.GetKey(KeyCode.S)){ 
    player2.AddForce(Vector3.back*speed); 
} 
if(Input.GetKey(KeyCode.A)){ 
    player2.AddForce(Vector3.left*speed); 
} 
if(Input.GetKey(KeyCode.D)){ 
    player2.AddForce(Vector3.right*speed); 
} 

} 

function Update() { 
playerMovement(); 
player2Movement(); 
} 
+0

Ich habe zwei Spielobjekte, und ich habe starre Körper auf beide Objekte angewendet. Jetzt versuche ich, ihnen getrennte Schlüssel zuzuweisen, damit sie sich bewegen können. Das Problem, dem ich gegenüberstehe, ist herauszufinden, wie die Spielobjekte in meinem Skript verlinkt werden. Ich schreibe diesen Player = GetComponent. (); für Spielobjekt 1 und Spieler2 = GetComponent. (); für Spielobjekt 2, aber es ist immer noch nicht gelöst. – Sami

+0

milad, zufällig ist mein Code ähnlich wie bei Ihnen, es bewegt immer noch den Spieler mit dem einzigen Schlüssel. Ich denke, dass das Problem mit den Startfunktionen verbunden ist, da wir sowohl player2 als auch player2 identische Dinge zuweisen. – Sami

+0

ja, ich habe es geändert, habe die beiden Spielobjekte Spieler eins und Spieler zwei zugewiesen, 'player1obj' und' player2obj' über Inspektor –

Verwandte Themen