Материал: Разработка приложения для мобильных устройств

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ЗАКЛЮЧЕНИЕ

В результате разработки была создана игра «Parasite Attack» на платформу Android с помощью среды разработки Unity. В процессе работы были проведены: аналитический обзор целевой аудитории, требований к приложению, были разработаны и реализованы алгоритмы. Проведено тестирование и было выявлено, что разработанная игра соответствует разработанным требований.

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

3.      Руководство Unity [Электронный ресурс]: Unity-Руководство / Руководство по Unity- Режим доступа: http://docs.unity3d.com/ru/current/Manual/

.        Что такое платформа Eclipse и как ее использовать? [Электронный ресурс]: IBM DeveloperWorks- Режим доступа: https://www.ibm.com/developerworks/ru/library/os-eclipse/

.        Тарас Нудиев / Стоит ли переходить на Android studio? [Электронный ресурс]: Awesomedevelop- Режим доступа: http://awesomedevelop.blogspot.ru/2014/12/android-studio.html

.        Unity VS GameMaker: Studio [Электронный ресурс]: Stopgame - Режим доступа: http://stopgame.ru/blogs/topic/58024


ПРИЛОЖЕНИЕ

Скрипты проекта

)        BulletBehavior.csUnityEngine;System.Collections;class BulletBehavior : MonoBehaviour {float speed = 10;int damage;int type;GameObject target;Vector3 startPosition;Vector3 targetPosition;float distance;float startTime;GameManagerBehavior gameManager;

// Use this for initializationStart () {= Time.time;= Vector3.Distance (startPosition, targetPosition);gm = GameObject.Find("GameManager");= gm.GetComponent<GameManagerBehavior>();

}

// Update is called once per frameUpdate () {=target.transform.position;timeInterval = Time.time - startTime;.transform.position = Vector3.Lerp(startPosition, targetPosition, timeInterval * speed / distance);(gameObject.transform.position.Equals(targetPosition)) {(target != null) {

Transform healthBarTransform = target.transform.FindChild("HealthBar");

HealthBar healthBar = .gameObject.GetComponent<HealthBar>();.currentHealth -= Mathf.Max(damage, 0);(type==2){speedTarget= target.GetComponent<MoveEnemy>();(speedTarget.currentspeed==speedTarget.speed)

{.currentspeed*=0.5f;

}

}(healthBar.currentHealth <= 0) {(target);audioSource = target.GetComponent<AudioSource>();.PlayClipAtPoint(audioSource.clip, transform.position);.Gold += 50;

}

}(gameObject);

}

}

}

)        GameManagerBehavior.csUnityEngine;System.Collections;UnityEngine.UI;class GameManagerBehavior : MonoBehaviour {GameObject TowerPref;Text goldLabel;int gold;Text waveLabel;GameObject[] nextWaveLabels;bool gameOver = false;int wave;Text healthLabel;GameObject[] healthIndicator;int health;int Gold {{ return gold; }{= value;.GetComponent<Text>().text = "GOLD: " + gold;

}

}

// Use this for initializationStart () {= 0;= 1000;= 5;

}

// Update is called once per frameUpdate () {

}int Health {{ return health; }{(value < health) {.main.GetComponent<CameraShake>().Shake();

}= value;.text = "HEALTH: " + health;(health <= 0 && !gameOver) {= true;gameOverText = GameObject.FindGameObjectWithTag ("GameOver");.GetComponent<Animator>().SetBool("gameOver", true);

}(int i = 0; i < healthIndicator.Length; i++) {(i < Health) {[i].SetActive(true);

} else {[i].SetActive(false);

}

}

}

}int Wave {{ return wave; }{= value;(!gameOver) {(int i = 0; i < nextWaveLabels.Length; i++) {[i].GetComponent<Animator>().SetTrigger("nextWave");

}

}.text = "WAVE: " + (wave + 1);

}

}

}

)   MonsterData.csUnityEngine;System.Collections;System.Collections.Generic;UnityEngine.UI;

[System.Serializable]class MonsterLevel {int cost;GameObject visualization;GameObject bullet;float fireRate;

}class MonsterData : MonoBehaviour {List<MonsterLevel> levels;MonsterLevel currentLevel;Button SellB;Button UpgradeB;

// Use this for initializationStart () {

}

// Update is called once per frame

