2017-01-20 4 views
0

Ich habe gerade mein erstes Indie-Horror-Spiel vor ein paar Tagen veröffentlicht und bin dabei, es zu aktualisieren. In meinem Spiel geht es darum, mehrere Generatoren zu aktivieren, um die Kraft wiederherzustellen und zu entkommen. Ich möchte mein Spiel ein bisschen realistischer machen, also füge ich Benzinkanister hinzu, mit denen Sie die Generatoren aktivieren können. Ich brauche Hilfe bei der Erstellung eines Skripts, mit dem der Spieler Gasflaschen aufnehmen und damit die Generatoren aktivieren kann. Hier ist, was ich bisher:Zerstöre Pickup-Objekt OnMouseDown

public class GasCanisters : MonoBehaviour 

public GameObject Player; 
public GameObject[] GasCanisters; 
public AudioClip PickupSound; 

void Update() 
{ 
AudioSource.PlayClipAtPoint(PickupSound, transform.position); 

    if (Input.GetMouseButtonDown(0)) 
     { 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      RaycastHit hit; 
      if (Physics.Raycast(ray, out hit)) 
      { 
       if (hit.collider.CompareTag("Gas Canister")) 
    GameObject.Destroy(gameObject); 
       } 
} 

Wie Sie wahrscheinlich könnte sagen, ich bin ein sehr einfaches und schlechte Programmierer. Aber ich würde wirklich jede Hilfe, die ich dabei bekommen konnte, wirklich zu schätzen wissen.

+5

Was ist die Frage? Im Moment haben wir eine sehr vage Vorstellung von dem, was Sie fragen :) - funktioniert irgendetwas nicht? – Charleh

+1

Das einzige was ich bis jetzt bemerken kann ist, dass 'gameObject' (in der letzten Zeile) nicht definiert ist. Vielleicht meintest du 'Player' (was möglichst mit einem Kleinbuchstaben beginnen sollte, da es * kein * Konstruktor einer Klasse, sondern eine Variable ist). – hlfrmn

+1

@hlfrmn gameObject ist nicht undefiniert. Wenn Sie gameObject in einem Skript in unity eingeben, bezieht sich dies auf das gameObject, an das das Skript angehängt ist, das von MonoBehaviour geerbt wird. – Eddge

Antwort

1

OK, hier gibt es viel zu tun; Verwenden Sie als erstes kein Update, das jeden Frame unabhängig davon ausführt, ob Ihr Player in 1 Meter Entfernung oder 200 Meilen vom Kanister entfernt viel CPU-Zeit verschwendet. Verwenden Sie stattdessen OnMouseOver. Stellen Sie sicher, haben Sie einen collider auf Ihrem Kanister dann fügen Sie ein Skript mit so etwas wie:

void OnMouseOver() 
{ 
    if(Input.GetButtonDown) 
    { 
     transform.SetParent(yourPlayersHand.transform); 
     transform.localPosition = Vector3.Zero; 
     transform.localRotation = Quaterion.Identity; 
    } 
} 

Dies wird ‚anhängen‘, um den Kanister zu Ihren Spielern die Hand. Vielleicht möchten Sie mit der Position & Orientierung giddle, um es richtig aussehen zu lassen.

Zweitens benötigen Sie eine Möglichkeit, den Kanister zu identifizieren, der einfachste Weg wäre, eine tag hinzuzufügen.

Als Nächstes fügen Sie ein ähnliches Skript mit dem Generator zu tun, was Sie wollen, so etwas wie:

void OnMouseOver() 
{ 
    if(Input.GetButtonDown) 
    { 
     if(yourPlayersHand.transform.GetChild(0).tag == "canister") 
     { 
      // your code for what happens 
     } 
    } 
} 
Verwandte Themen