• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Due problemi con Unity
#1
Lo so che vi sto tartassando di domande, ma visto che nemmeno il forum ufficiale di Unity mi risponde allora sono sempre costretto a rompervi le palle  Big Grin

PROBLEMA 1:
Ho creato un trigger che fa partire un susseguirsi di animazioni e di rotazioni della MainCamera. Il problema è che al momento della fine di tutti questi eventi vorrei che la MainCamera si posizionasse in una posizione diversa da quella iniziale, ma così non accade. Credo di aver individuato già il problema: quando accadono questi eventi ho imposto che la MainCamera rimanga bloccata, ovvero bool blockCamera = true, ma quando finisce tutto la MainCamera potrà di nuovo muoversi, ovvero bool blockCamera false, tuttavia nel momento in cui la MainCamera viene sbloccata, essa ritornerà con la stessa rotazione di partenza e questo causa molti problemi. A questo punto visto che, secondo me, il problema risiede nello script della MainCamera allora ve lo faccio vedere:

Codice:
using UnityEngine;
using System.Collections;

public class CameraMouseLook : MonoBehaviour {

    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }

    public RotationAxes axes = RotationAxes.MouseXAndY;

    public float sensitivityX = 15F;
    public float sensitivityY = 15F;
    public float minimumX = -360F;
    public float maximumX = 360F;
    public float minimumY = -60F;
    public float maximumY = 60F;
    
    float rotationX = 0F;
    float rotationY = 0F;

    Quaternion originalRotation;

    public Transform lookObject = null;

    public bool lookAtThing = false;
    public bool blockCamera = false;
    public bool showCrosshair = true;

    void Update ()
    {
        if (blockCamera == false)
        {
            if (axes == RotationAxes.MouseXAndY)
            {
                rotationX += Input.GetAxis ("Mouse X") * sensitivityX;
                rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
            
                rotationX = ClampAngle (rotationX, minimumX, maximumX);
                rotationY = ClampAngle (rotationY, minimumY, maximumY);
            
                Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
                Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, -Vector3.right);
            
                transform.localRotation = originalRotation * xQuaternion * yQuaternion;

            } else if (axes == RotationAxes.MouseX) {
                rotationX += Input.GetAxis ("Mouse X") * sensitivityX;
                rotationX = ClampAngle (rotationX, minimumX, maximumX);
            
                Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
                transform.localRotation = originalRotation * xQuaternion;

            } else {
                rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
                rotationY = ClampAngle (rotationY, minimumY, maximumY);
            
                Quaternion yQuaternion = Quaternion.AngleAxis (-rotationY, Vector3.right);
                transform.localRotation = originalRotation * yQuaternion;
            }
        }
        if (lookAtThing == true)
        {
            transform.LookAt (lookObject);
        }
        if (lookAtThing == false)
        {
            transform.LookAt (null);
        }
    }
    
    void Start ()
    {
        originalRotation = transform.localRotation;
    }
    
    public static float ClampAngle (float angle, float min, float max)
    {
        if (angle < -360F)
        {
            angle += 360F;
        }
        if (angle > 360F)
        {
            angle -= 360F;
        }
        return Mathf.Clamp (angle, min, max);
    }

    public void LookAt ()
    {
        lookAtThing = true;
    }

    public void StopLookAt ()
    {
        lookAtThing = false;
    }

    public void BlockCamera ()
    {
        blockCamera = true;
    }

    public void UnblockCamera ()
    {
        blockCamera = false;
    }

    void OnGUI()
    {
        Crosshair_Changes script = GetComponent<Crosshair_Changes> ();
        Texture icon = script.crosshair;

        if (showCrosshair == true)
        {
            GUI.DrawTexture (new Rect ((Screen.width - icon.width) / 2, (Screen.height - icon.height) / 2, icon.width, icon.height), icon);
        }
    }
}

PROBLEMA 2:
Adesso mi sto occupando dei vari "crosshair", infatti vorrei che inizialmente il crosshair sia solo un pallino al centro, ma quando il Player guarderà verso degli oggetti interagenti allora il crosshair cambierà. Ad esempio ho creato delle porte che, se guardate, faranno variare il crosshair. Tuttavia ho notato che questo script funziona solo per una porta: ho provato a mettere tre porte uguali e con lo stesso script nella scena, ma solamente una di queste farà variare il crosshair. Qua non ho assolutissimamente capito il motivo, infatti vi farò vedere i tre script incriminati: il primo è quello della MainCamera che ho messo qua sopra e infatti si nota il void OnGUI (); il secondo è messo sotto ed è lo script che permette la variazione di crosshair; l'ultimo è solo una parte dello script delle porte che fa vedere quando il crosshair deve cambiare.
Codice:
using UnityEngine;
using System.Collections;