void Update () {

}MonsterLevel CurrentLevel {{currentLevel;

}{= value;currentLevelIndex = levels.IndexOf(currentLevel);levelVisualization = levels[currentLevelIndex].visualization;(int i = 0; i < levels.Count; i++) {(levelVisualization != null) {(i == currentLevelIndex) {[i].visualization.SetActive(true);

} else {[i].visualization.SetActive(false);

}

}

}

}

}OnEnable() {= levels[0];

}MonsterLevel getNextLevel() {currentLevelIndex = levels.IndexOf (currentLevel);maxLevelIndex = levels.Count - 1;(currentLevelIndex < maxLevelIndex) {levels[currentLevelIndex+1];

} else {null;

}

}void increaseLevel() {currentLevelIndex = levels.IndexOf(currentLevel);(currentLevelIndex < levels.Count - 1) {= levels[currentLevelIndex + 1];

}

}

}UnityEngine;System.Collections;class MoveEnemy : MonoBehaviour {

[HideInInspector]GameObject[] waypoints;int currentWaypoint = 0;float lastWaypointSwitchTime;float speed = 1.0f;float currentspeed;

// Use this for initializationStart () {= speed;= Time.time;

}

// Update is called once per frame

void Update () {

// 1

Vector3 startPosition = waypoints [currentWaypoint].transform.position;

Vector3 endPosition = waypoints [currentWaypoint + 1].transform.position;

// 2 pathLength = Vector3.Distance (startPosition, endPosition);

if (currentspeed != speed) {

}totalTimeForPath = pathLength / currentspeed;

float currentTimeOnPath = Time.time - lastWaypointSwitchTime;.transform.position = Vector3.Lerp (startPosition, endPosition, currentTimeOnPath / totalTimeForPath);

// 3 (gameObject.transform.position.Equals(endPosition)) {(currentWaypoint < waypoints.Length - 2) {

} else {

// 3.b (gameObject);

AudioSource audioSource = gameObject.GetComponent<AudioSource>();

AudioSource.PlayClipAtPoint(audioSource.clip, transform.position);gameManager =.Find("GameManager").GetComponent<GameManagerBehavior>();.Health -= 1;

}

}

}

)        MoveEnemy.csfloat distanceToGoal() {distance = 0;+= Vector3.Distance(.transform.position, [currentWaypoint + 1].transform.position);(int i = currentWaypoint + 1; i < waypoints.Length - 1; i++) {startPosition = waypoints [i].transform.position;endPosition = waypoints [i + 1].transform.position;+= Vector3.Distance(startPosition, endPosition);

}distance;

}void RotateIntoMoveDirection() {newStartPosition = waypoints [currentWaypoint].transform.position;newEndPosition = waypoints [currentWaypoint + 1].transform.position;newDirection = (newEndPosition - newStartPosition);x = newDirection.x;y = newDirection.y;rotationAngle = Mathf.Atan2 (y, x) * 180 / Mathf.PI+90;sprite = (GameObject).transform.FindChild("Sprite").gameObject;.transform.rotation = .AngleAxis(rotationAngle, Vector3.forward);

}

}

)        PlaceMonster.csUnityEngine;System.Collections;UnityEngine.UI;class PlaceMonster : MonoBehaviour {GameObject monsterPrefab;GameObject monster;GameManagerBehavior gameManager;Text test;

// Use this for initializationStart () {=.Find("GameManager").GetComponent<GameManagerBehavior>();

}

// Update is called once per frameUpdate () {

