UniWebView3.8

本文介绍了一种在Unity中高效管理和切换网页的方法,通过创建一个基类UniwebBase,继承该类的其他脚本可以简化网页的创建与销毁过程。文章详细展示了如何通过覆写监听事件来定制网页的行为,并提供了两个具体的示例:test3和test1,演示了如何使用该基类实现网页的无缝切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们要打开一个uniweb,同时需要关闭上一个网页,可以写一个uniwebbase,其他需要打开网页的类只需要继承这个类就可以重写一些监听事件。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UniwebBase : MonoBehaviour {
    public static UniWebView _view;
    public void CreatWebView(string url, GameObject init, Rect _docst=default(Rect), RectTransform _init = null, bool fullScreen = false)
    {

        Destroy();
        //Debug.Log(url);
        init.name =init+"?"+ Guid.NewGuid().ToString();
        _view = init.AddComponent<UniWebView>();
        _view .listener = init.AddComponent<UniWebViewNativeListener>();
        UniWebViewNativeListener.AddListener(_view.listener);
        if (fullScreen)
        {
            _view.rect = new Rect(0, 0, Screen.width, Screen.height);
        }
        else
        {
            if (_init)
            {
                _view.ReferenceRectTransform = _init;
            }
            else
            {
                _view.Frame = _docst;
            }
        }
       
        UniWebViewInterface.Init(_view.listener.Name, (int)_view.rect.x, (int)_view.rect.y, (int)_view.rect.width, (int)_view.rect.height);
        _view. isPortrait = Screen.height >= Screen.width;
        _view.OnPageStarted += _view_OnPageStarted;
        //网页完成
        _view.OnPageFinished += _view_OnPageFinished;
        //网页发送消息
        _view.OnMessageReceived += _view_OnMessageReceived;
        _view.OnPageErrorReceived += _view_OnPageErrorReceived;
        _view.OnShouldClose += _view_OnShouldClose;
        SetView();
        _view.Load(url);
        _view.UpdateFrame();
        _view.Show(true, (UniWebViewTransitionEdge)4, 0.8f, () => Debug.Log("完成"));
    }
    public virtual void SetView()
    {
        _view.BackgroundColor = new Color(0, 0, 0, 0);
        ///设置单击web视图中的链接是否应该在外部浏览器中打开页面
        _view.SetOpenLinksInExternalBrowser(false);
        /// 设置在加载过程中是否显示加载指示器。
        _view.SetShowSpinnerWhileLoading(true);
        _view.SetSpinnerText("加载中...");
        _view.SetHorizontalScrollBarEnabled(false);

        _view.SetVerticalScrollBarEnabled(false);
        /// 设置当滚动到页面边缘时,web视图是否应该显示弹跳效果。
        _view.SetBouncesEnabled(false);
        /// 设置web视图是否支持缩放guesture来更改内容大小。
        _view.SetZoomEnabled(true);
       // _view.useToolbar=true;
    }
    public virtual void _view_OnPageStarted(UniWebView webView, string url)
    {
        Debug.Log(url);
    }
    public virtual void _view_OnPageFinished(UniWebView webView, int statusCode, string url)
    {
        Debug.Log(statusCode+"    "+url);
      
    }
    public virtual void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
    {
    }
    public virtual void _view_OnPageErrorReceived(UniWebView webView, int errorCode, string errorMessage)
    {
    }
    public virtual bool _view_OnShouldClose(UniWebView webView)
    {
       
        
        return true;
    }
   public void Destroy() {
        if (_view != null)
        {
            Debug.Log("删除");
            _view.OnPageStarted -= _view_OnPageStarted;
            _view.OnPageFinished -= _view_OnPageFinished;
            _view.OnMessageReceived -= _view_OnMessageReceived;
            _view.OnPageErrorReceived -= _view_OnPageErrorReceived;
            _view.OnShouldClose -= _view_OnShouldClose;
            _view.CleanCache();
            UniWebViewNativeListener.RemoveListener(_view.listener.Name);
            UniWebViewInterface.Destroy(_view.listener.Name);
            _view.name = _view.name.Split('?')[0];
            Destroy(_view);
            _view = null;
        }
    }
}

这样可以屏蔽uniwebview脚本里的Start,Awake,OnEnable ,OnDisable.并且在脚本增加public Rect rect这个属性;

然后在屏蔽UniWebViewNativeListener这个脚本里的他自己定义的uniweb以及事件方法不然会出错,

测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class test3 : UniwebBase {
    public static test3 _instance;
    private static string url = "https://www.taobao.com/";
    public Rect _rect;
    void Awake()
    {
        _instance = this;
    }
    // Use this for initialization
    void Start()
    {
        GetComponent<Button>().onClick.AddListener(_test);
     
    }

    // Update is called once per frame
    void Update()
    {

    }
    public void _test()
    {
        _instance.CreatWebView(url, this.gameObject, _rect);
     
    }
 override public  void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
    {
        base._view_OnMessageReceived(webView, message);
    }
}

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class test1 : UniwebBase {
    public static test1 _instance;
    private static string url = "https://www.baidu.com/";
    public RectTransform _rect;
    void Awake()
    {
        _instance = this;
    }
    // Use this for initialization
    void Start () {
        GetComponent<Button>().onClick.AddListener(_test);
       
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    public void _test()
    {
        _instance.CreatWebView(url,this.gameObject, _init:_rect);
    }
 override public  void _view_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
    {
        base._view_OnMessageReceived(webView, message);
    }
}

设置两个按钮完美切换 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值