2017-06-26 5 views
1

Ich habe vor kurzem angefangen zu lernen, in C# für Unity zu programmieren; Im folgenden Skript wird versucht, ein Objekt (Feind) basierend auf der Position der Maus zu aktivieren und zu deaktivieren.C# Einheit If-Anweisung Logik

Das Problem ist, der Code funktioniert gut in die Aktivierung des Objekts, aber ich kann nicht herausfinden, wie Sie es deaktivieren, sobald es aktiviert ist, so dass das Objekt erscheint und verschwindet, wie die Maus hin und her - rein und raus der Reichweite. Bitte lassen Sie mich wissen, wenn Sie eine Lösung haben. Vielen Dank!

using UnityEngine; 
using System.Collections; 

public class Paddle : MonoBehaviour 
{ 

    public GameObject enemy; 

    // Use this for initialization 
    void Start() 
    { 

     enemy.SetActive(false); 
    } 

    // Update is called once per frame 
    void Update() 
    { 

     Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f); 

     float mousePosInBlocks = Input.mousePosition.x/Screen.width * 16; 

     paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f); 

     this.transform.position = paddlePos; 

     if (mousePosInBlocks < 6f) 
     { 
      print("1"); 

     } 
     else if (mousePosInBlocks <= 6.5f) 
     { 
      print("2"); 

      enemy.SetActive(true); 


     } 
     else if (mousePosInBlocks <= 7.5f) 
     { 
      print("3"); 

     } 
     else 
     { 
      print("4"); 
     } 
    } 
} 
+0

Behinderte bleiben ' Die Methode start() 'wird automatisch aufgerufen, wenn die Szene mit dem Objekt beginnt. 'Update()' wird in jedem Frame ausgeführt. Du deaktivierst den Feind, wenn die Szene (oder das Objekt) erstellt wird. Wenn mousePosInBlocks gleich oder kleiner als 6,5 ist, aktivierst du es. Sie könnten ein 'Debug.Log (mousePosInBlocks)' machen, wenn Sie sich über den Wert von mousePosInBlocks nicht sicher sind – Maakep

Antwort

4

Wie werden Sie das Objekt erwartet deaktiviert zu werden, wenn Sie nie enemy.SetActive(false); Aufruf sind? Es wird nur in Ihrer Start Methode aufgerufen, aber dies wird durch enemy.SetActive(true); überschrieben, die in der Update Methode jedes Bild aufgerufen wird.

Ich bin mir nicht sicher, wenn Ihr Objekt sollte deaktiviert werden, aber fügen Sie einfach enemy.SetActive(false); in der jeweiligen if-Anweisung.

1

Sie müssen die Codezeile hinzufügen, um das Objekt in Ihrer Update-Klasse zu deaktivieren, da Sie sagten, dass es deaktiviert werden sollte, wenn Sie die Maus aus dem Bereich bewegen, ich vermute, die Zeile sollte in Ihrem anderen Statement

gehen
using UnityEngine; 
using System.Collections; 

public class Paddle : MonoBehaviour 
{ 

    public GameObject enemy; 

    // Use this for initialization 
    void Start() 
    { 

     enemy.SetActive(false); 
    } 

    // Update is called once per frame 
    void Update() 
    { 

     Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f); 

     float mousePosInBlocks = Input.mousePosition.x/Screen.width * 16; 

     paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f); 

     this.transform.position = paddlePos; 

     if (mousePosInBlocks < 6f) 
     { 
      print("1"); 

     } 
     else if (mousePosInBlocks <= 6.5f) 
     { 
      print("2"); 

      enemy.SetActive(true); 


     } 
     else if (mousePosInBlocks <= 7.5f) 
     { 
      print("3"); 

     } 
     else 
     { 
      enemy.SetActive(false); 
      print("4"); 
     } 
    } 
} 

In jedem Fall, dass Sie nur enemy.SetActive(false); innerhalb der if, if-else oder sonst statament hinzufügen müssen, stellen Sie sicher, dass es im Inneren ist es, sonst wird es bei jedem Frame aufgerufen und es wird