Урок 1. Основы Unity.
На простом примере мы научимся самым основам Unity.
Создаем первый объект - капсулу (GameObject -> Create other -> Capsule). Она будет символизировать боевой корабль.
Осветим его источником света Directional light: Game Object -> Create Other -> Directional Light.
Создаем prefab: Assets -> Create -> Prefab. Назовем его Fighter. Перетащим в него нашу капсулу. Этот объект будет нашим звездолетом.
Создадим для префаба скрипт, который будет управлять его поведением: ПКМ на префаб -> Create -> C Sharp Script. Изменим имя скрипта на Fighter. Перетащим его в префаб Fighter. Теперь скрипт связан со звездолетом.
Получится, примерно, следующее:
Assets -> Sync Mono Develop project.
Для управления движением звездолета добавим в скрипт Fighter следующий код:
using UnityEngine;
using System.Collections;
public class Fighter : MonoBehaviour {
public float rotateSpeed = 5;
public float accel = 0.1f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKey(KeyCode.UpArrow)) {
Accelerate();
}
if (Input.GetKey(KeyCode.LeftArrow)){
TurnLeft();
}
if (Input.GetKey(KeyCode.RightArrow)) {
TurnRight();
}
}
private void Accelerate(){
rigidbody.velocity = rigidbody.velocity + transform.up*accel;
}
private void TurnRight() {
transform.Rotate(0, 0, -rotateSpeed);
}
private void TurnLeft() {
transform.Rotate(0, 0, rotateSpeed);
}
}
Добавим текстуру к Звездолету: ПКМ в поле Project -> Create -> Material. В инспекторе (Inspector) можно выбрать цвет и картинку, которая будет текстурой.
Для того, чтобы звездолет далеко не улетал, замкнем пространство функцией CloseSpace:
private void CloseSpace() {
var newPos = transform.position;
if (transform.position.x < -maxX) {
newPos.x = maxX;
}
if (transform.position.x > maxX) {
newPos.x = -maxX;
}
if (transform.position.y < -maxY) {
newPos.y = maxY;
}
if (transform.position.y > maxY) {
newPos.y = -maxY;
}
transform.position = newPos;
}
Эту функцию надо поместить в Update. Кроме того, в классе Fighter надо объявить переменные:
public float maxY = 10f;
public float maxX = 25f;
public float maxY = 10f;
public float maxX = 25f;
Добавим ограничение по скорости:
private void CorrectVelocity() {
var newVelocity = rigidbody.velocity;
if (newVelocity.x > maxVelocity) {
newVelocity.x = maxVelocity;
}
if (newVelocity.y > maxVelocity) {
newVelocity.y = maxVelocity;
}
if (newVelocity.z > maxVelocity) {
newVelocity.z = maxVelocity;
}
rigidbody.velocity = newVelocity;
}
Создадим еще один префаб: Projectile (снаряд). Добавим в него сферу. Добавим туда Rigidbody (Component -> Physics -> Rigidbody).У сферы поставим Scale = 0.3 по всем измерениям.
Снимем галочку с Use Gravity.
Создадим скрипт Projectile и добавим в префаб Projectile:
Создадим скрипт Projectile и добавим в префаб Projectile:
using UnityEngine;
using System.Collections;
public class Projectile : MonoBehaviour {
public float speed = 30f;
public float lifeTime = 1f;
private float timeLeft;
// Use this for initialization
void Start () {
timeLeft = lifeTime;
}
// Update is called once per frame
void Update () {
Move();
Tick();
}
public void OnCollisionEnter(Collision collision) {
Destroy(collision.gameObject);
Destroy(gameObject);
}
private void Move() {
transform.position += transform.up * speed * Time.deltaTime;
}
private void Tick() {
timeLeft -= Time.deltaTime;
if (timeLeft < 0) {
Sacriface();
}
}
private void Sacriface() {
Destroy(gameObject);
}
}
Наш снаряд будет самоликвидироваться через lifeTime секунд. За это отвечает функция Tick(). Rigidbody нам нужен для определения столкновений. При столкновении вызывается функция OnCollisionEnter(). В нее добавлено уничтожение самого снаряда и объекта, с которым он столкнулся.
Добавим в код скрипта для звездолета (Fighter) функцию Fire:
private void Fire() {
Vector3 pos = transform.position;
pos += transform.up * 1.3f;
Instantiate(projectile, pos, transform.rotation);
}
Для ее работы нужна переменная класса projectile:
public GameObject projectile = null;
В редакторе Unity перетащим в нее префаб Projectile.
Функция Instantiate создает новый игровой объект, клонируя projectile.
Теперь создадим врага: капсулу, к которой добавлен Rigidbody.
Сохраняем сцену под любым именем (File -> Save Scene).
Запуск нашей программы осуществляется нажатием на кнопку Play (черный треугольник сверху посередине).
Итоги.
Мы научились следующим вещам:
Сохраняем сцену под любым именем (File -> Save Scene).
Запуск нашей программы осуществляется нажатием на кнопку Play (черный треугольник сверху посередине).
Итоги.
Мы научились следующим вещам:
- Создание игровых объектов простейшей формы, а также источников света.
- Создание префабов.
- Создание скриптов и связывание их с префабами.
- Накладывание текстур на игровые объекты.
- Движение игровых объектов.
- Столкновение объектов при помощи движка.
- Клонирование объектов из скрипта.
- Уничтожение объектов из скрипта.
Полный проект: здесь.
Комментариев нет:
Отправить комментарий