• Benvenuto in Making Videogames!
  • Condividi la tua passione!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati



Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Title: Button onClick su Prefabs creato
Modi discussione
#1
Ciao a tutti,
Mi sto esercitando un pò con Unity3D ( da premettere che sono ancora alle prime armi ) e vorrei avere qualche consiglio su come applicare una funzionalità.

Durante il gioco, ogni volta che clicco su un'immagine istanzio un oggetto Prefabs sulla scena. 
Al click sul Prefabs ( con Physics.Raycast riesco a capire su qualche oggetto mi trovo), faccio apparire un Cavas che contiene un Panel con 4 bottoni (sinistra,destra,avanti,indietro).

Adesso, cliccando su questi bottoni vorrei cambiare la posizione del transform recuperato in precedenza. Come posso passare al bottone il riferimento del Prefabs recuperato col Physics.Raycast? 

Spero abbiate capito il mio problema
Vi ringrazio anticipatamente.

Ciao
GrayDiamond
 
Reply
#2
Ciao GrayDiamond,  

ti propongo questo metodo, funziona ma non è detto sia il più efficiente (non sono un programmatore):
Codice:
using UnityEngine;
using UnityEngine.UI;

public class Controller : MonoBehaviour
{
   public GameObject cubePrefab;

   public Button spawnButton;

   [HideInInspector]
   public Transform currentCube;

   public GameObject ctrlPanel;

   public Button Up, Left, Right, Down;

   public float speed;

   private void Start()
   {
       spawnButton = spawnButton.GetComponent<Button>();
       spawnButton.onClick.AddListener(Spawn);
   }

   void Update()
   {
       if (Input.GetMouseButtonDown(0))
       {
           RaycastHit hit;
           Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
           if (Physics.Raycast(ray, out hit, 100.0f))
           {
               currentCube = hit.transform;

               if (!ctrlPanel.activeSelf)
               {
                   ctrlPanel.SetActive(true);
               }
           }
       }

       Up.onClick.AddListener(GoUp);
       Left.onClick.AddListener(GoLeft);
       Right.onClick.AddListener(GoRight);
       Down.onClick.AddListener(GoDown);
   }

   void Spawn()
   {
       Instantiate(cubePrefab, new Vector3(0f, 0f, 0f), Quaternion.identity);
   }

   void GoUp()
   {
       currentCube.position = Vector3.MoveTowards(currentCube.position, new Vector3(currentCube.position.x, currentCube.position.y, currentCube.position.z + speed), Time.deltaTime);
   }
   void GoLeft()
   {
       currentCube.position = Vector3.MoveTowards(currentCube.position, new Vector3(currentCube.position.x - speed, currentCube.position.y, currentCube.position.z), Time.deltaTime);
   }
   void GoRight()
   {
       currentCube.position = Vector3.MoveTowards(currentCube.position, new Vector3(currentCube.position.x + speed, currentCube.position.y, currentCube.position.z), Time.deltaTime);
   }
   void GoDown()
   {
       currentCube.position = Vector3.MoveTowards(currentCube.position, new Vector3(currentCube.position.x, currentCube.position.y, currentCube.position.z - speed), Time.deltaTime);
   }
}

Per comodità ho messo lo script nell'oggetto Canvas, assegnando poi i riferimenti da Inspector.

Il monolite (mettere tutto in un solo script) è una soluzione che ai programmatori non piace, ma per cosine così penso si possa fare, risparmia la noia di inserire riferimenti da ogni parte.

Tutto in uno  Big Grin
 
Reply
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Creare un button da una Sprite miccinov 1 436 13-04-2019, 08:47 AM
Ultimo messaggio: miccinov
  Errore nell'importazione di un FBX creato con Cinema4D in Unity SteeBono 4 1,148 22-10-2015, 12:28 PM
Ultimo messaggio: SteeBono
  Script C# problema GUI.Button Requiem99 3 925 30-04-2014, 07:43 PM
Ultimo messaggio: adriqueru99
  Problema con prefabs Valerio223 4 1,338 22-06-2012, 09:18 PM
Ultimo messaggio: Valerio223

Vai al forum:


Browsing: 1 Ospite(i)