using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestBounds : MonoBehaviour { private SpriteRenderer sprRender; public GameObject Button; public Camera UICamera; private Material selectMat; private Material sharedMat; // Start is called before the first frame update void Start() { sprRender = this.GetComponentInChildren(); sharedMat = sprRender.sharedMaterial; selectMat = new Material(Shader.Find("PeachValley/GameObject")); Debug.LogError($"mat same with ori shared:{selectMat == sharedMat }"); Debug.LogError($"shared same with mat:{selectMat == sprRender.sharedMaterial }"); // sprRender.material = sharedMat; //Debug.LogError($"after sharedMat: {sprRender.material == sprRender.sharedMaterial }"); Debug.LogError("============"); //Debug.LogError(sprRender.sprite.border); //Debug.LogError(sprRender.sprite.bounds); //Debug.LogError(sprRender.bounds); Bounds bounds = sprRender.sprite.bounds; Vector4 border = sprRender.sprite.border; Vector2 minPos = sprRender.transform.TransformPoint(bounds.center - new Vector3(bounds.extents.x - border.x / sprRender.sprite.pixelsPerUnit, bounds.extents.y - border.y / sprRender.sprite.pixelsPerUnit)); Vector2 maxPos = sprRender.transform.TransformPoint(bounds.center + new Vector3(bounds.extents.x - border.z / sprRender.sprite.pixelsPerUnit, bounds.extents.y - border.w / sprRender.sprite.pixelsPerUnit)); Vector2 midPos = (minPos + maxPos) / 2; //Debug.LogError("worldPos:" + minPos + "|" + maxPos); Vector2 midLeft = new Vector2(minPos.x, midPos.y); //minPos = RectTransformUtility.WorldToScreenPoint(UICamera, minPos); //Debug.LogError("screenPos:" + minPos + "|" + maxPos); // minPos = Canvas.transform.TransformPoint(minPos); //Debug.LogError("uiPos:" + minPos + "|" + maxPos); var trans = Button.GetComponent(); //trans.anchoredPosition = trans.InverseTransformPoint(minPos); trans.position = midLeft; } // Update is called once per frame void Update() { if (Input.GetKeyUp(KeyCode.K)) { if (sprRender != null) { selectMat.EnableKeyword("_EFFECT_EDGE_ON"); sprRender.material = selectMat; if (sprRender.material == selectMat) { Debug.LogError("Same mat"); } // sprRender.material.EnableKeyword("_EFFECT_EDGE_ON"); } } if (Input.GetKeyUp(KeyCode.L)) { // sprRender.material.DisableKeyword("_EFFECT_EDGE_ON"); sprRender.sharedMaterial = sharedMat; } } void OnDrawGizmos() { // sprRender = this.GetComponent(); if (sprRender != null) { Bounds bounds = sprRender.sprite.bounds; Vector4 border = sprRender.sprite.border; Vector2 minPos = sprRender.transform.TransformPoint(bounds.center - new Vector3(bounds.extents.x - border.x/sprRender.sprite.pixelsPerUnit, bounds.extents.y - border.y / sprRender.sprite.pixelsPerUnit)); Vector2 maxPos = sprRender.transform.TransformPoint(bounds.center + new Vector3(bounds.extents.x - border.z / sprRender.sprite.pixelsPerUnit, bounds.extents.y - border.w / sprRender.sprite.pixelsPerUnit)); Debug.DrawLine(minPos, maxPos); //Vector3 lt = bounds.min + new Vector3(0, bounds.size.y, 0); //Vector3 rb = bounds.max + new Vector3(0, -bounds.size.y, 0); //Debug.DrawLine(bounds.min, lt); //Debug.DrawLine(lt, bounds.max); //Debug.DrawLine(bounds.max, rb); //Debug.DrawLine(bounds.min, rb); } } }