Unity經典游戲教程之:是男人就下100層


版權聲明:

  • 本文原創發布於博客園"優夢創客"的博客空間(網址:http://www.cnblogs.com/raymondking123/)以及微信公眾號"優夢創客"(微信號:unitymaker)
  • 您可以自由轉載,但必須加入完整的版權聲明!

是男人就下一百層

一、游戲介紹

是男人就下100層這是一個很受歡迎的小游戲。設計者所取的游戲名稱以及它特有的挑戰性令幾乎所有的男同胞們都一如既往的去暴機,這個游戲同樣也吸引了廣大的女性,相當有挑戰性。

  • 中文名 是男人就下100層
  • 原版名稱 man down
  • 游戲類型 休閑游戲

使用方向鍵左右控制小人,要防止被托上去擠死,防止掉下去摔死以及防止踩到陷阱。

二、場景搭建

  • 導入游戲資源,確保Sprites文件夾里的資源的Texture Type為Sprite

1

  • 打開Sprite Mode的Sprite Editor,對圖片進行切割,點擊Apply進行保存。

image

image

  • 將雲彩(cloud、darkcloud)、背景圖(game background)拖進場景,其中背景圖為背景(Background),其他作為前景(Foreground)。

image

image

image

三、主角設置

1.拖入主角

將主角拖入場景之中並將其命名為Player,將主角Player設置在Foreground前景層。
image

2.主角動畫

打開動畫控制器,創建主角的動畫walk動畫和Idel動畫。把主角圖片拖到時間軸上其中walk動畫每0.01秒一張。Idel動畫只需要拖一張。
image

image

3.主角移動的實現

  • 給主角添加剛體(Rigidbody 2D)、添加碰撞器(box Collider 2D)

image

  • 給主角添加腳本Player。給角色設置一個最大速度maxSpeed。設置一個力量force。保存Rigidbody 2D
    通過Horizontal取得水平上的按鍵0=什么也沒按。1=右鍵。2=左鍵.

    public float MaxSpeed = 4;
    public float Force = 4;
    public Rigidbody2D mybody;
    
    
     void PlayerMove()
        {
            var x = Input.GetAxis("Horizontal");
            
            var xforce = 0.0f;
    
            if(x > 0) 
            {
                xforce = Force*x;
                myAnimator.SetBool("walk", true);
                this.gameObject.transform.localScale = new Vector3(1, 1, 1);
            }
            else if(x < 0) 
            {
                xforce = Force*x;
                myAnimator.SetBool("walk", true);
                this.gameObject.transform.localScale = new Vector3(-1, 1, 1);
            }
            else 
            {
                xforce = 0;
                myAnimator.SetBool("walk", false);
            }
    
            var xspeed = mybody.velocity.x;
            if(Mathf.Abs(xspeed) >= MaxSpeed) {
                if(xforce * xspeed > 0) {
                    xforce = 0;
                }
            }
    
            mybody.AddForce(new Vector2(xforce, 0)); 
        }
    

四、雲彩設置

1.將雲彩拖入場景

將雲彩拖入場景之中並將其命名為cloud和darkcloud將雲彩cloud和darkcloud設置在Background背景層。
image

2.設置雲彩的生成

給雲彩添加碰撞體Box Collider 2D,添加腳本CloudSpawn,建立cloud預制體和主角預制體player_0。將預制體Cloud和player_0拖入,Cloud 、player中。確保min x、max x、Distance Y、LastCloud Y的值。

image

 void CreateClouds()
    {
        var worldSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0));
        
        var worldSize2 = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0));
        
        minX = worldSize2.x + 1f;
        maxX = worldSize.x - 1f;

        lastCloudY = 0;
        for (var i = 0; i < clouds.Count; i++)
        {
            var cloud = clouds [i];
            Vector3 pos;
            float x = 0;
            if (controlCloud == 0)
            {
                x = Random.Range(0, maxX);
                controlCloud = 1;
            }
            else if (controlCloud == 1)
            {
                x = Random.Range(minX, 0);
                controlCloud = 2;
            }
            else if (controlCloud == 2)
            {
                x = Random.Range(1, maxX);
                controlCloud = 3;
            } 
            else if (controlCloud == 3)
            {
                x = Random.Range(minX, -1);
                controlCloud = 0;
            }
            pos = new Vector3(x, lastCloudY, 0);
            cloud.transform.localPosition = pos;

            lastCloudY -= distanceY;
            
        }

    }

3.設置雲彩的特殊功能

設置游戲角色player碰到darkCloud就會死亡

image

五、設置背景的滾動

游戲背景需要不斷滾動,先把游戲背景圖片再復制兩份再把復制的背景拼接好注意不要留縫隙,再給圖片添加碰撞體(Box Collider 2D)和腳本BG Scaler

image

image

void Start () {
        SpriteRenderer sp = this.gameObject.GetComponent<SpriteRenderer>();
        float width = sp.bounds.size.x;
       
	
        float swidth = Screen.width;
        float sheight = Screen.height;
        Debug.Log(swidth+" : "+sheight);

        float sz = Camera.main.orthographicSize;
        float sc = sheight/swidth;
       

        float cameraHeight = sz*2;
        float cameraWidth = cameraHeight/(sc);

        float spriteScale = cameraWidth/width;
        this.transform.localScale = new Vector3(spriteScale, 2, 0);
	}

五、角色死亡

設置游戲角色player碰到darkcloud就死亡和碰到游戲上下bound死亡。

    if (other.gameObject.tag == "darkCloud") 
		{
			 
			var cs = Camera.main.GetComponent<CameraScript> ();
			cs.enabled = false;
			transform.localPosition = new Vector3 (1000, 1000, 0);
			//GameController.Instance.ShowGameOver (score, CoinCount);

            AudioSource.PlayClipAtPoint(dealSound, transform.position);

			LifeCount--;
           
			GameManager.Instance.CheckGameState (LifeCount, CoinCount, score);
		}
		
    else if (other.gameObject.tag == "bound")
        {
            var cs = Camera.main.GetComponent<CameraScript>();
            cs.enabled = false;
            transform.localPosition = new Vector3(1000, 1000, 0);
            //GameController.Instance.ShowGameOver(score, CoinCount);

            AudioSource.PlayClipAtPoint(dealSound, transform.position);

            LifeCount--;
           
            GameManager.Instance.CheckGameState(LifeCount, CoinCount, score);
        }

六、背景音樂

先新建一個空節點命名為Music,在文件夾中找到音樂天空之城將其拉入Music選擇循環播放(Loop),適當選擇音量(Volime)。

image

image

七、擴展方向

  • 增加血量扣血
  • 增加道具吃道具加分
  • 添加敵人
  • 當層數越來越多時候速度越來越快


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM