Ich versuche einen Level-Editor zu erstellen, wo der Benutzer klicken kann, wo er eine Kachel platzieren möchte. Hier ist der Code:Wie platziere ich Kacheln mit der Mausposition in Unity?
using UnityEngine;
using System.Collections;
public class TilePlacement : MonoBehaviour {
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
if (Input.GetMouseButtonDown (0)) {
var clickPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f);
clickPos = Camera.main.ScreenToWorldPoint (clickPos);
clickPos.z = 0f;
clickPos.x = Mathf.FloorToInt (clickPos.x);
clickPos.y = Mathf.FloorToInt (clickPos.y);
clickPos.x /= 3.2f;
clickPos.y /= 3.2f;
clickPos.x = Mathf.Round (clickPos.x);
clickPos.y = Mathf.Round (clickPos.y);
clickPos.x *= 3.2f;
clickPos.y *= 3.2f;
var go = new GameObject();
go.AddComponent<SpriteRenderer>();
go.GetComponent<SpriteRenderer>().sprite = Sprite.Create(new Texture2D(32, 32), new Rect(0, 0, 32, 32), new Vector2(0, 0));
go.transform.localScale = new Vector3 (10f, 10f, 0f);
go.transform.position = clickPos;
}
}
}
Dieser Code funktioniert für Fliesen platzieren, aber der Benutzer hat in der unteren linken Ecke einer Fliese und die Formel für die Änderung clickPos klicken scheint zu kompliziert und ich denke, es gibt einen besseren Weg TU es. Bitte helfen Sie mir, diese beiden Probleme zu beheben
Ich mache es in 2D mit ortho-Kamera, aber das Problem ist, meine Objekte sind 10, 10, 1 im Maßstab, aber sie sind 3,2 Einheiten breit wegen ihrer Pixelzahl –
Ich glaube, es am bequemsten sein, wenn Sie sie machen würden alle Maßstäbe 1, 1, 1 und dann ändern Sie die Pixel pro Unity in den Importeinstellungen, damit sie zu einer Einheit passen. Wenn dein Sprite also 32 x 32 Pixel groß ist, setze Pixels Per Unity auf 32 und skaliere auf 1 und sie passen perfekt in eine Unity-Gitterzelle. Dies vereinfacht Ihre Berechnungen, wenn Sie Probleme beim Konvertieren zwischen verschiedenen Skalen haben. – Xarbrough
Vielen Dank für Ihre Antwort! –