虽然现在只有一个场景,但场景还是蛮大的,如果两个地方隔得很远需要跑很久,为此我整了一个模仿宝可梦的大地图机制。
原始素材来自https://github.com/mixandjam/Kingdom-Select,一个比较华丽的动画效果。
通关点击下面的按钮来切换相机的位置,黄线是用LineRenderer组件绘制的,连线方式采用了贝塞尔曲线。
private Vector3 CalculateQuadraticBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2)
{
//求贝塞尔曲线中间点的位置,t为比例,p1为控制点
float u = 1 - t;
float tt = t * t;
float uu = u * u;
Vector3 p = uu * p0;
p += 2 * u * t * p1;
p += tt * p2;
return p;
}
目标点的两个圆环效果是由Dotween插件实现的。
public void Animate()
{
Sequence s = DOTween.Sequence();
s.Append(rect.DOSizeDelta(origSize, duration).SetEase(Ease.OutCirc));
s.Join(img.DOFade(1, duration / 3));
s.Join(img.DOFade(0, duration / 4).SetDelay(duration / 1.5f));
s.SetLoops(-1);
}
当然用动画机也可以实现并且更方便。
我在我的项目里新建一个Canvas,把素材移动进项目并把它们设置成独立的层级,用一个相机单独渲染该层,从而实现不与我的项目冲突。
我加入了进入按钮,在kingdomselect里加入了我要传送的地点名和坐标。
并且添加了一些动画效果。
cameraParent.DOLocalRotate(new Vector3(k.y, 0, 0), lookDuration, RotateMode.Fast).SetEase(lookEase).OnComplete(() => {
if (Mathf.Abs( (cameraParent.localEulerAngles.x-k.y)) % 360 < .1f)
EventCenter.Broadcast(EventDefine.ShowEnterButton,k.name);
}
此处做个笔记,unity的负角度在代码中用欧拉角获取时会转换成正的。
打开大地图界面,点击进入按钮后,玩家就能实现地图之间的传送。
暂且先到这里吧。