유니티 게임 소스코드 공개합니다. 

오늘 두시간동안 잠깐 테스트해 볼려고 만들어 봤어요. 게임 소스코드도 같이 올리니 필요하신 분들은 참고만 하세요 ㅋㅋ 별로 도움 안되는 내용일 수도 있어요. 



게임 방법


원숭이 움직이기 : 키보드 좌우 방향키

원숭이 점프하기 : 키보드 스페이스키




게임구성



CameraController : 카메라 이동

원숭이 케릭터를 중심으로 카메라 시점을 이동시켜줍니다.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class CameraController : MonoBehaviour {


    private Vector3 offset;

    private GameObject monkey;



// Use this for initialization

void Start () {


        monkey = GameObject.Find("Monkey");

        offset = this.transform.position - monkey.transform.position;

}

// Update is called once per frame

void LateUpdate () {

        transform.position = offset + monkey.transform.position;

}

}





Monkey : 플레이어(원숭이) 제어 스크립트

원숭이를 움직이고 지면과 닿아 있을때만 점프 할 수 있도록 구현되어 있습니다. 적과 부딪칠경우에 HP가 떨어지는 코드는 구현전은 함정


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Monkey : MonoBehaviour {


    public float speed;

    public float jumpForce;

    public int hp;


    private BoxCollider2D footer;

private Rigidbody2D rb2d;

private Animator anim;


private bool isJumping;


// Use this for initialization

void Start () {


        footer = GetComponent<BoxCollider2D>();

rb2d = GetComponent<Rigidbody2D> ();

anim = GetComponent<Animator> ();


isJumping = false;

        hp = 100;

}

// Update is called once per frame

void FixedUpdate () {


float h = Input.GetAxis ("Horizontal");


bool isRunning = (Mathf.Abs(h)) > 0;

anim.SetBool("IsRun", isRunning);


        if (h > 0) transform.localScale = new Vector2(1, 1);

        if (h < 0) transform.localScale = new Vector2(-1, 1);


        transform.position += new Vector3(h, 0, 0).normalized * speed * Time.deltaTime;


        if (!isJumping && Input.GetKeyDown (KeyCode.Space))

            rb2d.AddForce(new Vector2(0, jumpForce));

    }


    private void OnCollisionEnter2D(Collision2D collision)

    {

        if (collision.gameObject.tag == "Island")

        {

            isJumping = false;

            anim.SetBool("IsJumping", isJumping);

        }

    }


    private void OnCollisionExit2D(Collision2D collision)

    {

        if (collision.gameObject.tag == "Island")

        {

            isJumping = true;

            anim.SetBool("IsJumping", isJumping);

        }

    }


    public void TakeDamage(int amount)

    {

        hp -= amount;


        if(hp <= 0)

        {

            // Gameover here

            int a = 10;

        }

    }

}




GroundGenerator : 땅 자동 생성코드

지면을 자동으로 생성해 주는 코드입니다. 그냥 가장 간단하게 스테이지 별로 땅을 몇개 생성할 것인지, 땅간에 거리를 얼마나 둘 것인지는 가장 간단한 방법으로 구현했습니다.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class GroundGenerator : MonoBehaviour {


    public GameObject[] grounds;


    private void Start()

    {

        int stage = PlayerPrefs.GetInt("Stage");

        GenerateGround(stage);

    }


    void GenerateGround(int stage)

    {

        int NbOfGrounds = (stage + 10) * 10;


        Vector2 location = new Vector2(0, -5);


        for (int i = 0; i < NbOfGrounds; i++)

        {

            int rndGroundIdx = Random.Range(0, 2);

            GameObject newGround = Instantiate(grounds[rndGroundIdx], this.transform, false);


            newGround.transform.SetParent(this.transform);

            newGround.transform.position = location;


            // set next location

            location.x += Random.Range(3.5f, 5.5f);


            float height = Random.Range(0.5f, 1.5f);

            location.y += Random.Range(0, 1) == 0 ? height : -height;

        }

    }

}




Fruits : 원숭이가 과일을 먹었을때 나타나는 파티클 효과와 UI 카운터


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Fruits : MonoBehaviour {


    public string fruitName;


    private void OnTriggerEnter2D(Collider2D collision)

    {

        if(collision.tag == "Player")

        {

            if (fruitName == "banana")

            {

                GameObject.Find("Canvas").GetComponent<UIController>().TakeBanana(Random.Range(1, 5));

                GameObject toInstanciate = Resources.Load<GameObject>("Prefabs/ParticleBanana");

                GameObject particle = Instantiate(toInstanciate);

                GameObject itemHolder = GameObject.Find("Items");

                particle.transform.SetParent(itemHolder.transform);

                particle.transform.position = this.transform.position;

                DestroyObject(particle, 3.0f);

            }

            else if (fruitName == "pineapple")

            {

                GameObject.Find("Canvas").GetComponent<UIController>().TakePineapple(Random.Range(1, 5));

                GameObject toInstanciate = Resources.Load<GameObject>("Prefabs/ParticlePineapple");

                GameObject particle = Instantiate(toInstanciate);

                GameObject itemHolder = GameObject.Find("Items");

                particle.transform.SetParent(itemHolder.transform);

                particle.transform.position = this.transform.position;

                DestroyObject(particle, 3.0f);

            }


            DestroyObject(gameObject);

        }

    }

}




Enermy : 적 제어 스크립트

아직은 플레이어(원숭이)와 부딪혔을경우에 재생되는 애니메이션을 제외하고는 아무것도 구현되어 있지 않습니다.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Enermy : MonoBehaviour {


    private Animator anim;


// Use this for initialization

void Start () {

        anim = GetComponent<Animator>();

}


    private void OnTriggerEnter2D(Collider2D collision)

    {

        if (collision.tag == "Player")

        {

            anim.SetTrigger("Attack");

        }

    }


}




이상입니다 ㅎㅎㅎ


프로젝트 전체를 올릴려고하니까 용량이 너무 크네요. 필요하신 분은 메일 주소 남겨주시면 보내드릴께요.