通过Unity+CurvedUI实现轮播效果,思路是将几张UI图按照较准确的位置放在空物体(作为父物体)下方,通过旋转父物体实现图片的旋转。
一、UI构建
简单构建UI结构,注意使用一个空物体作为几张轮播图的父级(记得Reset),大体结构如下:
二、CurvedUI实现UI的弯曲
1)导入CurvedUI(收费的插件,就不提供,使用其他弯曲UI的插件都可以),添加下面的组件并根据需求调整Angle。
2)在父物体中添加下列代码,如下图:
using UnityEngine.UI;public class uiCon1 : MonoBehaviour
{public bool DevLeft = true;public float multiply = 20f;public bool isRestriction = true;public float boundary = 5f;private float dis = 0f;private float curPos;private float lastPos;private bool isMove;private float defTime = 0f;public float minDis = 5f;private Vector3 oriPos;// Start is called before the first frame updatevoid Start(){dis = 0f;defTime = 0f;isMove = false;DevLeft = true;oriPos = this.GetComponent<Transform>().position;}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){curPos = Input.mousePosition.x;isMove = true;}if (Input.GetMouseButtonUp(0)){isMove = false;}if (isMove){if (Time.time - defTime >= 0.1f){defTime = Time.time;if (Mathf.Abs(Input.mousePosition.x - curPos)>= minDis){lastPos = Input.mousePosition.x;dis = (lastPos - curPos) / Mathf.Abs(lastPos - curPos);this.transform.eulerAngles += new Vector3(0, ((DevLeft)?(-1f):1f)*multiply*dis, 0);curPos = lastPos;}}}if (isRestriction){RectTransform[] movePos = this.transform.GetComponentsInChildren<RectTransform>(true);foreach (var item in movePos){if (item.position.z > (oriPos.z + boundary)) item.gameObject.SetActive(false);else item.gameObject.SetActive(true);}}}
}
3)根据需求,调整下列几个属性即可