独立任务-第11周; 重装

这是我在开发日志中的第十条,有关我在2个月内(据称)制作游戏并将其发布作为课程目标的一部分的努力。 您可以阅读以下系列的上一篇文章:

独立任务-第十周; 重构
这是我在开发日志中的第十个条目,关于我在2个月内(据称)制作游戏并发布该游戏的努力… medium.com

这是内部进步的又一周,尽管我将尝试展示我们已完成的尽可能多的事情。 让我们开始吧…

其他:

重构代码已完全完成,我对结果非常满意。 我提到我已经为游戏中发生的大多数常规事件(WaveManager,XPManager,GUIManager等)创建了一个管理器,而GameManager将所有内容组合在一起并很好地管理了这些管理器。

但是,在进行游戏时,我想到了几件事。 首先,波浪系统拖曳每个水平的长度。 刚开始时,我将每个级别的目标定为3-5分钟-每个级别最多允许7分钟。 随着波浪的引入,平均水平的长度跃升到两倍。 那是不可接受的。
之前,其背后的原因是波浪是有道理的,因为敌人冲入了屏幕底部的火中并死亡,如下所示:

新系统绘制得不好

左上角; 有通常显示的图片,下面的破折号是您等待充电之前所拥有的长矛数。
希望在下一篇文章(或更早)上,我们将有2个版本的演示用于测试和反馈。

错误和代码:

放弃您已经工作了多个小时(在本例中为几天)的工作并不容易。 WavesManager确实使我花费了将近78个小时的工作。 尽管这似乎是一项容易的任务,并且许多程序员可以在睡眠中编写它,但对我而言并不是那么容易。 我总是遇到某种错误,并且大多不得不独自解决。

在完成WaveManager的代码并按我喜欢的方式工作100%之后,我决定如上所述进行废弃,每个级别的时间发生了很大变化。

一旦了解了这一点,我便开始为新机制编写代码。 刚开始时这并不容易,因为我不确定从何处着手,根据碰撞次数使弹丸变慢,但我终于找到了方法。

这是到目前为止的代码:

 使用UnityEngine; 
使用System.Collections;

公共类PlayerProjectile:MonoBehaviour {

公众持股速度;
public float buttonPressedTime;
公共浮动DragConstant = 0.2f;
私人Rigidbody2D rb;
public int实力;

public int WallStrengthReduction = 2;
public int EnemyStrengthReduction = 1;

私有Vector3方向;
私人LayerMask oldLayer = LayerMask.NameToLayer(“ Default”);
私有LayerMask voidLayer = LayerMask.NameToLayer(“ Void”);

无效开始()
{
rb = GetComponent ();

}

公共无效Launch()
{
GameManager.instance.ProjectileThrown = true;
float totalTime = Mathf.Clamp(Time.time-buttonPressedTime,0,1);
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

如果(totalTime> = 0.5f)
{
强度= 4;
}
否则,如果(totalTime <0.5)
{
强度= 2;
速度= 0.035f;
}




transform.parent = null;
rb.isKinematic = false;
GetComponent ()。isTrigger = false;

方向= mousePosition-transform.localPosition;
Vector3旋转=方向;
direction.Normalize();
rb.drag = 0;
rb.AddForce(direction * Speed);
浮角=(Mathf.Atan2(rotation.y,rotation.x)* Mathf.Rad2Deg);
四元数qAngle = Quaternion.AngleAxis(angle,Vector3.forward);
transform.rotation =四元数.Slerp(transform.rotation,qAngle,Time.deltaTime * Speed);
//实施机械师,在地图上定位目标位置并拖动以强制使用。
//然后,弹丸计算力,然后向该位置发射。

}

void OnCollisionEnter2D(Collision2D其他)
{
如果(强度> 1)
{
如果(other.gameObject.tag ==“ Wall”)
{
强度-= WallStrengthReduction;
rb.drag = DragConstant * EnemyStrengthReduction;
}
否则,如果(other.gameObject.tag ==“敌人”)
{
gameObject.layer = voidLayer;
力量-=减少敌人力量;
rb.drag = DragConstant * WallStrengthReduction;
}
}
否则(强度<= 1)
{
如果(other.gameObject.tag ==“ Wall” || other.gameObject.tag ==“敌人”)
{
GameManager.instance.spawnBall.DestroyBall();
}
}
}

void OnCollisionExit2D(Collision2D其他)
{
如果(other.gameObject.tag ==“敌人”)
{
gameObject.layer = oldLayer;
}
}

无效Update()
{
如果(rb。拖动<0.02f &&强度<= 1)
{
GameManager.instance.spawnBall.DestroyBall();
}

}
}

我们的想法是,我们设置一个表示弹丸强度的整数(即,弹丸死亡前可以进行多少次弹跳)。 每次跳动,数字都会减少,并且会施加一些阻力。 一旦数字达到0或阻力达到小于0.02,则弹丸立即被销毁。

