1、第一个读取PDF地址
1、PDF_BG可以随意拉伸,匹配显示面板
2、PDFMask是PDF显示范围,根据高度自适应PDF_BG
3、子物体0、1、2是三张并排RawImage,用来轮播做无缝操作
using DG.Tweening;
using Paroxe.PdfRenderer;
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using static Paroxe.PdfRenderer.PDFViewer;
[RequireComponent(typeof(PhotonView))]
public class PDFManager : MonoBehaviourPunCallbacks,IPunObservable
{
PDFDocument pdfDocument; //PDF
[Header("PDF文件信息")]
[Multiline]
public string PDFPath = ""; //PDF路径
public float MoveTime = 1;
public int pdfWidth, pdfHeight;
//PDFViewer pdfViewer;
public int CurrentPage = 0; //当前页码
public int TargetPage = 0; //要过去的页数
[Header("三张轮播图的父物体")]
public Transform rawImageParent; //父物体
[Header("翻页按钮")]
public Button PreviousPageBtn; //上一页按钮
public Button NextPageBtn; //下一页按钮
//记录临时位置,用来做位移
Vector3 rawFrontPos;
Vector3 rawMiddlePos;
Vector3 rawAfterPos;
private void Awake()
{
//RawImage上显示pdf
pdfDocument = new PDFDocument(PDFPath, "");
}
void Start()
{
CurrentPage = 0;
TargetPage = 0;
//设置默认第一页
rawImageParent.transform.GetChild(0).GetComponent().texture = null;
rawImageParent.transform.GetChild(1).GetComponent().texture = SetpdfPage(0);
rawImageParent.transform.GetChild(2).GetComponent().texture = SetpdfPage(1);
ScreenAdaptation();
//赋予初始位置
rawFrontPos = rawImageParent.GetChild(0).transform.position;
rawMiddlePos = rawImageParent.GetChild(1).transform.position;
rawAfterPos = rawImageParent.GetChild(2).transform.position;
//上一页
PreviousPageBtn.onClick.AddListener(PreviousPage);
//下一页
NextPageBtn.onClick.AddListener(NextPage);
//pdfDocument.
//pdfViewer.AdjustZoomToPageFitting(PageFittingType.WholePage, Vector2.one);
pdfWidth = pdfDocument.GetPageWidth(0);
pdfHeight = pdfDocument.GetPageHeight(0);
}
private void Update()
{
//当前页小于目标页说明需要向下一页运动
if (CurrentPage < TargetPage)
{
MoveToNextPage();
}
//当前页大于目标页说明需要向下一页运动
if (CurrentPage > TargetPage)
{
MoveToPreviousPage();
}
if (CurrentPage == TargetPage) return;
CurrentPage = TargetPage; //翻页过去
}
//上一页
public void PreviousPage()
{
if (CurrentPage == 0) return;
TargetPage--;
}
//向上一页运动
public void MoveToPreviousPage()
{
rawImageParent.transform.GetChild(0).GetComponent().texture = SetpdfPage(CurrentPage - 1);
rawImageParent.transform.GetChild(1).GetComponent().texture = SetpdfPage(CurrentPage);
rawImageParent.transform.GetChild(2).GetComponent().texture = SetpdfPage(CurrentPage + 1);
rawImageParent.transform.GetChild(0).transform.DOMoveX(rawMiddlePos.x, MoveTime);
rawImageParent.transform.GetChild(1).transform.DOMoveX(rawAfterPos.x, MoveTime);
rawImageParent.transform.GetChild(2).transform.position = rawFrontPos;
rawImageParent.transform.GetChild(2).transform.SetAsFirstSibling();
StartCoroutine(ProHibitButton());
}
//下一页
public void NextPage()
{
if (CurrentPage == pdfDocument.GetPageCount()-1) return;
TargetPage++;
}
//向下一页运动过去
public void MoveToNextPage()
{
rawImageParent.transform.GetChild(1).GetComponent().texture = SetpdfPage(CurrentPage);
rawImageParent.transform.GetChild(2).GetComponent().texture = SetpdfPage(CurrentPage + 1);
rawImageParent.transform.GetChild(1).transform.DOMoveX(rawFrontPos.x, MoveTime);
rawImageParent.transform.GetChild(2).transform.DOMoveX(rawMiddlePos.x, MoveTime);
rawImageParent.transform.GetChild(0).transform.position = rawAfterPos;
rawImageParent.transform.GetChild(0).transform.SetAsLastSibling();
StartCoroutine(ProHibitButton());
}
//运行期间禁止重复点击按钮
IEnumerator ProHibitButton()
{
PreviousPageBtn.interactable = false;
NextPageBtn.interactable = false;
yield return new WaitForSeconds(MoveTime);
PreviousPageBtn.interactable = true;
NextPageBtn.interactable = true;
}
//输入页数读出对应图片
public Texture SetpdfPage(int setPage)
{
Texture tex = pdfDocument.Renderer.RenderPageToTexture(pdfDocument.GetPage(setPage), pdfDocument.GetPageWidth(setPage), pdfDocument.GetPageHeight(setPage));
return tex;
}
//屏幕自适应
public void ScreenAdaptation()
{
RectTransform rect_01 = rawImageParent.transform.GetChild(0).GetComponent();
RectTransform rect_02 = rawImageParent.transform.GetChild(1).GetComponent();
RectTransform rect_03 = rawImageParent.transform.GetChild(2).GetComponent();
RectTransform rect_parent = rawImageParent.transform.GetComponent();
rect_parent.sizeDelta = new Vector2(pdfDocument.GetPageWidth(0), pdfDocument.GetPageHeight(0));
rect_01.sizeDelta =new Vector2(pdfDocument.GetPageWidth(0), pdfDocument.GetPageHeight(0));
rect_02.sizeDelta =new Vector2(pdfDocument.GetPageWidth(0), pdfDocument.GetPageHeight(0));
rect_03.sizeDelta =new Vector2(pdfDocument.GetPageWidth(0), pdfDocument.GetPageHeight(0));
rect_02.anchoredPosition = new Vector2(rect_02.sizeDelta.x * 0.5f, -rect_02.sizeDelta.y * 0.5f);
rect_01.anchoredPosition = new Vector2(rect_02.anchoredPosition.x - rect_02.sizeDelta.x, -rect_01.sizeDelta.y * 0.5f);
rect_03.anchoredPosition = new Vector2(rect_02.anchoredPosition.x + rect_02.sizeDelta.x , -rect_03.sizeDelta.y * 0.5f);
//缩放比例
float ScaleProp;
if (rect_parent.sizeDelta.y > rect_parent.transform.parent.GetComponent().sizeDelta.y)
{
//缩放比例
ScaleProp = rect_parent.transform.parent.GetComponent().sizeDelta.y / rect_parent.sizeDelta.y;
rect_parent.localScale = new Vector3(ScaleProp, ScaleProp, ScaleProp);
}
else
{
//缩放比例
ScaleProp = rect_parent.transform.parent.GetComponent().sizeDelta.y / rect_parent.sizeDelta.y;
rect_parent.localScale = new Vector3(ScaleProp,ScaleProp,ScaleProp);
}
}
//同步
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
stream.SendNext(TargetPage);
}
else
{
TargetPage = (int)stream.ReceiveNext();
}
}
}