C# Unity Mausinput wird nicht erkannt

_Phoenix_

Cadet 3rd Year
Registriert
Juni 2020
Beiträge
38
Hallo ich habe im Rahmen eines kleinen Unity Projekts folgenden Code geschrieben:

C#:
using UnityEngine;

public class wereisclicked : MonoBehaviour
{
    // Start is called before the first frame update
    
    void Start()
    {
        Camera camera = Camera.main;
        transform.position = new Vector3(camera.aspect * camera.orthographicSize, camera.orthographicSize,0);
    }

    // Update is called once per frame
    void Update()
    {
        Camera camera = Camera.main;
        float camwidth = camera.aspect * camera.orthographicSize * 2;
        float camheight = camera.orthographicSize * 2;
        Rect Canvas = new Rect(0, 0, camwidth, camheight);

        Rect TicTacToefield = new Rect((camwidth / 2) - (camheight / 2), 0, camheight, camheight);
        
        if (Input.GetMouseButtonDown(0) && Canvas.Contains(Input.mousePosition))
        {
            Debug.Log("click");
        }
    }
}

Wenn ich aber während einer Runde auf den Bildschirm klicke passierst nicht, obwohl das das Rechteck genau an der selben Position ist wie die Kamera.
Wieso?
Wenn mich nicht alles täuscht sollte der doch "click" ausgeben!

MFG
Phoenix
 
camera.orthographicSize liefert keine Pixelangaben wie Input.mousePosition sondern gibt Units Values zurück. Canvas.Contains(Input.mousePosition) wird also nicht klappen. Die Unit Werte müssten da erst mit Camera.WorldToScreenPoint in Pixelwerte umgerechnet werden.
Was ist dein Ziel? Prüfen ob das Gameobject einen Mausklick erhält? Wenn es ein UI Objekt ist könntest du mit this.GetComponent<RectTransform>().rect dessen Rechteck verwenden. Oder gleich ordentlich ein IPointerDownHandler Event implementieren.

Ist es kein UI Objekt, sondern ein Teil der 3D Szene (was ich basierend auf deinem Code vermute), kannst du einen Boxcollider aufs Gameobject packen und den Klick mit OnMouseDown() abfangen. Oder einen Raycast drauf abfeuern.
 
Zuletzt bearbeitet:
Zurück
Oben