111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System.Collections;
 | ||
| using System.Collections.Generic;
 | ||
| using UnityEngine;
 | ||
| using UnityEngine.UI;
 | ||
| 
 | ||
| namespace Touka
 | ||
| {
 | ||
|     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(string nativePos)
 | ||
|         {
 | ||
|             if (TKGSDKManager.Instance.IsNativeReady())
 | ||
|             {
 | ||
|                 TKGSDKManager.Instance.ShowNative(nativePos, 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)
 | ||
|             {
 | ||
|                
 | ||
|                 Vector3[] worldcorners = new Vector3[4];
 | ||
|                 GetComponent<RectTransform>().GetWorldCorners(worldcorners);
 | ||
|                 Vector3 lefttop = RectTransformUtility.WorldToScreenPoint(null, worldcorners[1]);
 | ||
|                 Vector3 rightbottom = RectTransformUtility.WorldToScreenPoint(null, worldcorners[3]);
 | ||
|                 Vector3 picture_zero = RectTransformUtility.WorldToScreenPoint(null, 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;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|     }
 | ||
| } |