这很粗糙,但是可以满足我的要求。 但是,事实证明非常棘手的是我希望弹丸穿过敌人而不是像墙壁一样从敌人身上弹开的那部分。 在过去的一天里,这让我无所适从。
您可以从代码中看到在发生碰撞时将层从“ 默认 ”层切换到“ ”层的情况。 “ 虚空 ”层不与任何物体碰撞,它设置为暂时保留弹丸,直到它穿过敌人为止。
一切都很好,但是测试一下,实际上是行不通的。 第一次碰撞无论发生什么,都会从敌人身上反弹。 但是,将记录下一次冲突,并且会切换到“ Void ”,但是它永远不会切换回“ Default ”。

我曾考虑过使用Physics2D.ignoreCollisions(),但它会产生类似的结果。 唯一的区别是,在最终最终切换之前,它需要经过几次碰撞,以后再也不会切换回去。
这也是我今天没有添加任何演示以获取反馈的主要原因。 我无法使其正常工作。 希望我能在下周一解决。

艺术; 图形和眼糖果:

一如既往,我们无情的Serg一直在艺术部门努力工作- 敲木头 -他提出了一些概念,以下是这些概念:

地精的概念

&amp; lt; img class =“ progressiveMedia-noscript js-progressiveMedia-inner” src =“ https://d262ilb51hltx0.cloudfront.net/max/800/1*4VtP6p-0auQc8ISu2ARq0Q.png”&amp; gt;

这是游戏中最棘手的敌人之一; 一个小妖精。 我在选择Serg时遇到了困难,但是最终我们选择了以下版本(颜色为最终版本):

当心,他很讨厌!

当心,他很讨厌!

_

当心,他很讨厌!

_&amp; lt; img class =“ progressiveMedia-noscript js-progressiveMedia-inner” src =“ https://d262ilb51hltx0.cloudfront.net/max/800/1*KInvud80twdAR_PTvHPYDg.png”&amp; gt;

另一方面,我们有一个黑暗的巫师,这是迄今为止您将在游戏中遇到的最困难的敌人,它不是老板:

&amp; lt; img class =“ progressiveMedia-noscript js-progressiveMedia-inner” src =“ https://d262ilb51hltx0.cloudfront.net/max/800/1*_UmbjJSjEd_z-bnJQLMarw.png”&amp; gt;

他很黑…真的很黑而且没有饼干

我最诚实地爱最后一个。 不知道为什么,但是它抓住了黑暗,却没有像第一个那样衰老,或者像第三个一样死灵。 所以我们去了。

但是事实证明,具有挑战性的是让玩家看起来正确。 在我们之前的文章中,我们将武器扩展成一个棍棒,球反弹。 使防护罩看起来像以前一样看起来并不现实。 因此,我们设法使事情变得有趣,并改变了外观:

仍然需要一些工作,但是我认为它比以前更好。

&amp; lt; img class =“ progressiveMedia-noscript js-progressiveMedia-inner” src =“ https://d262ilb51hltx0.cloudfront.net/max/800/1*X1coRpFnR0SyaCEGs9uNpQ.png”&amp; gt;

目前,Serg已停止研究玩家精灵,以测试新技工并等待其反馈。 如果人们喜欢它,精灵将再次改变。 如果没有,那么我们回到现在的位置,他可以继续。 同时,他正在为Rat,Goblin,Wizard和Throne Room的其他背景制作新动画,您可以在下面看到最终的草图:

最后摊牌的地点。

最后摊牌的地点。

_&amp; lt; img class =“ progressiveMedia-noscript js-progressiveMedia-inner” src =“ https://d262ilb51hltx0.cloudfront.net/max/800/1*IQXIm4IBWTLX0NzGsobpeg.png”&amp; gt;

另一方面,我们想创建一个预告片,以展示到目前为止我们所做的工作。 稍后将证明它很有用。 在反馈刺激新的机械师变化之前,我一直在努力。 但是我认为继续进行下去并不会造成任何伤害。

不幸的是,我不是专业的视频编辑器(预告片制作人?),所以我尽力遵守我对预告片的了解

  • 简短的视频(1分钟顶部)。
  • 不要使用介绍,而只是进入重要部分。
  • 展示游戏玩法并很好地展示。
  • 描述你的游戏; 显示不告诉。
  • 很棒的音乐。
  • 效果很好。
  • 一声巨响

可悲的是,我知道我缺乏“巨大的影响”和整体的“轰隆声”。 就像我说的那样,在我不从事视频编辑之前,我从未制作过预告片,而且我不知道有什么软件可以创建专业的预告片(除了Microsoft Movie Maker以外,我显然使用过它)。 这是我得到的:

没什么吧?

进度结果:

在我之前提到我们正在接近Alpha时,似乎反馈使我们有些落后,许多事情需要更改以使其看起来更加精致。 我当然不能怪反馈,我不得不说我希望得到更多反馈。 反馈越多,游戏效果越好。

希望在下周之前,我们将提供2个演示版本,您可以将它们进行比较,并通过向我们提供您更喜欢哪个以及为什么的反馈来帮助我们。 就是说,如果您希望到目前为止已经阅读或在构建中进行过测试,请考虑订阅我们的新闻通讯(如果您不想注册Medium)以获取即时新闻:

马瑟斯城堡
Castle Mashers电子邮件表格 eepurl.com