Unity3D小游戏之见缝插针ヾ(๑╹◡╹)ノ"

  emmmm,大家好,我又很不要脸的开始介绍我模仿制作的小游戏了,今天我们要做的小游戏就是见缝插针,那么话不多说,接下来就开始我们的正题。(~ ̄▽ ̄)~ 

  要做这款游戏,我们首先还是得搞清楚这个游戏的核心功能是什么。首先针从一个点射向圆盘,然后针会粘在圆上一起转动,然后圆盘上的针数量越多,得分就越高,当针与针相互触碰是游戏结束。

  那么我们可以大致分成三个部分来做,一个部分是出生点生成针的预制体并射出,一个部分是针射出后跟随圆盘一起做旋转,再就是针与针之间触碰的死亡条件。

  开始第一个功能。点击生成针的预制体并且射出。٩(๑❛ᴗ❛๑)۶

  针的预制体的制作比较简单,一个圆加一个细长的长方形就够了。将它存为预制体后,我们需要做的就是将它从出生点射出。那么我们可以制作一个出生点,将生成预制体的脚本挂载在上面。

  if(Input.GetButtonDown("Fire1"))

{
Instantiate(m_gameboject);
music.Play();
}

  值得一提的是,按下“Fire1”键后生成预制体,这个Fire1键是什么键呢。在Edit->Project Setting->Input中我们可以看到Fire1的定义,发现它并不是指单独某一个键,左ctrl,鼠标左键等等都是Fire1,这是Unity为我们多平台开发提供的便利。把这个作品打包成安卓apk之后,点击屏幕就是Fire1键,非常方便有木有,比我们去在屏幕上设置一个透明的button空间来监听方便了不是一星半点。

  预制体能够产生了,接下来需要让它移动。我们有多种方法让它移动,比如添加rigidbody使用MovePosition方法或者AddForce方法,或者Transform的Translate方法,都可以实现移动,这里我选择用第一个方法用rigidbody.MovePositon来实现,(此时不需要用重力,在2D中body type选择Kinematic可以关闭重力,3D中可以直接勾选不使用重力)这样做有一个好处下文会提到。( ̄▽ ̄)~*

  接下来实现的就是预制体粘在圆盘上一起转动了。首先圆盘得转动。

  transform.Rotate(0, 0, speed * Time.deltaTime);//由于是写在Update中,为了防止调用过多所以乘一个Time.deltaTime。

  那么将预制体粘在圆盘上怎么实现呢。很简单,利用父物体旋转子物体会跟着旋转这一点,我们只需要针触碰到圆盘时将针设置为圆盘的子物体,这样就可以让针跟着圆盘一起旋转,实现了粘在一起的效果。

  上一个案例说过,两个物体要碰撞,必须至少其中一个有刚体,这就是我们前面为什么要用刚体实现物体移动的原因。将针的身子与针头分辨添加Collider,并且勾选Is Trigger选项,当触碰物体为圆盘时将其设置为父物体。

  if(other.tag=="Spin")

  this.transform.SetParent(other.gameObject.transform);

  恩,这样前面两个功能就实现了,其实第三个功能和第二个中粘贴差不多,当触碰到的物体为针时,游戏死亡。

  if(other.tag=="Pin")

  {

  Defeat.playmusic();

  isgameover = true;

  Camera.main.backgroundColor = Color.red;

  m_rotate.speed = 50f;

  StartCoroutine(rescene());

 

  }//我这里的死亡判断是播放defeat脚本中的死亡音乐,主摄像机画面变为红色,圆盘旋转速度变慢,为了让死亡场景更加明显

  public IEnumerator rescene()

{
yield return new WaitForSeconds(2.2f);
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}//这个协程在死亡时等待2.2S后重载这个场景本身(但是貌似有bug(T▽T))

  至此,三个功能基本完成了,核心功能应该算是达到了(๑╹◡╹)ノ"""

  可能这个游戏有些简单,我这里再补充几点可以丰富一下游戏内容,比如产生预制体时播放音效

  public AudioSource music;

  music.Play();

  比如多一个针之后圆盘速度增加,或者圆盘反向旋转

  m_rotate.speed += 8;
  int t = Random.Range(1, 4);
  if (t == 1)
  m_rotate.speed = -m_rotate.speed;

  用一个text控件来记录有多少根针,或者事先定义一个数量,来实现倒计时,达到0时代表成功等等。

  目前我能想到的就是这么多,如果有好的想法可以自行添加,刚把跌!(๑´ㅂ`๑) 

  由于我自己做的游戏虽然实现了基本的得分死亡功能,但是存在诸bug,比如死亡时重载场景因为需要等待2.2s,此时依然能生成预制体,而且依然能有效得分,这显然是不合理的,再就是针在粘贴在圆盘上的时候,有时候会造成长短不一的情况,我暂时还不知道这是什么原因,所以我就不把自己的拙作发出来了,如果有小伙伴做出了好的作品欢迎上传讨论 ̄ω ̄=

  革命尚未成功,同志仍需努力

  

 

  

posted @ 2017-08-27 20:53  久居深海冷不冷  阅读(816)  评论(0)    收藏  举报