public class Crosshair_Changes : MonoBehaviour {

    public Texture lookNothing;
    public Texture lookOpenableDoor;

    public Texture crosshair = null;

    private bool openableDoor;

    void Awake ()
    {
        crosshair = lookNothing;
    }
        
    void Update ()
    {
        if (openableDoor == true)
        {
            crosshair = lookOpenableDoor;
        }
        else
        {
            crosshair = lookNothing;
        }
    }

    public void ViewOpenableDoor ()
    {
        openableDoor = true;
    }

    public void StopViewOpenableDoor ()
    {
        openableDoor = false;
    }
}

Codice:
void Update ()
    {
        RaycastHit hit;
        ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));

        Crosshair_Changes scriptCam = Camera.main.GetComponent<Crosshair_Changes> ();

        if (interaction == true && Physics.Raycast (ray, out hit) && animationStop == true && hit.transform.name == name)
        {
            scriptCam.ViewOpenableDoor ();

            if (locked == false)
            {
                if (Input.GetKeyDown ("e"))
                {
                    changeDoorState ();
                }
            }
            else if (locked == true && isBreaking == false)
            {
                if (Input.GetKeyDown ("e"))
                {

                }
            }
            else if (locked == true && isBreaking == true)
            {
                if (Input.GetKeyDown ("e"))
                {
                    Breaking_Rotating_Handle breakScript = handle.GetComponent<Breaking_Rotating_Handle> ();
                    breakScript.breakHandle ();
                }
            }
        }
        else
        {
            scriptCam.StopViewOpenableDoor ();
        }
    }


Scusate per il topic chilometrico ma ho preferito creare un topic per due problemi anziché due topic per ognuno. Spero che possiate aiutarmi  Rolleyes
 
Rispondi
  


Messaggi in questa discussione
Due problemi con Unity - da 93sunderland - 16-04-2016, 09:25 AM
RE: Due problemi con Unity - da Blackg96 - 16-04-2016, 11:46 AM
RE: Due problemi con Unity - da 93sunderland - 16-04-2016, 12:17 PM
RE: Due problemi con Unity - da 93sunderland - 17-04-2016, 01:27 PM
RE: Due problemi con Unity - da alessiobb3b - 18-04-2016, 02:52 PM
RE: Due problemi con Unity - da 93sunderland - 19-04-2016, 07:27 AM
RE: Due problemi con Unity - da 93sunderland - 19-04-2016, 09:06 AM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  problema con unity non spara thespeedkiller01 0 244 21-05-2017, 10:15 PM
Ultimo messaggio: thespeedkiller01
  Informazioni creazione videogioco con unity Fabrysmock 9 701 01-03-2017, 07:41 PM
Ultimo messaggio: Fabrysmock
  Help ADS/pubblicità con Unity Parzival 2 414 21-02-2017, 10:53 PM
Ultimo messaggio: Parzival
Sad Problemi nel build del gioco MrCraft99x5 1 491 19-02-2016, 09:06 AM
Ultimo messaggio: Master Gabriel
Wink Problemi di assi su Unity alessiobb3b 9 881 12-01-2016, 10:28 PM
Ultimo messaggio: alessiobb3b
  Errore nell'importazione di un FBX creato con Cinema4D in Unity SteeBono 4 813 22-10-2015, 12:28 PM
Ultimo messaggio: SteeBono
  Luci pesanti su gioco VR per Android con Unity Refref1990 1 780 13-08-2015, 11:20 PM
Ultimo messaggio: eoasier
  Problemi con personaggio catun22 6 1,287 21-12-2014, 11:05 AM
Ultimo messaggio: Master Gabriel
  dubbio su tipologia di gioco con unity catun22 5 1,191 02-09-2013, 11:11 AM
Ultimo messaggio: yuriiacuzzo
  problema chiamata void in due script adriqueru99 5 953 04-07-2013, 10:51 AM
Ultimo messaggio: adriqueru99

Vai al forum:


Browsing: 1 Ospite(i)