勇者与羁绊 游戏开发日志(十)

勇者与羁绊 游戏开发日志(九)

  • 开发进度
    • 实现过程
      • 手牌扇形展开
      • 卡牌缩放功能
    • 运行效果
  • 寻找合作

开发进度

优化了手牌的显示

实现过程

想要的效果是手牌会像扇形一样摊开。
然后鼠标移上去这张牌就会放大。

手牌扇形展开

重新写了手牌显示的方式。
因为是扇形展开,所以实际上,每一张卡牌的中心点,都位于这个扇形的弧线上。
首先要确定的是,这条弧线所在圆的表达式。
因此需要三个参数:圆心坐标(x,y)和半径r

	private const float R = 2100.0f;//半径
    private const float Y = 2000.0f;//圆心Y值

圆心Y值与半即R是我设置的一个常量,可以适当调整,但是R-Y的值,就是位于中间的这张牌的Y的坐标值,所以R-Y应当为一个适当的固定值。
圆心X值就是屏幕的中心位置,即

	float p0 = Screen.width/2;

然后,要给每一张卡牌分配角度,
比如手牌有5张牌,则每张牌应为-10,-5,0,5,10这个角度。
另外还需确定卡牌的角度范围,比如只能位于-10°~10°之间。
因此,可以先通过卡牌数量,来求得相邻两张卡牌之间的角度间隔。

		//计算每张牌之间的角度间隔
        float deg_space;
        if (count < 2)
        {
            deg_space = 0;
        }
        else
        {
            deg_space = 2*CARD_ROTATE_DEGREE_LIMIT/(count-1);
            if (deg_space > 5) deg_space = 5;
        }

有了角度间隔,就可以求出每张卡牌对应的角度了。

		//遍历刷新每张牌的角度与位置
        int i = 0;
        foreach (Transform tf in HandPile_Parent.transform)
        {
            //计算角度
            float deg = (deg_space*i)-(deg_space*(count-1)/2);
            //通过角度,计算坐标位置
            float x = Mathf.Sin(deg*Mathf.Deg2Rad)*R+p0;
            float y = Mathf.Cos(deg*Mathf.Deg2Rad)*R-Y;
            //设置坐标位置
            tf.localPosition = new Vector3(x, y, 0);
            //设置角度
            tf.rotation = Quaternion.Euler(new Vector3(0,0,-deg));
            i++;
        }

卡牌缩放功能

卡牌缩放功能与之前做的卡牌选择的状态机有交叉重叠的地方。
就用了并发状态机的思路。
勇者与羁绊 游戏开发日志(十)_第1张图片
一开始处于监听状态。
当监听到了鼠标移入时,就进入放大状态。
若处于放大状态时,鼠标移出卡牌去选择目标了,此时应该不会缩小回去,因此放大状态时可以进入被选择状态。
勇者与羁绊 游戏开发日志(十)_第2张图片
缩小状态时添加了一个动画效果,使缩小显得更加流畅。
勇者与羁绊 游戏开发日志(十)_第3张图片
由于Scaler每秒都会-5,这个速度太快,所以很容易会把卡牌缩小到0.8这样的数字,因此有必要在这个缩小动画完成之后,对缩放值进行一次重设,重设成1.0。
勇者与羁绊 游戏开发日志(十)_第4张图片
在缩小的过程中,但还未完成时,若鼠标再次进入,则仍然要可以放大,所以缩小状态也有一个变化可以转向放大状态。
本来想在放大状态也做一个这样的动画,但是由于放大时会将整个卡牌向上位移,若是鼠标自卡牌底部进入卡牌时,如果有动画的话,就会出现鼠标因为卡牌向上位移所以触发了鼠标离开,然后卡牌缩小回去又触发了鼠标进入,于是开始不停的放大缩小的鬼畜效果,只好作罢。

运行效果

寻找合作

目前需要Unity开发程序员UI美术二次元人物原画师
数值、关卡、剧情等策划如果有兴趣也可以来聊一聊交流交流
如果有想参与项目的小伙伴,或者只是单纯想交朋友的,都可以添加我QQ:425202998

你可能感兴趣的:(独立游戏,Unity,游戏策划)