Jump to content
Unity Insider Forum

Kamerabewegung mit der Maus -> Skript C#


eSo

Recommended Posts

Ich bin ganz neu hier im Forum und ich versuche Schritt für Schritt eins Unity rein zu arbeiten.

Aktuell habe ich ein Thema bei dem ich gerade nicht weiter komme.

Ich möchte eine Kamerasteuerung wie beispielsweise in Spielen wie Anno.

Also:

  1. Mauszeiger am Bildschirmrand verschiebt die Kamera
  2. Mausrad zoomt rein und raus

 

Ich kenn mich beim Programmieren noch nicht so gut aus.

Mir fehlen grad die Programmteile wie zum Beispiel ein Befehl für den Bildschirmrand, wie man die Kamera per Code bewegt usw. Hat jemand zufällig schon eine funktionierende Skript?

 

Ich freu mich über jede Hilfe und jeden Tipp.

Viele Grüße

eSo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier ein Beispiel Code (einfach dieses Script auf die Main Camera legen):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseMovement : MonoBehaviour
{
	public float zoomZpeed = 2;
	public float scrollSpeed = 110;
	public Vector2 zoomRange = new Vector2(40, 100);
	public float initialZoom = 40;
	
	private Vector2 _zoomAngleRange = new Vector2(20, 70);
	private float _zoomRotation = 1;
	private Vector3 _initialPosition;
	private Vector3 _initialRotation;

	void Start()
	{
		_initialPosition = transform.position;
		_initialRotation = transform.eulerAngles;
	}

	void Update()
	{
		if (Input.GetKey("w") || Input.mousePosition.y >= Screen.height * 1)
		{
			transform.position += Vector3.forward * scrollSpeed * Time.deltaTime;
		}
		else if (Input.GetKey("s") || Input.mousePosition.y <= Screen.height * 0)
		{
			transform.position += Vector3.forward * -scrollSpeed * Time.deltaTime;
		}

		if (Input.GetKey("a") || Input.mousePosition.x <= Screen.width * 0)
		{
			transform.position += Vector3.right * -scrollSpeed * Time.deltaTime;
		}
		else if (Input.GetKey("d") || Input.mousePosition.x >= Screen.width * 1)
		{
			transform.position += Vector3.right * scrollSpeed * Time.deltaTime;
		}

		initialZoom -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 1000 * zoomZpeed;

		initialZoom = Mathf.Clamp(initialZoom, zoomRange.x, zoomRange.y);

		transform.position = new Vector3(transform.position.x, transform.position.y - (transform.position.y - (_initialPosition.y + initialZoom)) * 0.1f, transform.position.z);

		float x = transform.eulerAngles.x - (transform.eulerAngles.x - (_initialRotation.x + initialZoom * _zoomRotation)) * 0.1f;

		x = Mathf.Clamp(x, _zoomAngleRange.x, _zoomAngleRange.y);

		transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
	}
}
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 35 Minuten schrieb Sascha:

Input.mousePosition.y >= Screen.height * 1)
Input.mousePosition.y <= Screen.height * 0)

Darüber würde ich nochmal nachdenken wollen ;)

 Stimmt natürlich, kann so ersetzt werden (ist nur noch übrig geblieben )

Screen.height * 1 = Screen.height

Screen.height * 0 = 0

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist die eine Sache. Die andere ist, dass bei einem Fullscreen-Spiel auf einem Bildschirm eine der beiden Bedingungen nie wahr sein kann. Bei 1920 Pixeln geht's in der Breite von 0 bis 1919. Man muss also beim >=-Fall mindestens 1 auf der rechten Seite abziehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb Sascha:

Das ist die eine Sache. Die andere ist, dass bei einem Fullscreen-Spiel auf einem Bildschirm eine der beiden Bedingungen nie wahr sein kann. Bei 1920 Pixeln geht's in der Breite von 0 bis 1919. Man muss also beim >=-Fall mindestens 1 auf der rechten Seite abziehen.

Ok das werde ich mir heute nochmals ansehen, habe es noch nicht auf Fullscreen getestet.

Vielen Dank für dein Tipp

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Stunden schrieb Varhius:

Hier ein Beispiel Code (einfach dieses Script auf die Main Camera legen):


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseMovement : MonoBehaviour
{
	public float zoomZpeed = 2;
	public float scrollSpeed = 110;
	public Vector2 zoomRange = new Vector2(40, 100);
	public float initialZoom = 40;
	
	private Vector2 _zoomAngleRange = new Vector2(20, 70);
	private float _zoomRotation = 1;
	private Vector3 _initialPosition;
	private Vector3 _initialRotation;

	void Start()
	{
		_initialPosition = transform.position;
		_initialRotation = transform.eulerAngles;
	}

	void Update()
	{
		if (Input.GetKey("w") || Input.mousePosition.y >= Screen.height * 1)
		{
			transform.position += Vector3.forward * scrollSpeed * Time.deltaTime;
		}
		else if (Input.GetKey("s") || Input.mousePosition.y <= Screen.height * 0)
		{
			transform.position += Vector3.forward * -scrollSpeed * Time.deltaTime;
		}

		if (Input.GetKey("a") || Input.mousePosition.x <= Screen.width * 0)
		{
			transform.position += Vector3.right * -scrollSpeed * Time.deltaTime;
		}
		else if (Input.GetKey("d") || Input.mousePosition.x >= Screen.width * 1)
		{
			transform.position += Vector3.right * scrollSpeed * Time.deltaTime;
		}

		initialZoom -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 1000 * zoomZpeed;

		initialZoom = Mathf.Clamp(initialZoom, zoomRange.x, zoomRange.y);

		transform.position = new Vector3(transform.position.x, transform.position.y - (transform.position.y - (_initialPosition.y + initialZoom)) * 0.1f, transform.position.z);

		float x = transform.eulerAngles.x - (transform.eulerAngles.x - (_initialRotation.x + initialZoom * _zoomRotation)) * 0.1f;

		x = Mathf.Clamp(x, _zoomAngleRange.x, _zoomAngleRange.y);

		transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
	}
}

Vielen Dank für die schnelle Antwort und Hilfe, wenn ich zu Hause bin probiere ich es mal aus :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Varhius:

Ok das werde ich mir heute nochmals ansehen, habe es noch nicht auf Fullscreen getestet.

Vielen Dank für dein Tipp

Ich würde die mit 1919 umändern, wenn es nicht geht kann ich dich nochmal anschreiben? 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...