UGUI中的從一點(diǎn)拉出直線的效果

image.png

從image2拉出一條直線

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Vectrosity;

public class lineTOpoint : MonoBehaviour {


    public GameObject point1, point2;
    public RectTransform line;
    void Start() {
        Vector3 d;
        if (point2.transform.localPosition.x >= point1.transform.localPosition.x)
        {
            d = point2.transform.localPosition - point1.transform.localPosition;
        }
        else
        {
            d = point1.transform.localPosition - point2.transform.localPosition;
        }

        Debug.LogError(transform.GetComponentsInChildren<Transform>().Length);

        Debug.LogError("Quaternion.Euler=" + Quaternion.Euler(d));
        line.transform.localRotation = Quaternion.Euler(0, 0, -getDir(point1.transform.localPosition, point2.transform.localPosition));
        line.transform.localPosition = midpoint(point1.transform.localPosition, point2.transform.localPosition);
        line.sizeDelta=new Vector2(221f, distance(point1.transform.localPosition, point2.transform.localPosition));
    }



    bool isStar = false;
    public void ClickDown()
    {
        isStar = true;
    }

    public void ClickUp()
    {
        isStar = false;
    }

    float getDir(Vector3 p1, Vector3 p2)
    {
        float radian = 0;
        Vector3 vector;
        if (p2.x >= p1.x)
        {
            vector = p2 - p1;
            float dot = Vector3.Dot(vector.normalized, new Vector3(0, 1, 0).normalized);
            radian = Mathf.Acos(dot) * Mathf.Rad2Deg;
        }
        else
        {
            vector = p1 - p2;
            float dot = Vector3.Dot(vector.normalized, new Vector3(0, 1, 0).normalized);
            radian = Mathf.Acos(dot) * Mathf.Rad2Deg + 180;
        }
        return radian;
    }

    Vector3 midpoint(Vector3 p1, Vector3 p2)
    { 
        return (p1+p2)/2;
    }

    float distance(Vector3 p1, Vector3 p2)
    {
        Vector3 d;
        d = p2 - p1;
        Debug.LogError("d.magnitude" + d.magnitude);
        return d.magnitude;
    }

    // Update is called once per frame
    void Update () {
        if (isStar)
        {
            var mousePos = transform.InverseTransformPoint(Input.mousePosition);
  
            line.transform.localRotation = Quaternion.Euler(0, 0, -getDir(point2.transform.localPosition, mousePos));
            line.transform.localPosition = midpoint(point2.transform.localPosition, mousePos);
            line.sizeDelta = new Vector2(221f, distance(point2.transform.localPosition, mousePos));

        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容