【常用】2DUI跟随3D物体移动(待修复)
生活随笔
收集整理的這篇文章主要介紹了
【常用】2DUI跟随3D物体移动(待修复)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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(){//開始時(shí)創(chuàng)建對應(yīng)2d圖標(biāo)。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);//判斷物體是否在相機(jī)前面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();}}
?
總結(jié)
以上是生活随笔為你收集整理的【常用】2DUI跟随3D物体移动(待修复)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL本人工具使用
- 下一篇: 【常用】鼠标拖动物体移动