//monsterPrefab=gameManager.TowerPref;

}bool canPlaceMonster(){cost = monsterPrefab.GetComponent<MonsterData> ().levels[0].cost;monster == null && gameManager.Gold >= cost && monsterPrefab != null;

}OnMouseUp () {= gameManager.TowerPref;(canPlaceMonster ()) {

//if( monster==null && monsterPrefab!=null){= (GameObject)(monsterPrefab, transform.position, Quaternion.identity);audioSource = gameObject.GetComponent<AudioSource> ();.PlayOneShot (audioSource.clip);

gameManager.Gold -= monster.GetComponent<MonsterData> ().CurrentLevel.cost;

} else (canUpgradeMonster ()) {(monster != null) {

/*test.text="asa";.SetActive(true);.transform.position=new Vector3(2,2);*/.GetComponent<MonsterData> ().increaseLevel ();audioSource = gameObject.GetComponent<AudioSource> ();.PlayOneShot (audioSource.clip);.Gold -= monster.GetComponent<MonsterData> ().CurrentLevel.cost;

}

}

}bool canUpgradeMonster() {cost = monsterPrefab.GetComponent<MonsterData> ().levels[0].cost;(monster != null) {monsterData = monster.GetComponent<MonsterData> ();nextLevel = monsterData.getNextLevel();(nextLevel != null) {gameManager.Gold >= nextLevel.cost;

}

}false;

}

}

)        ShootEnemies.csUnityEngine;System.Collections;System.Collections.Generic;class ShootEnemies : MonoBehaviour {List<GameObject> enemiesInRange;float lastShotTime;MonsterData monsterData;Start () {= new List<GameObject>();= Time.time;= gameObject.GetComponentInChildren<MonsterData> ();

}Update () {target = null;minimalEnemyDistance = float.MaxValue;(GameObject enemy in enemiesInRange) {distanceToGoal = enemy.GetComponent<MoveEnemy>().distanceToGoal();(distanceToGoal < minimalEnemyDistance) {= enemy;= distanceToGoal;

}

}(target != null) {(Time.time - lastShotTime > monsterData.CurrentLevel.fireRate) {(target.GetComponent<Collider2D>());= Time.time;

}direction = gameObject.transform.position - target.transform.position;.transform.rotation = Quaternion.AngleAxis(.Atan2 (direction.y, direction.x) * 180 / Mathf.PI,Vector3 (0, 0, 1));

}

}OnEnemyDestroy (GameObject enemy) {.Remove (enemy);

}OnTriggerEnter2D (Collider2D other) {(other.gameObject.tag.Equals("Enemy")) {.Add(other.gameObject);del =.gameObject.GetComponent<EnemyDestructionDelegate>();.enemyDelegate += OnEnemyDestroy;

}

}OnTriggerExit2D (Collider2D other) {(other.gameObject.tag.Equals("Enemy")) {.Remove(other.gameObject);del =.gameObject.GetComponent<EnemyDestructionDelegate>();.enemyDelegate -= OnEnemyDestroy;

}

}Shoot(Collider2D target) {bulletPrefab = monsterData.CurrentLevel.bullet; startPosition = gameObject.transform.position;targetPosition = target.transform.position;.z = bulletPrefab.transform.position.z;.z = bulletPrefab.transform.position.z;newBullet = (GameObject)Instantiate (bulletPrefab);.transform.position = startPosition;bulletComp = newBullet.GetComponent<BulletBehavior>();.target = target.gameObject;.startPosition = startPosition;.targetPosition = targetPosition;animator = .CurrentLevel.visualization.GetComponent<Animator> ();.SetTrigger ("fireShot");audioSource = gameObject.GetComponent<AudioSource>();.PlayOneShot(audioSource.clip);

}

}

)        SpawnEnemy.csUnityEngine;System;System.Collections;

[System.Serializable]class Wave {GameObject[] enemyPrefab;float spawnInterval = 2;int maxEnemies = 20;

}class SpawnEnemy : MonoBehaviour {Wave[] waves;int timeBetweenWaves = 5;GameManagerBehavior gameManager;float lastSpawnTime;int enemiesSpawned = 0;GameObject[] waypoints;

// Use this for initializationStart () {

//Instantiate(testEnemyPrefab).GetComponent<MoveEnemy>().waypoints = waypoints;= Time.time;

//gameManager =GameObject.Find("GameManager").GetComponent<GameManagerBehavior>();

}

// Update is called once per frameUpdate () {currentWave = gameManager.Wave;.Random rng=new System.Random();number=rng.Next (0, waves [currentWave].enemyPrefab.Length);(currentWave < waves.Length) {timeInterval = Time.time - lastSpawnTime;spawnInterval = waves[currentWave].spawnInterval;(((enemiesSpawned == 0 && timeInterval > timeBetweenWaves) ||

timeInterval > spawnInterval) &&

enemiesSpawned < waves[currentWave].maxEnemies) { = Time.time;newEnemy = (GameObject)(waves[currentWave].enemyPrefab[number]);.GetComponent<MoveEnemy>().waypoints = waypoints;++;

}(enemiesSpawned == waves[currentWave].maxEnemies &&

GameObject.FindGameObjectWithTag("Enemy") == null) {.Wave++;.Gold = Mathf.RoundToInt(gameManager.Gold * 1.1f);= 0;= Time.time;

}

} else {.gameOver = true;gameOverText = GameObject.FindGameObjectWithTag ("GameWon");.GetComponent<Animator>().SetBool("gameOver", true);

}

}

}