Unclaimed Project Is this your project? Claim it to unlock full analytics and manage your listing.
Claim This Project

Unity Project

Built with Unity 2020.3.18f1 · download the source from GitHub

Rhy Fall

Dependencies (36)

README

机试题目

要求说明

  • 1.UI自适应 为必做。若您无法完成本题目,则机试未通过。
  • 2-4 选择 一个题目 完成即可。注意:
    • 若您只能完成2,则您的编程能力可能无法完全胜任本职位,我司无法给您这个职位对应的薪资。若您对本工作有兴趣,可以进行沟通,重新商议薪资。
    • 若您能完成3且没有离题,则您可能可以胜任本职位。我司将根据完成情况进行进一步评估以决定。
    • 若您能完成4且没有离题,我司将根据完成情况进行进一步评估,并与您进行沟通、确认意向等。
  • 为节省您的时间, 2-4中请 只选择一道 您认为自己能合理完成的题目完成。
  • 您可以将完成的项目(建议zip,或者链接)通过招聘软件聊天窗口发给我,或发送至: contact@papomobi.com,邮件标题:[应聘] Unity 您的姓名

题目说明

1. UI自适应(必做)

将 Canvas 的 Screen Match Mode 改为 Match Width Or Height, 并将 Match 改为1(此时 Canvas 为横向适配)。 完成以下内容,要求在不同宽度的屏幕下都自动成立(使用 Unity UI 的适配能力,不可以使用自己编写或第三方的脚本):

  1. 创建5个Image方形(Unity自带的即可)
  2. 让这5个方形永远在屏幕底部横向排成一排
  3. 让这5个方形横向间距相同
  4. 当屏幕变宽时,5个方形宽度不变,间距变大,但依然保持间距相同
  5. 重新做一个1-3,当屏幕变宽时,5个方形宽度变大,间距不变

2. 飞行球(可选)

  1. 在脚本中配置三个参数

    public int plantCount;
    public float flyDuration;
    public float stayDuration;
    

    三个参数可以在不同脚本中,但需要能让 Unity Editor Inspector 识别并编辑。

  2. 游戏启动时,在空间中随机 plantCount 个三维坐标(称为星球点),Inspector 配置时请将 plantCount>=4。坐标上可以不放东西

  3. 玩家是一个球体。启动时总是在 plantCount 个星球点的随机某一个上

  4. 游戏开始后,玩家离开当前球体,以恒定的时间 flyDuration秒 移动到下一个随机的星球。

  5. 每次玩家登陆星球后,会停留 stayDuration秒,然后以flyDuration秒前往下一个随机星球

  6. 每次前往的下一个星球是随机的,但不得与当前、上次、上上次的星球相同

  7. 移动不可以使用DoTween,iTween等tweener动画库

3. 飞行球 plus(可选)

2. 飞行球 类似,但有以下区别:

  1. 球的运动轨迹必须为曲线。不得为折线,不得为直线。曲线的实现你可以选择第三方库,比如贝塞尔曲线库。注意:星球点的位置是依然是每次启动时随机的,因此你不能写死曲线路径
  2. 第4点,球的运动改为恒定的速度。如果你的曲线不适合计算曲线单位长度,允许一定程度的波动。flyDuration 改为 flySpeed 作为速度参数。
  3. 第7点,曲线可以使用第三方库。移动依然不允许使用任何 tweener 动画库。

4. 下落式音游(可选)

clone 本项目。请注意,本项目使用了 gitlfs 能力。你应该使用 git,本题目包含了对 git 能力的考查。注意:本项目中的音频文件 没有 损坏。

项目说明:

  1. RawResources/Balls 下面有红白两个球作为素材。
  2. 播放游戏时,MusicManager.MusicPlaySample 将播放音乐并不断更新音乐帧时间(Sample)。你应该认为这个时间是精确的。
  3. 游戏场景有标注“球的生成点”和“球的结束点”。如果看不到,请打开 Gizmos。
  4. 音乐有4拍,3拍轻,1拍重。MusicManager.MusicPiece.RhythmSample 属性标注了4个节拍的时间(sample)和类型(isMain)。
  5. MusicManager.TotalSamples 是这首歌的总的Sample数

题目说明:

  1. 请从生成点生成球,以float _ballMoveSpeed的速度匀速向下运动。当音乐刚好在节拍上时,球刚好运动到结束点。如果isMain=True,则这个球应为红球,否则为白球。

  2. 无论速度参数是快是慢,球都应该从生成点生成(因为不稳定误差,实际生成时应该在这个点或者离开了这个点些许距离),从结束点消失,且结束点匹配节拍。也就是说,当速度非常慢时,屏幕上应该能看到多个球。

  3. 请注意:你应该保证卡点,并避免任何的误差(因此你应该使用 MusicManager.MusicPlaySample 作为 Update 的时间驱动替代)。这些误差包括:

    • 音频系统的不稳定性:音频可能在某一瞬间比Time.time快了或者慢了一点。(但是 MusicManager.MusicPlaySample 反馈的当前时间总是正确的)
    • 帧率的不稳定性:玩家端的 Update 可能掉帧。Update 中的 deltaTime 并不能反映音频系统的时间差(反应的是帧率差)。如果玩家掉了3帧,那么下一帧的球应该位移了4帧的距离。
    • 浮点数累加差异:ball.transform.position = ball.transform.position + speed * deltaTime 不被允许,因为 Vector3 的累加会逐渐造成差异。
  4. tweener 动画库一般延迟不可控。不建议您使用 tweener 实现。如果使用,您需要阐述为何这个库能保证位移的精确性。

  5. 请完成这两种模式的一种或都完成:

    • [选其一] 因为第一拍时间较近,因此游戏开始时屏幕上可能没有球或者只有一个球;第一个球卡的点不一定是游戏的第一拍。

      参看示例视频: no_preload.mp4

    • [选其一] 游戏的第一拍开始,每一拍都有球在结束点踩点。因此前面的几个球可能不是在生成点生成。

      参看示例视频: preload.mp4

注意:

  1. 你不能修改或继承 Scripts/MusicManager.csScripts/MusicPiece.cs 中的代码和对象
  2. 你不能直接获取 RawResouces/Music 下面的对象
  3. 你只应该获取 MusicManager 这个组件(通过 Inspector 将这个对象添加到你的脚本字段的方式),并只访问 MusicManager 中的公共函数、变量
  4. 你可以随意使用、修改 RawResources/Balls 下面的任何内容
  5. BallManager 是一个简单的框架,你可以在此脚本上进行修改,减少你的编程准备工作。你可以对该对象进行任何的修改,也可以添加更多的脚本或对象,或者自己重新写一个脚本,来完成本题目。

Comments

No comments yet. Be the first!