目录
空物体上挂载Video Player组件
Render Mode改为Camera Far Plane
Unity中使用协程搭配异步写代码更佳,例如通过异步加载场景,在加载过程中通过每帧更新进度条给予玩家一个反馈,可以在协程中调用异步加载场景的方法,然后暂停协程,等待当前一帧结束,然后更新进度条,反复之后,就完成进度条显示进度加载场景效果
制作步骤:
①做一个Panel,放背景
②画布上放Slider(Handle修改进度条图片,Fill改颜色)
③Text显示文字
④编写脚本 切换场景按钮On Click() 事件调用LoadNextLevel()方法
- public class LoadManager : MonoBehaviour
-
- {
-
- public GameObject loadScreen;
-
- public Slider slider;
-
- public Text text;
-
- public void LoadNextLevel()
-
- {
-
- StartCoroutine(Loadlevel());
-
- }
-
- IEnumerator Loadlevel()
-
- {
-
- loadScreen.SetActive(true);
-
- AsyncOperation operation = SceneManager.LoadSceneAsync(8);
-
- operation.allowSceneActivation = false;
-
- //异步加载到90%左右停住,防止加载完毕后直接切换场景
-
- while (!operation.isDone)//isDone操作是否已完成
-
- {
-
- slider.value = operation.progress;//获取操作进度
-
- text.text = operation.progress * 100 + "%";
-
- if (operation.progress >= 0.9f)
-
- {
-
- slider.value = 1;
-
- text.text = "按下任意按键,继续……";
-
- if (Input.anyKeyDown)
-
- {
-
- operation.allowSceneActivation = true;
-
- //允许在场景准备就绪后立即激活场景
-
- }
-
- }
-
- yield return null;
-
- }
-
- }
-
- }
通过数组显示文本框
①新建对话框,文字
②新建空物体挂载DialogueManager_脚本
- public class DialogueManager_ : MonoBehaviour
-
- {
-
- public static DialogueManager_ instance;//静态的DialogueManager_属性instance保证了它可以通过类访问,而不是通过实例访问
-
- public GameObject dialogueBox_baimeiren;
-
- public Text dialogueText;
-
- [TextArea(1, 3)] public string[] dialogueLines;
-
- [SerializeField] private int currentLine;
-
- // Start is called before the first frame update
-
- void Start()
-
- {
-
- dialogueText.text = dialogueLines[currentLine];
-
- }
-
-
-
- // Update is called once per frame
-
- void Update()
-
- {
-
- if (dialogueBox_.activeInHierarchy)
-
- {
-
- if (Input.GetMouseButtonUp(0))
-
- {
-
-
-
- currentLine++;
-
- if (currentLine < dialogueLines.Length)
-
- dialogueText.text = dialogueLines[currentLine];
-
- else
-
- dialogueBox_.SetActive(false);
-
- }
-
- }
-
- }
-
- public void ShowDialogue(string[] _newLines)
-
- {
-
- dialogueLines = _newLines;
-
- currentLine = 0;
-
- dialogueText.text = dialogueLines[currentLine];
-
- dialogueBox_.SetActive(true);
-
- }
-
- public void Awake()
-
- {
-
- instance = this;
-
- }
-
- }
③触发地点挂载Talkable_
- public class Talkable_ : MonoBehaviour
-
- {
-
- [SerializeField] private bool isEntered;
-
- [TextArea(1, 3)] public string[] lines;
-
- private void OnTriggerEnter(Collider other)
-
- {
-
- if (other.CompareTag("Player"))
-
- {
-
- isEntered = true;
-
- }
-
- }
-
- private void OnTriggerExit(Collider other)
-
- {
-
- if (other.CompareTag("Player"))
-
- {
-
- isEntered = false;
-
- }
-
- }
-
- // Update is called once per frame
-
- void Update()
-
- {
-
- if (isEntered && Input.GetKeyDown(KeyCode.Q))
-
- //if (isEntered)
-
- {
-
- DialogueManager_.instance.ShowDialogue(lines);
-
- }
-
- }
-
- }
——Book_Page Curl Pro2.0插件
BookPro里Papers添加页数,对应每页修改其图片
Canvas的Render Mode-Screen Space-Camera
- public class MouseRotate : MonoBehaviour
-
- {
-
- public Transform m_target;
-
- private bool isDown1;
-
- private bool isDown0;
-
- void Start()
-
- {
-
- isDown1 = false;
-
- isDown0 = false;
-
- }
-
- void Update()
-
- {
-
- // 按下了鼠标中键
-
- if (Input.GetMouseButtonDown(1))
-
- isDown1 = true;
-
- // 抬起了鼠标中键
-
- if (Input.GetMouseButtonUp(1))
-
- isDown1 = false;
-
- // 按下鼠标右键
-
- if (Input.GetMouseButtonDown(0))
-
- isDown0 = true;
-
- // 抬起了鼠标右键
-
- if (Input.GetMouseButtonUp(0))
-
- isDown0 = false;
-
- // 缩放 Input.mouseScrollDelta.y当前的鼠标滚动增量
-
- m_target.localScale += Time.deltaTime * m_target.localScale * Input.mouseScrollDelta.y*8;
-
- }
-
- private void LateUpdate()
-
- {
-
- if (isDown1)
-
- {
-
- // 计算单位时间内鼠标的偏移量
-
- float x = Input.GetAxis("Mouse X");
-
- float y = Input.GetAxis("Mouse Y");
-
- Vector3 rot = new Vector3(y, -x, 0);
-
- float spd = 10; //速度
-
- m_target.Rotate(spd * rot, Space.World);
-
- }
-
- if (isDown0)
-
- {
-
- // 计算单位时间内鼠标的偏移量
-
- float x = Input.GetAxis("Mouse X");
-
- float y = Input.GetAxis("Mouse Y");
-
- float spd = 0.4f; //速度
-
- m_target.Translate(spd * new Vector3(x, y), Space.World);
-
- }
-
- }
-
- }
- public class SilderMenuAnim : MonoBehaviour
-
- {
-
- public GameObject PanelMenu;
-
- public void ShowHideMenu()
-
- {
-
- if (PanelMenu != null)
-
- {
-
- Animator animator = PanelMenu.GetComponent
(); -
- if(animator!=null)
-
- {
-
- bool isOpen = animator.GetBool("show");
-
- animator.SetBool("show", !isOpen);
-
- }
-
- }
-
- }
-
- }
挂载在第三人称上,以下脚本:
- public class playerposition : MonoBehaviour
-
- {
-
- public float PlayerPosX = 0.0f, PlayerPosY = 0.0f, PlayerPosZ = 0.0f;
-
- void Start()
-
- {
-
- PlayerPosX = PlayerPrefs.GetFloat("playerPosX");
-
- PlayerPosY = PlayerPrefs.GetFloat("playerPosY");
-
- PlayerPosZ = PlayerPrefs.GetFloat("playerPosZ");
-
- if (PlayerPosX == 0.0f)
-
- {
-
- gameObject.transform.position = new Vector3(0, 0.2f, 0f);
-
- }
-
- if (PlayerPosX != 0.0f)
-
- {
-
- gameObject.transform.position = new Vector3(PlayerPosX, PlayerPosY, PlayerPosZ);
-
- }
-
- }
挂载在物体上,以下脚本:
- public class Into: MonoBehaviour
-
- {
-
- public GameObject text;
-
- public GameObject player;
-
- private void OnTriggerStay(Collider other)
-
- {
-
- if (other.CompareTag("Player") && Input.GetKeyDown(KeyCode.Z))
-
- {
-
- SceneManager.LoadSceneAsync(3);
-
- text.gameObject.SetActive(true);
-
- PlayerPrefs.SetFloat("playerPosX", player.transform.position.x);
-
- PlayerPrefs.SetFloat("playerPosY", player.transform.position.y);
-
- PlayerPrefs.SetFloat("playerPosZ", player.transform.position.z);
-
- }
-
- }
-
- }