前言
本节主要实现使用DoTween优化阳光生成和拾取效果,场景切换加载进度条
使用DoTween优化阳光生成和拾取效果
拾取阳光优化
修改Sun
bool isMoving; //当鼠标或手指经过物体时触发 public void OnMouseOver() { if (isMoving) return; isMoving = true; transform.DOMove(Camera.main.ScreenToWorldPoint(UIManager.Instance.pickUpPos.position), 0.5f).OnComplete( () => { GameManager.Instance.SetSunSum(sun); AudioManager.Instance.PlaySFX("拾取阳光"); Destroy(gameObject); } ); }
效果
生成阳光优化
修改SunFlower
//产生阳光 public void ProduceSunshine() { AudioManager.Instance.PlaySFX("生产阳光"); // 在单位圆内生成随机点 Vector2 randomPoint = Random.insideUnitCircle * produceDistance; // 将随机生成位置 Vector3 spawnPosition = new Vector3(randomPoint.x, randomPoint.y, 0f) + transform.position; Transform tf = Instantiate(sunshine, spawnPosition, Quaternion.identity); // 生成阳光 //慢慢变大动画效果 tf.DOScale(Vector3.one, 0.5f).From(Vector3.zero); }
效果
场景加载进度条
新增加载场景Loading,绘制开始界面
加载直接用一个滑动条,禁用背景图片,修改滑动条和滑动滚轮背景图片即可,记得禁用可拖动功能,并修改禁止透明和颜色
修改滑动条为已填充,水平模式
效果
绘制菜单界面
新增菜单场景Menu,简单绘制界面,先加一个背景图片即可
滑动滚轮一直滚动
新增Rotate ,这里使用了DOTween库来实现游戏对象的旋转动画,并且设置为循环播放。
public class Rotate : MonoBehaviour { private void Start() { transform.DORotate(new Vector3(0, 0, -360), 2f, RotateMode.FastBeyond360).SetEase(Ease.Linear).SetLoops(-1, LoopType.Restart); } }
效果
场景加载
具体看这一篇文章就行了:【Unity实战】切换场景加载进度和如何在后台异步加载具有庞大世界的游戏场景,实现无缝衔接(附项目源码)
新增MainMenuManager,因为我们的场景比较小,时间加载会很快,所以这里加载进度直接用虚拟的就可以了
public class MainMenuManager : MonoBehaviour { [SerializeField] private Slider _loadingBar;//加载进度条 [SerializeField] private SceneField _levelScene;//加载场景 [SerializeField] private GameObject btnStart;//开始游戏按钮 [SerializeField] private float loadingTime = 2;//加载时间 private float curProgress; private void Start() { AudioManager.Instance.PlayMusic("ThemeSong"); _loadingBar.value = 0; btnStart.SetActive(false); } private void Update() { curProgress += Time.deltaTime / loadingTime; if (curProgress >= 1){ curProgress = 1; btnStart.SetActive(true); } _loadingBar.value = curProgress; } //开始游戏 public void StartGame() { AudioManager.Instance.PlayMusic("bgm2"); //加载场景 SceneManager.LoadScene(_levelScene); //清除 DOTween 库中当前正在进行的所有动画和补间 DOTween.Clear(); } }
配置
效果
源码
源码不出意外的话我会放在最后一节