using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameRoot : MonoBehaviour
{
//第一帧的时候跳转到开始场景
private void Start()
{
SceneManager.LoadScene(1);
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
public class UIManage : MonoBehaviour
{
//UIManage单例
public static UIManage Instance;
//存放UI脚本的栈
public Stack<UIBase> _uiStack=new Stack<UIBase>();
//存放UI预设体的字典
private Dictionary<string,GameObject> _uiObject=new Dictionary<string, GameObject>();
//存UI脚本的字典
public Dictionary<string,UIBase> uiBases=new Dictionary<string, UIBase>();
//UI预设体所在文件夹名称
public string resourcesUiPrefabDir = "UIPre";
private void Awake()
{
//单例
Instance = this;
//加载场景不销毁
DontDestroyOnLoad(gameObject);
}
/// <summary>
/// 入栈-显示UI脚本
/// </summary>
/// <param name="uiName"></param>
public void PushUiPanel(string uiName)
{
//如果栈里面的数量大于零
if (_uiStack.Count>0)
{
//拿到原来的栈顶元素
UIBase oldTopUi= _uiStack.Peek();
//将栈顶的元素暂停
oldTopUi.DoOnPause();
}
//得到新的UI面板
UIBase newTopUi= GetUiBase(uiName);
//让新的的UI进入游戏
newTopUi.DoOnEnter();
//入栈
_uiStack.Push(newTopUi);
}
/// <summary>
/// 出栈-弹出UI脚本
/// </summary>
public void PopUipanel()
{
//如果栈中没元素直接返回
if (_uiStack.Count==0) return;
//如果有元素,拿到栈顶的元素
UIBase oldTopUi = _uiStack.Pop();
//将栈顶的元素退出
oldTopUi.DoOnExit();
//如果栈中的数量大于零
if (_uiStack.Count>0)
{
//如果一个UI出栈以后,下面还有UI,需要将UI状态恢复
//弹出栈最上面的UI面板
UIBase newTopUi = _uiStack.Peek();
//将最上面的面板的UI状态恢复
newTopUi.DoOnRestart();
}
}
/// <summary>
/// 根据名字得到UI面板
/// </summary>
/// <param name="uiName"></param>
private UIBase GetUiBase(string uiName)
{
//如果脚本字典里包含这个名字
if (uiBases.ContainsKey(uiName))
{
//返回这个ui名字
return uiBases[uiName];
}
//如果预设体字典中不包含该ui面板的预设体
if (!_uiObject.ContainsKey(uiName))
{
//获得这个新ui面板的资源路径
string uiPath = resourcesUiPrefabDir + "/" + uiName;
//加载出来这个新的ui面板
GameObject uiPrefab= Resources.Load<GameObject>(uiPath);
//如果这个ui面板不为空
if (uiPrefab!=null)
{
//将其存入字典中
_uiObject[uiName] = uiPrefab;
}
else
{
//否则返回
Debug.Log("没这个资源");
return null;
}
}
//根据从字典中取出的预设体生成UI面板对象
GameObject uiObj= Instantiate(_uiObject[uiName]);
//将要获取的脚本的名字赋给这个UI面板
uiObj.name = uiName;
//取当前对象的脚本组件
UIBase uiBase= uiObj.GetComponent<UIBase>();
//将脚本存到脚本字典中
uiBases[uiName] = uiBase;
//返回这个脚本
return uiBase;
}
/// <summary>
/// 进行清空
/// </summary>
public void Clear()
{
_uiStack.Clear();
uiBases.Clear();
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManage : MonoBehaviour
{
//单例
public static SoundManage Instance;
//音乐播放器组件
private AudioSource _audioSource;
//显示音乐名字
public string musicShowName;
//音乐文件位置
public string ResourcesMusicDir="Audio";
//音乐常量
public const string MUSICMUTE = "MusicMute";
//音效常量
public const string AUDIOMUTE = "AudioMute";
//声音大小常量
public const string VOLUME = "Volume";
//音效大小常量
public const string AUDIOVOLUME = "AudioVolume";
private void Awake()
{
Instance = this;
//场景加载时不销毁
DontDestroyOnLoad(gameObject);
//获取Audiosource组件
_audioSource = GetComponent<AudioSource>();
//初始设置循环打开
_audioSource.loop = true;
//初始位置开局唤醒关闭
_audioSource.playOnAwake = false;
//如果存储里面有MusicMute字段
if (PlayerPrefs.HasKey(MUSICMUTE))
{
//音乐是否静音就获取存储字段的bool值
MusicMute = PlayerPrefs.GetInt(MUSICMUTE)==0?false:true;
}
//如果AudioMute这个字段
if (PlayerPrefs.HasKey(AUDIOMUTE))
{
//音效是否静音就获取存储字段的bool值
AudioMute = PlayerPrefs.GetInt(AUDIOMUTE) ==0?false:true;
}
//如果里面有Volume这个字段
if (PlayerPrefs.HasKey(VOLUME))
{
//声音大小就为获取存储这个字段的值
Volume = PlayerPrefs.GetFloat(VOLUME,Volume);
}
//如果里面有AudioVolume这个字段
if (PlayerPrefs.HasKey(AUDIOVOLUME))
{
//音效大小就为这个字段的值
AudioVolume = PlayerPrefs.GetFloat(AUDIOVOLUME, AudioVolume);
}
}
/// <summary>
/// 播放音乐
/// </summary>
/// <param name="musicName"></param>
public void PlayBgm(string musicName)
{
//获取路径字段
string path = ResourcesMusicDir + "/" + musicName;
//通过路径加载出来音乐片段
_audioSource.clip= Resources.Load<AudioClip>(path);
//显示名字
musicShowName = musicName;
//播放音乐
_audioSource.Play();
}
/// <summary>
/// 停止播放
/// </summary>
public void StopBgm()
{
//让音乐片段为null
_audioSource.clip = null;
//停止播放音乐
_audioSource.Stop();
}
/// <summary>
/// 音乐是否静音
/// </summary>
public bool MusicMute
{
get
{
return _audioSource.mute;
}
set
{
_audioSource.mute = value;
}
}
/// <summary>
/// 音效是否静音
/// </summary>
public bool AudioMute
{
get;
set;
}
/// <summary>
/// 音效的音量
/// </summary>
public float AudioVolume
{
get;
set;
}
/// <summary>
/// 播放音效
/// </summary>
/// <param name="audioName"></param>
/// <param name="playPoint"></param>
/// <param name="_audioVolume"></param>
public void PlayAudio(string audioName,Vector2 playPoint,float _audioVolume)
{
_audioVolume = AudioVolume;
//当静音静音开关打开的时候直接返回不播放音效
if (AudioMute) return;
//获取游戏路径
string path = ResourcesMusicDir + "/" + audioName;
//加载播放路径获得播放的音乐
AudioClip ac= Resources.Load<AudioClip>(path);
//进行播放
AudioSource.PlayClipAtPoint(ac,playPoint,_audioVolume);
}
/// <summary>
/// 音量
/// </summary>
public float Volume
{
get
{
//返回audiosource的音量值
return _audioSource.volume;
}
set
{
//控制audiosource的音量值
_audioSource.volume = value;
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Random = UnityEngine.Random;
public class UIPlaying : MonoBehaviour
{
//所有音乐文件的名字
public string[] AllMusicName;
//定义按钮
private Button btn;
//显示音乐名字
private Text musicText;
//播放到的第几个音乐
private int musicId;
//音量toggle
private Toggle _musicToggle;
//音乐声音大小
private Slider _musicSlider;
//女生的坐标
public Transform girl;
public Transform player;
private float a;
private void Start()
{
//获取button组件
btn =transform.Find("Back").GetComponent<Button>();
//获取音乐文本组件
musicText = transform.GetChild(2).GetChild(0).GetComponent<Text>();
//获取控制音乐音量的滑动条
_musicSlider = transform.GetChild(2).Find("Slider").GetComponent<Slider>();
//获取按钮
_musicToggle = transform.GetChild(2).Find("Toggle").GetComponent<Toggle>();
//注册点击事件
_musicToggle.onValueChanged.AddListener(MusicToggleOnChange);
//根据播放器更改按钮状态
_musicToggle.isOn = !SoundManage.Instance.MusicMute;
//给滑动条的值赋给音乐音量
_musicSlider.value = SoundManage.Instance.Volume;
//存储音乐
AllMusicName = new[] {"柳泓泽 - Unstoppable", "柳泓泽 - 漫步人生路", "柳泓泽 - 野狼disco", "柳泓泽 - 不如"};
//播放bgm
SoundManage.Instance.PlayBgm(AllMusicName[musicId]);
//显示音乐名字
musicText.text = SoundManage.Instance.musicShowName;
//按钮点击事件
btn.onClick.AddListener(() =>
{
LoadScene();
});
}
private void Update()
{
a = Vector2.Distance(player.position, girl.position);
//当人物坐标小于-10
if (PlayerController2D.Instance.rig.position.y< -10)
{
//记录人物的坐标
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_X,PlayerController2D.Instance.CurrentTf_X-10);
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_Y,8);
//记录人物的力和速度
if (PlayerController2D.Instance.rig.position.x>25)
{
PlayerPrefs.SetFloat(PlayerController2D.MOVESPEED,PlayerController2D.Instance.moveSpeed);
}
else
{
PlayerPrefs.SetFloat(PlayerController2D.MOVESPEED,2);
}
if (PlayerController2D.Instance.rig.position.x>50)
{
PlayerPrefs.SetFloat(PlayerController2D.ADDFORCE,PlayerController2D.Instance.addForce);
}
else
{
PlayerPrefs.SetFloat(PlayerController2D.ADDFORCE,3200);
}
//播放音效
SoundManage.Instance.PlayAudio("Audio_boos", new Vector2(PlayerController2D.Instance.transform.position.x,0.5f), 1);
//激活界面
UIManage.Instance.PushUiPanel("UILose");
}
//当人物坐标大于59
if (a<1)
{
//记录人物的坐标
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_X,-37f);
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_Y,-0.5f);
//记录人物的力和速度
PlayerPrefs.SetFloat(PlayerController2D.MOVESPEED,2);
PlayerPrefs.SetFloat(PlayerController2D.ADDFORCE,3200);
//播放音效
SoundManage.Instance.PlayAudio("Audio_congratulations",PlayerController2D.Instance.transform.position,1);
//激活界面
Invoke("LoadWin",4);
}
//调节滑动条的值控制声音音量大小
SoundManage.Instance.Volume = _musicSlider.value;
}
public void LoadWin()
{
UIManage.Instance.PushUiPanel("UIWin");
}
public void LoadScene()
{
//加载场景
SceneManager.LoadScene(1);
}
/// <summary>
/// 下一首
/// </summary>
public void PlayerNextMusic()
{
musicId++;
if (musicId>AllMusicName.Length-1)
{
musicId = 0;
}
//播放音乐
SoundManage.Instance.PlayBgm(AllMusicName[musicId]);
//显示名字
musicText.text = AllMusicName[musicId];
}
/// <summary>
/// 上一首
/// </summary>
public void PlayerLastMusic()
{
musicId--;
if (musicId<0)
{
musicId = AllMusicName.Length-1;
}
//播放音乐
SoundManage.Instance.PlayBgm(AllMusicName[musicId]);
//显示名字
musicText.text = AllMusicName[musicId];
}
/// <summary>
/// 音乐开关
/// </summary>
/// <param name="value"></param>
private void MusicToggleOnChange(bool value)
{
SoundManage.Instance.MusicMute = !value;
}
public void Quit()
{
//退出
Application.Quit();
}
private void OnApplicationQuit()
{
Debug.Log("退出游戏");
//保留当前的设置
PlayerPrefs.SetInt(SoundManage.MUSICMUTE,SoundManage.Instance.MusicMute?1:0);
PlayerPrefs.SetInt(SoundManage.AUDIOMUTE,SoundManage.Instance.AudioMute?1:0);
PlayerPrefs.SetFloat(SoundManage.VOLUME,SoundManage.Instance.Volume);
PlayerPrefs.SetFloat(SoundManage.AUDIOVOLUME,SoundManage.Instance.AudioVolume);
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_X,PlayerController2D.Instance.CurrentTf_X);
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_Y,PlayerController2D.Instance.CurrentTf_Y);
PlayerPrefs.SetFloat(PlayerController2D.MOVESPEED,PlayerController2D.Instance.moveSpeed);
PlayerPrefs.SetFloat(PlayerController2D.ADDFORCE,PlayerController2D.Instance.addForce);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIBase : MonoBehaviour
{
/// <summary>
/// 进入游戏
/// </summary>
public virtual void DoOnEnter()
{
}
/// <summary>
/// 暂停游戏
/// </summary>
public virtual void DoOnPause()
{
}
/// <summary>
/// 恢复游戏
/// </summary>
public virtual void DoOnRestart()
{
}
/// <summary>
/// 退出游戏
/// </summary>
public virtual void DoOnExit()
{
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class UIStart : UIBase
{
//获取button组件
private Button btn;
public override void DoOnEnter()
{
gameObject.SetActive(true);
}
public override void DoOnPause()
{
gameObject.SetActive(false);
}
public override void DoOnRestart()
{
gameObject.SetActive(true);
//返回的时候播放bgm5
SoundManage.Instance.PlayBgm("Audio_bgm_5");
}
public override void DoOnExit()
{
gameObject.SetActive(false);
}
private void Start()
{
btn = GameObject.Find("StartBtn").GetComponent<Button>();
//开始的时候播放bgm5
SoundManage.Instance.PlayBgm("Audio_bgm_5");
//将其上面加一个主摄像机
gameObject.GetComponent<Canvas>().worldCamera= Camera.main;
//按钮点击事件
btn.onClick.AddListener(() =>
{
LoadScene();
});
}
public void LoadScene()
{
//离开去下一个场景的时候清空栈的脚本字典
UIManage.Instance.Clear();
SceneManager.LoadScene(2);
}
/// <summary>
/// 选项 按钮点击的事件
/// </summary>
public void GoToOption()
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,SoundManage.Instance.AudioVolume);
//显示ui脚本
UIManage.Instance.PushUiPanel("UIOption");
}
/// <summary>
/// 关于 按钮点击的事件
/// </summary>
public void GoToAbout()
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,SoundManage.Instance.AudioVolume);
//显示ui脚本
UIManage.Instance.PushUiPanel("UIAbout");
}
}
using UnityEngine;
using UnityEngine.UI;
public class UIOption : UIBase
{
//音乐声音大小
private Slider _musicSlider;
//音量toggle
private Toggle _musicToggle;
//音效toggle
private Toggle _audioToggle;
//音效声音大小
private Slider _audioSlider;
private void Awake()
{
//获取按钮
_musicToggle = transform.GetChild(0).GetChild(0).Find("Toggle_Music").GetComponent<Toggle>();
_audioToggle = transform.GetChild(0).GetChild(0).Find("Toggle_Audio").GetComponent<Toggle>();
//注册点击事件
_musicToggle.onValueChanged.AddListener(MusicToggleOnChange);
_audioToggle.onValueChanged.AddListener(AudioToggleOnChange);
//根据播放器更改按钮状态
_musicToggle.isOn = !SoundManage.Instance.MusicMute;
_audioToggle.isOn = !SoundManage.Instance.AudioMute;
}
private void Start()
{
//获取控制音乐音量的滑动条
_musicSlider = GameObject.Find("MusicSlider").GetComponent<Slider>();
//给滑动条的值赋给音乐音量
_musicSlider.value = SoundManage.Instance.Volume;
//获取控制音效音量的滑动条
_audioSlider = GameObject.Find("AudioSlider").GetComponent<Slider>();
//播放bgm6
SoundManage.Instance.PlayBgm("Audio_bgm_6");
//给其添加主摄像机
gameObject.GetComponent<Canvas>().worldCamera= Camera.main;
}
public override void DoOnEnter()
{
gameObject.SetActive(true);
}
public override void DoOnPause()
{
gameObject.SetActive(false);
}
public override void DoOnRestart()
{
gameObject.SetActive(true);
}
public override void DoOnExit()
{
gameObject.SetActive(false);
}
private void Update()
{
//调节滑动条的值控制声音音量大小
SoundManage.Instance.Volume = _musicSlider.value;
//调节滑动条的值控制音效音量大小
SoundManage.Instance.AudioVolume = _audioSlider.value;
}
/// <summary>
/// 设置界面返回按钮的点击事件
/// </summary>
public void GoBack()
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,
SoundManage.Instance.AudioVolume);
//返回的时候直接弹出这个界面
UIManage.Instance.PopUipanel();
}
/// <summary>
/// 音乐开关
/// </summary>
/// <param name="value"></param>
private void MusicToggleOnChange(bool value)
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,SoundManage.Instance.AudioVolume);
SoundManage.Instance.MusicMute = !value;
}
/// <summary>
/// 音效开关
/// </summary>
/// <param name="value"></param>
private void AudioToggleOnChange(bool value)
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,SoundManage.Instance.AudioVolume);
SoundManage.Instance.AudioMute = !value;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIAbout :UIBase
{
private void Start()
{
//播放bgm8
SoundManage.Instance.PlayBgm("Audio_bgm_8");
//给其添加主摄像机
gameObject.GetComponent<Canvas>().worldCamera= Camera.main;
}
public override void DoOnEnter()
{
gameObject.SetActive(true);
}
public override void DoOnPause()
{
gameObject.SetActive(false);
}
public override void DoOnRestart()
{
gameObject.SetActive(true);
}
public override void DoOnExit()
{
gameObject.SetActive(false);
}
/// <summary>
/// 设置界面返回按钮的点击事件
/// </summary>
public void GoBack()
{
//播放音效
SoundManage.Instance.PlayAudio("Audio_misc_4",transform.position,SoundManage.Instance.AudioVolume);
//返回的时候直接弹出这个界面
UIManage.Instance.PopUipanel();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class UILose :UIBase
{
public void LoadStart()
{
UIManage.Instance.PopUipanel();
//UIManage.Instance.Clear();
SceneManager.LoadScene(1);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class UIWin:UIBase
{
public void LoadScene()
{
UIManage.Instance.PopUipanel();
SceneManager.LoadScene(1);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QuitGame : MonoBehaviour
{
public void Quit()
{
//退出
Application.Quit();
}
private void OnApplicationQuit()
{
//保留当前的设置
Debug.Log("退出游戏");
//保留最后音乐是否静音
PlayerPrefs.SetInt(SoundManage.MUSICMUTE,SoundManage.Instance.MusicMute?1:0);
//保留最后音效是否静音
PlayerPrefs.SetInt(SoundManage.AUDIOMUTE,SoundManage.Instance.AudioMute?1:0);
//保留音量的大小
PlayerPrefs.SetFloat(SoundManage.VOLUME,SoundManage.Instance.Volume);
//保留音效的大小
PlayerPrefs.SetFloat(SoundManage.AUDIOVOLUME,SoundManage.Instance.AudioVolume);
//保留中途退出最后人物坐标的x值
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_X,PlayerController2D.Instance.CurrentTf_X);
//保留中途退出最后人物坐标的y值
PlayerPrefs.SetFloat(PlayerController2D.CURRENTTF_Y,PlayerController2D.Instance.CurrentTf_Y);
//保留人物中途退出最后的速度
PlayerPrefs.SetFloat(PlayerController2D.MOVESPEED,PlayerController2D.Instance.moveSpeed);
//保留人物中途退出跳跃的高度
PlayerPrefs.SetFloat(PlayerController2D.ADDFORCE,PlayerController2D.Instance.addForce);
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Serialization;
public class ColliderEvents : MonoBehaviour
{
//事件
public UnityEvent OnColliderHander;
public bool HasHead;
public bool isSave;
public bool isDie;
private void OnCollisionEnter2D(Collision2D other)
{
//当标签为Player时,注册事件
if (!other.gameObject.CompareTag("Player")) return;
if (HasHead && !PlayerController2D.Instance.isHead)
{
return;
}
OnColliderHander.Invoke();
Debug.Log(HasHead+"hashead");
Debug.Log(PlayerController2D.Instance.isHead+"PlayerController2D.Instance.头");
Debug.Log(PlayerController2D.Instance.isGround+"PlayerController2D.Instance.地");
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class M_SceneManager : MonoBehaviour
{
public static M_SceneManager instance;
private void Awake()
{
instance = this;
DontDestroyOnLoad(gameObject);
}
private void Start()
{
// PlayerController2D.Instance.gameObject.SetActive(false);
SceneManager.sceneLoaded += SceneManger_SceneLoaded;
}
private void SceneManger_SceneLoaded(Scene arg0, LoadSceneMode arg1)
{
//if (arg0.name=="UIPlaying")
//{
//PlayerController2D.Instance.gameObject.SetActive(true);
//}
}
/// <summary>
/// 当前脚本不可用是
/// </summary>
private void OnDisable()
{
SceneManager.sceneLoaded -= SceneManger_SceneLoaded;
}
}