日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【常用】2DUI跟随3D物体移动(待修复)

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【常用】2DUI跟随3D物体移动(待修复) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class UImovePlusSample : MonoBehaviour {/// <summary>/// 3D物體/// </summary>public Transform rectBloodPos;public bool actived = false;public int btnpos;private float distance;public bool started = false;public void Start(){//開始時創建對應2d圖標。rectBloodPos.GetComponent<Button>().onClick.AddListener(SetActiveBool);rectBloodPos.transform.GetChild(0).GetComponent<Button>().onClick.AddListener(SetInActiveBool);if (gameObject.tag == "Replay"){Destroy(rectBloodPos.transform.GetChild(0).gameObject);}//---distance = Vector3.Distance(rectBloodPos.transform.position, Camera.main.transform.position);//---Text[] relist = rectBloodPos.GetComponentsInChildren<Text>(true);for (int i = 0; i < relist.Length; i++){if(relist[i].transform.parent.name=="Image")relist[i].text = gameObject.name;} }public bool IsInView(Vector3 worldPos){Transform camTransform = Camera.main.transform;Vector2 viewPos = Camera.main.WorldToViewportPoint(worldPos);Vector3 dir = (worldPos - camTransform.position).normalized;float dot = Vector3.Dot(camTransform.forward, dir);//判斷物體是否在相機前面if (dot > 0 && viewPos.x >= 0 && viewPos.x <= 1 && viewPos.y >= 0 && viewPos.y <= 1)return true;elsereturn false;}void Update(){Vector2 vec2 = Camera.main.WorldToScreenPoint(this.gameObject.transform.position);if (IsInView(transform.position)) {if(!rectBloodPos.gameObject.activeInHierarchy)rectBloodPos.gameObject.SetActive (true);//rectBloodPos.anchoredPosition = new Vector2(vec2.x - Screen.width / 2 + 0, vec2.y - Screen.height / 2 + 0);float newDistance = distance / Vector3.Distance(rectBloodPos.position, Camera.main.transform.position);rectBloodPos.GetComponent<Image>().rectTransform.position = vec2;//位置 //if(rectBloodPos.GetComponent<Image>().rectTransform.localScale.x<3) // rectBloodPos.GetComponent<Image>().rectTransform.localScale = Vector3.one * newDistance*1.5f;if (started){if ((Vector3.Distance(transform.position, Camera.main.transform.position) < 3.5)){actived = true;}else{actived = false;}}//if( rectBloodPos.childCount>0)rectBloodPos.GetChild(0).gameObject.SetActive(actived);}elserectBloodPos.gameObject.SetActive (false);}public void SetActiveBool(){actived = true;}public void SetInActiveBool(){started = false;actived = false;}private void OnMouseDown(){SetActiveBool();}}

?

總結

以上是生活随笔為你收集整理的【常用】2DUI跟随3D物体移动(待修复)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。