112 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
|  |  | |||
|  | using System.Collections; | |||
|  | using System.Collections.Generic; | |||
|  | using UnityEngine; | |||
|  | using UnityEngine.UI; | |||
|  | 
 | |||
|  | public class NativeAd : MonoBehaviour | |||
|  | { | |||
|  |     protected static RectTransform s_NativeAd; | |||
|  |     private static NativeAd s_instance; | |||
|  |     public static NativeAd Instance | |||
|  |     { | |||
|  |         get | |||
|  |         { | |||
|  |             if (s_instance == null) | |||
|  |             { | |||
|  |                 Debug.LogError("s_instance == null "); | |||
|  |             } | |||
|  |             return s_instance; | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     [SerializeField] | |||
|  |     private Camera uiCamera; | |||
|  |     | |||
|  |     bool horizontal = true; | |||
|  | 
 | |||
|  |     private void Awake() | |||
|  |     { | |||
|  |         s_instance = this; | |||
|  |          | |||
|  |     } | |||
|  |     public void ShowNativeAd() | |||
|  |     { | |||
|  |         if (ToukaAdManager.Instance.IsReadyNative) | |||
|  |         { | |||
|  |             ToukaAdManager.Instance.ShowNative(GetX(), GetY(), GetWidth(), GetHeight()); | |||
|  |         } | |||
|  |     } | |||
|  |     //由于loadnative 函数有个问题,比如多个位置多个不同尺寸的native。目前只能处理一个尺寸,所以设置了firstFlg,位置宽高得到一次即可。 | |||
|  |     static bool firstFlg = true; | |||
|  |     static float m_width; | |||
|  |     static float m_height; | |||
|  |     static float m_x; | |||
|  |     static float m_y; | |||
|  |     public float GetWidth() | |||
|  |     { | |||
|  |         FirstGetWAndH(); | |||
|  | 
 | |||
|  |         return m_width; | |||
|  |     } | |||
|  |     public float GetHeight() | |||
|  |     { | |||
|  |         FirstGetWAndH(); | |||
|  |         return m_height; | |||
|  |     } | |||
|  |     public float GetX() | |||
|  |     { | |||
|  |         FirstGetWAndH(); | |||
|  |         return m_x; | |||
|  |     } | |||
|  |     public float GetY() | |||
|  |     { | |||
|  |         FirstGetWAndH(); | |||
|  |         return m_y; | |||
|  |     } | |||
|  | 
 | |||
|  |     void FirstGetWAndH() | |||
|  |     { | |||
|  |         if (firstFlg) | |||
|  |         { | |||
|  |             if(uiCamera==null) | |||
|  |             { | |||
|  |                 uiCamera = GameObject.Find("Main Camera").GetComponent<Camera>(); | |||
|  |             } | |||
|  |             Debug.Log("YANGWY "+uiCamera); | |||
|  |             Vector3 lefttop = uiCamera.WorldToScreenPoint(new Vector3(transform.position.x - GetComponent<RectTransform>().rect.size.x / 2 * transform.lossyScale.x, transform.position.y + GetComponent<RectTransform>().rect.size.y / 2 * transform.lossyScale.y, transform.position.z)); | |||
|  |             Vector3 rightbottom = uiCamera.WorldToScreenPoint(new Vector3(transform.position.x + GetComponent<RectTransform>().rect.size.x / 2 * transform.lossyScale.x, transform.position.y - GetComponent<RectTransform>().rect.size.y / 2 * transform.lossyScale.y, transform.position.z)); | |||
|  |             Vector3 picture_zero = uiCamera.WorldToScreenPoint(transform.position); | |||
|  |             float x = lefttop.x; | |||
|  |             float y = rightbottom.y; | |||
|  |             float width = rightbottom.x - lefttop.x; | |||
|  |             float height = Mathf.Abs(rightbottom.y - lefttop.y); | |||
|  |             y = Screen.height - (picture_zero.y + height / 2); | |||
|  |             if (horizontal) | |||
|  |             { | |||
|  |                 if (height > width) | |||
|  |                 { | |||
|  |                     height = width; | |||
|  |                 } | |||
|  |                 if (width > height * 1.2f) | |||
|  |                 { | |||
|  |                     x += (width - (height * 1.2f)) / 2; | |||
|  |                     width = height * 1.2f; | |||
|  | 
 | |||
|  |                 } | |||
|  | 
 | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  | 
 | |||
|  |             } | |||
|  |             m_x = x; | |||
|  |             m_y = y; | |||
|  |             m_width = width; | |||
|  |             m_height = height; | |||
|  |             firstFlg = false; | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  | } |