Pull to refresh

Создание 2D казуалки на юнити

ничего

Начало


  • 1.Создание квадрата-спрайта
  • 2.Жизни куба
  • 3.Рейкаст


Создание


Берем любую квадратную картинку и перетаскиваем в наш проект.
Далее создаем пустой GameObject на сцене и из асетов перетаскиваем на наш GameObject картинку.
Вешаем на наш GameObject Rigitbody2D и два BoxCollider2D.Затем На одном из BoxCollider2D устанавливаем галочку Is Trigger.
На втором BoxCollider2D то который не Is Trigger делаем его чуть чуть побольше в моем случае это 8%
Устанавливаем таг Enemy.
Должно получиться вот так:

image

И коллайдеры на спрайте должны выглядеть вот так:

Piccy.info - Free Image Hosting

Создаем а затем вешаем на наш куб.Следующий скрипт.

using UnityEngine;
using System.Collections;

public class HPBLOC : MonoBehaviour
{
    public int hp;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
     
	    if (hp <= 0)
	    {
	        RayPaste.Score = RayPaste.Score + 10; //Добавляем очки.
	        Destroy(gameObject);//уничтожаем наш объект.
	    }
	}
}





Наш скрипт пока не работает поскольку отсутствует скрипт RayPaste и переменная Score.
Создаем скрипт RayPaste.

using System;
using UnityEngine;
using System.Collections;

public class RayPaste : MonoBehaviour {
    public Camera Camera1;//Камера которая будет пускать лучи
    public static int Score;//Очки
    //
    private bool Molotok;//Условие для инструмента молоток.
    private int Molotok_VUL=3;//колиство инструмента молоток.
    //
    private bool Bomb;
    private int Bomb_VUL = 6;
    public GameObject Explosions;// Объект создаваемый при взрыве бомбы
	// Use this for initialization
	void Start () {

	
	}

    void OnGUI()
    {
        GUI.TextArea(new Rect(50, 50, 100, 50), "Score:" + Score);
        if (GUI.Button(new Rect(Screen.width - 200,50, 200, 50),"МОЛОТОК:"+Molotok_VUL))//Создаем кнопку молоток
        {
            Bomb = false;//Запрещаем использование бомбы.
            if (Molotok_VUL > 0)
            {
                if (Molotok)
                {
                    Molotok = false;    //При повторном клике на молоток делаем инструмент не активным.
                }
                else
                {
                    Molotok = true;//при первом нажатии активируем молоток.
                }
                
            }
        }
        if (GUI.Button(new Rect(Screen.width - 200,100, 200, 50), "Бомба:" + Bomb_VUL))// тоже самое что и выше только для бомбы.
        {
             Molotok = false;
            if (Bomb_VUL > 0)
            {
               
                if (Bomb)
                {
                    Bomb = false;
                }
                else
                {
                    Bomb = true;
                }
            }
        }
    }
	
     
 
	
	// Update is called once per frame
	void Update () {
	 //В этом сегменте обрабатываем нажатие мишы(Для Андроида Input.GetMouseButtonDown(0) тиже работает
		if (Input.GetMouseButtonDown(0)){
			//Delete Objects

            RaycastHit2D aHit = new RaycastHit2D(); //инициализируем луч.
		    if (Camera1.orthographic)
		    {
 // Присваиваем нашему лучу позицию мыши при клике .
            aHit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
		    }
		   
            
			if(Input.GetMouseButtonDown(0)&&aHit.transform.tag!="STANLE"){//Если луч сталкивается с кубом а не с со стеной.
			        HPBLOC HPS = (HPBLOC)aHit.transform.GetComponent<HPBLOC>();//достаем из обекта жизни.
			        HPS.hp = HPS.hp - 1;//и отнимаем одну.

                if (Molotok && Molotok_VUL > 0)//Если молоток активирован то и имеется в достаточном количестве.
			    {
			        Molotok_VUL--; //Отнимает молоточек.
                    HPBLOC HPX = (HPBLOC)aHit.transform.GetComponent<HPBLOC>();
                    HPX.hp = HPX.hp - 6;  // Убиваем объект.
			    }
                if (Bomb && Bomb_VUL > 0)
                {
                    Bomb_VUL--;
// Создаем бомбу на позиции того обекта на который попал луч. 
                    GameObject explore =(GameObject) Instantiate(Explosions,aHit.transform.position,Quaternion.identity);
                    Destroy(explore,0.1f);//Убиваем бомбу
                }

			}
			
		}
	}
}



Потом создаем статичные объекты на которых все будет держаться.
Также как и куб только один коллайдер, BoxCollider2D.И присваиваем им таг «STANLE».
Создание бомбы ничем не отличается от создания квадрата за исключением того что на бомбу вешаем скрипт предоставленный ниже.

Следующим идет скрипт нашей бомбы.
using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour {
    void Start()
    {
        foreach (GameObject CLS in GameObject.FindGameObjectsWithTag("Enemy"))//Для каждого обекта с тагом Enemy.
        {
            if (Vector2.Distance(CLS.transform.position, transform.position) < 4f)// Измеряем позицию к тем обекта которые хотим взорвать 
            {
                if (CLS.name != "ICELVL2" && CLS.name != "ICELVL3" && CLS.name != "GIFT")//Если єто не цветные блоки  2 и 3 уровня
                {
                    HPBLOC HPX = (HPBLOC) CLS.transform.GetComponent<HPBLOC>();
                    HPX.hp = HPX.hp - 2;//То уничтожаем наш объект
                }
            }   
        }
    }
     

}





И финальная фаза создаем «Пропускной пункт для для подарков».
Создаем новый спрайт объект снизу.И присваиваем ему следующий скрипт.Присваиваем ему также статичный таг.


using UnityEngine;
using System.Collections;

public class NoCOlider : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D COLD)//Событие столкновения куба с пропускным пунктом.
    {
        if (COLD.name == "GIFT")//Если это наш гифт.
        {
            COLD.transform.GetComponent<BoxCollider2D>().isTrigger = true;//Делаем коллайдер триггерным,чтобы не взаимодействовать с пропускным пунктом.

        }
    }
}


На следующей платформе создаем скрипт.Который включает коллизию подарка.

using UnityEngine;
using System.Collections;

public class ADDCOLIDE : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D COLD)
    {
        if (COLD.name == "GIFT")
        {
            COLD.transform.GetComponent<BoxCollider2D>().isTrigger =false;
        }
    }
}


Исходный код приложения.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.