模型拆解 3d标注

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using Lovatto.OrbitCamera;
using DG;
using DG.Tweening;
using System.IO;
using UnityEngine.Experimental.GlobalIllumination;
public class main : MonoBehaviour
{
    // Start is called before the first frame update
    public Text txt1;
    public Text txt2;
    bool SplitModelBoo = false;
    public Animation _Animation;
    public AnimationClip[] clips;
    public bl_CameraOrbit _bl_CameraOrbit;
    bool AutoRoa = true;
    public GameObject Leftui;
    bool OpenLeftUiBoo = true;

    [SerializeField]
    Camera UI_Camera;//UI相机
    [SerializeField]
    Canvas ui_Canvas;

    [System.Serializable]
    public struct PointInfo
    {
        public GameObject Point3d;
        public string Title;
        public string Info;
    }
    public PointInfo[] _PointInfo = new PointInfo[3];
    public RectTransform Circle;
    public GameObject Tripmc;

    public Text Titletxt;
    public Text Infotxt;
    public int ShowinfoI;
    bool Showinfoboo = false;
    public RectTransform Line;
    public GameObject[] Uiall;
    int UiallIndex = 0;
    public GameObject RightModel;
    void Start()
    {
        ShowRightModel(false);
        HideInfo();
        HideUiall();
    }

    // Update is called once per frame
    void Update()
    {
        if (Showinfoboo) { 
            Vector2 mouseDown = Camera.main.WorldToScreenPoint(_PointInfo[ShowinfoI].Point3d.transform.position);
            Vector2 mouseUGUIPos = new Vector2();
            bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(ui_Canvas.transform as RectTransform, mouseDown, UI_Camera, out mouseUGUIPos);
            if (isRect)
            {                
                Circle.anchoredPosition = mouseUGUIPos;
            }
           //Line.anchoredPosition = mouseUGUIPos;

            CreateLine(Line.gameObject, mouseUGUIPos, Tripmc.GetComponent<RectTransform>().anchoredPosition3D);
        }
    }
    public void SplitModel(bool boo)
    {if (SplitModelBoo == boo) return;
        SplitModelBoo=boo;
        if (boo)
        {
            _Animation.clip = clips[0];
            AnimationState state = _Animation["Take 001"];
            state.speed = 1;
            _Animation.Play();
            txt1.text = "组合模型";
            
        }
        else
        {
            _Animation.clip = clips[0];
            AnimationState state = _Animation["Take 001"];
            state.speed = -1;
            _Animation.Play();
            txt1.text = "拆分模型";
            HideInfo();
        }
         
    }
    public void SplitModelLoop()
    {       
        SplitModel(!SplitModelBoo);
    }
    public void SetAutoRoa()
    {
        if (AutoRoa)
        {
            _bl_CameraOrbit.AutoRotate = true;
            txt2.text = "手动旋转";
        }
        else
        {
            _bl_CameraOrbit.AutoRotate = false;
            txt2.text = "自动旋转";
        }
        AutoRoa = !AutoRoa;
    }
    //public void OpenLeftUiLoop()
    //{
    //    OpenLeftUi(!OpenLeftUiBoo);
    //}
    public void ShowRightModel(bool boo) {
        RightModel.gameObject.SetActive(boo);
        if (boo)
        {
            _bl_CameraOrbit.gameObject.GetComponent<Camera>().orthographic = true;
        }
        else {
            _bl_CameraOrbit.gameObject.GetComponent<Camera>().orthographic = false;

        }    
    }
    public void HideUiall()
    { 
      for (int i = 0; i<Uiall.Length; i++) {
            Uiall[i].gameObject.SetActive(false);
        }
        ShowRightModel(false);
    }
    public void OpenUiall(int j)
    {
        if (j == 0)
        {
            ShowRightModel(false);
        }
        else {
            ShowRightModel(true);
        }
       
        UiallIndex = j;

        for (int i = 0; i < Uiall.Length; i++) {

            Uiall[i].gameObject.SetActive(i==j?true:false);
        }
        SplitModel(false);


    }
    public void Showinfo(int i) {
        
        Showinfoboo = true;
        Circle.gameObject.SetActive(true);
        Tripmc.gameObject.SetActive(true);
        Line.gameObject.SetActive(true);
        Titletxt.text = _PointInfo[i].Title;
        Infotxt.text = _PointInfo[i].Info;
        ShowinfoI = i;
        HideUiall();
    }
    public void HideInfo() {
        Showinfoboo = false;
        Circle.gameObject.SetActive(false);
        Tripmc.gameObject.SetActive(false);
        Line.gameObject.SetActive(false);
    }
    void CreateLine(GameObject line, Vector2 startPosition, Vector2 endPosition)
    {        

        var heading = endPosition - startPosition;
        var distance = heading.magnitude;
        var direction = heading / distance;

        RectTransform rtLine = line.GetComponent<RectTransform>();

        对齐左下角
        //rtLine.anchorMin = Vector2.zero;
        //rtLine.anchorMax = Vector2.zero;

        //计算线条位置
       // Vector2 centerPos = new Vector2(startPosition.x + endPosition.x, startPosition.y + endPosition.y) / 2;
        rtLine.anchoredPosition = startPosition;

        //计算线条角度
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        line.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
        rtLine.sizeDelta = new Vector2(distance, 5.0f);
    }
}
 

https://download.youkuaiyun.com/download/design888/89892924

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hquu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值