Bei rechtsklick Objekt platzieren - Unity 3D?

2 Antworten

Mit GetMouseButtonDown kannst du ermitteln, ob und welche Maustaste gedrückt wurde.

void Update()
{
  if (Input.GetMouseButtonDown(1))
  {
    // right mouse button was clicked ...
  }
}

Über Input.mousePosition gelangst du an die aktuellen Koordinaten des Mauszeigers. Diese müssen noch umgerechnet werden, sodass du die Koordinaten in Relation zur Spielwelt bekommst.

Das könnte ungefähr so aussehen:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 position;

if (yourPlane.Raycast(ray, out float distance))
{
  position = ray.GetPoint(distance);
  // ...
}

Andere Verfahrensweisen (wie du bspw. einen Mausklick auf einem Terrain ermittelst) kannst du hier nachlesen.

Ein GameObject kannst du mittels seines Konstruktors kreieren und anschließend über dessen transform-Property bewegen.

Besser wäre aber vermutlich ein Prefab, welches sich mit der Instantiate-Methode erstellen und gleich auch an die entsprechende Startposition setzen lässt.

mprex 
Fragesteller
 11.07.2021, 13:23

Hab es jetzt so gemacht, aber "Plane.Raycast" und "position" markiert er mir als Fehler:

void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Plane.Raycast(ray, out float distance))
            {
                position = ray.GetPoint(distance);
                // ...
            }
        }
    }
0
regex9  11.07.2021, 19:48
@mprex

Plane muss eine Variable sein, die auf deine Plane verweist. Für position fehlt eine Deklaration.

0

Ich hab es nicht getestet:

void Update()
{
    Ray ray = Camera.main.ScreenPointToRay(input.mousePosition);
    if(Physics.Raycast(ray, out var hit) && Input.GetMouseButtonDown(1))
        {
            Vector3 blockPosition = hit.transform.position + hit.normal;
            GameObject Cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            Cube.transform.position = blockPosition;
        }
}