- Home /
Problem in adaptation code vector3 for vector2
I found a web script to create gizmo at runtime. The script is for 3d, vector3, but I adapted it for my project which is in 2d. As it shows in the console of the Unity, there is no error, but when I play play simply looks like in the image, I can not move the gizmo, simply nothing happens! Previously it worked in 3d, but when I adapted it to 2d it does not work, it just stands still. What can I do to make it work?
GizmoTranslateScript:
using UnityEngine;
using System.Collections;
public class GizmoTranslateScript : MonoBehaviour {
public GameObject xAxisObject;
public GameObject yAxisObject;
public GameObject translateTarget;
private GizmoClickDetection[] detectors;
public void Awake() {
detectors = new GizmoClickDetection[3];
detectors[0] = xAxisObject.GetComponent<GizmoClickDetection>();
detectors[1] = yAxisObject.GetComponent<GizmoClickDetection>();
transform.position = translateTarget.transform.position;
}
public void Update() {
for (int i = 0; i < 2; i++) {
if (Input.GetMouseButton(0) && detectors[i].pressing) {
float distance = Vector2.Distance(Camera.main.transform.position, translateTarget.transform.position);
distance = distance * 2.0f;
Vector2 offset = Vector2.zero;
switch (i) {
case 0:
{
if (detectors[i].pressingPlane) {
float deltaY = Input.GetAxis("Mouse Y") * (Time.deltaTime * distance);
offset = Vector2.up * deltaY;
offset = new Vector2(0.0f, offset.y);
translateTarget.transform.Translate(offset);
} else {
float delta = Input.GetAxis("Mouse X") * (Time.deltaTime * distance);
offset = Vector2.left * delta;
offset = new Vector2(offset.x, 0.0f);
translateTarget.transform.Translate(offset);
}
}
break;
case 1:
{
if (detectors[i].pressingPlane) {
float deltaX = Input.GetAxis("Mouse X") * (Time.deltaTime * distance);
offset = Vector2.left * deltaX;
offset = new Vector2(offset.x, 0.0f);
translateTarget.transform.Translate(offset);
} else {
float delta = Input.GetAxis("Mouse Y") * (Time.deltaTime * distance);
offset = Vector2.up * delta;
offset = new Vector2(0.0f, offset.y);
translateTarget.transform.Translate(offset);
}
}
break;
case 2:
{
if (detectors[i].pressingPlane) {
float deltaX = Input.GetAxis("Mouse X") * (Time.deltaTime * distance);
offset = Vector2.left * deltaX;
offset = new Vector2(offset.x, 0.0f);
translateTarget.transform.Translate(offset);
float deltaY = Input.GetAxis("Mouse Y") * (Time.deltaTime * distance);
offset = Vector2.up * deltaY;
offset = new Vector2(0.0f, offset.y);
translateTarget.transform.Translate(offset);
}
}
break;
}
transform.position = translateTarget.transform.position;
break;
}
}
}
}
GizmoClickDetection:
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
public class GizmoClickDetection : MonoBehaviour {
public static bool ALREADY_CLICKED;
public Camera gizmoCamera;
public LayerMask gizmoLayer;
public GameObject[] targets;
public Material highlight;
public Dictionary<MeshRenderer, Material> previousMaterials;
[HideInInspector]
public bool pressing = false;
[HideInInspector]
public bool pressingPlane = false;
public void Awake() {
previousMaterials = new Dictionary<MeshRenderer, Material>();
}
public void Update () {
if (!ALREADY_CLICKED && Input.GetMouseButtonDown(0)) {
Ray ray = gizmoCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hits = Physics.RaycastAll(ray, gizmoLayer);
bool detected = false;
pressingPlane = false;
foreach (RaycastHit hit in hits) {
if (Array.IndexOf(targets, hit.collider.gameObject) >= 0) {
if (!hit.collider.gameObject.GetComponent<Renderer>().enabled) continue;
if (hit.collider.gameObject.name.Contains("_plane_")) pressingPlane = true;
detected = true;
pressing = true;
}
}
if(detected) {
if(previousMaterials != null) previousMaterials.Clear();
foreach (GameObject target in targets) {
try {
foreach (MeshRenderer renderer in target.GetComponentsInChildren<MeshRenderer>(false)) {
previousMaterials[renderer] = renderer.sharedMaterial;
renderer.material = highlight;
}
} catch (NullReferenceException exception) {
}
}
ALREADY_CLICKED = true;
}
} else if(Input.GetMouseButtonUp(0) && previousMaterials.Count > 0) {
foreach (MeshRenderer renderer in previousMaterials.Keys) {
renderer.material = previousMaterials[renderer];
}
previousMaterials.Clear();
pressing = false;
pressingPlane = false;
ALREADY_CLICKED = false;
}
}
}
testegizmo.png
(121.3 kB)
Comment