Вывод меню после смерти игрока
android555 Дата: Вс, 10 Апр 2016, 18:25 | Сообщение # 1
Сообщений: 5
Награды:
0
Репутация:
0
Статус: Offline
Ни как не пойму куда нужно вставить эти строкиКод
void OnDestroy { transform.parent.gameObject.GetComponent<GameOverScript>(); }
в скрипте PlayerScript что бы вызвать скрипт GameOverScript. В уроке сказано что нужно GameOverScript привязать к смерти. Это сам скрипт в который нужно добавить строкиКод
using UnityEngine; public class PlayerScript : MonoBehaviour { /// /// 1 - скорость движения /// public Vector2 speed = new Vector2(50, 50); // 2 - направление движения private Vector2 movement; void Update() { // 3 - извлечь информацию оси float inputX = Input.GetAxis("Horizontal"); float inputY = Input.GetAxis("Vertical"); // 4 - движение в каждом направлении movement = new Vector2( speed.x * inputX, speed.y * inputY); // 5 - Стрельба bool shoot = Input.GetButtonDown("Fire1"); shoot |= Input.GetButtonDown("Fire2"); // Замечание: Для пользователей Mac, Ctrl + стрелка - это плохая идея if (shoot) { WeaponScript weapon = GetComponent<WeaponScript>(); if (weapon != null) { // ложь, так как игрок не враг weapon.Attack(false); SoundEffectsHelper.Instance.MakePlayerShotSound(); } } // 6 - Убедиться что игрок не выходит за рамки кадра var dist = (transform.position - Camera.main.transform.position).z; var leftBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 0, dist)).x; var rightBorder = Camera.main.ViewportToWorldPoint( new Vector3(1, 0, dist)).x; var topBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 0, dist)).y; var bottomBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 1, dist)).y; transform.position = new Vector3( Mathf.Clamp(transform.position.x, leftBorder, rightBorder), Mathf.Clamp(transform.position.y, topBorder, bottomBorder), transform.position.z); } void FixedUpdate() { // 5 - перемещение игрового объекта GetComponent<Rigidbody2D>().velocity = movement; } void OnCollisionEnter2D(Collision2D collision) { bool damagePlayer = false; // Столкновение с врагом EnemyScript enemy = collision.gameObject.GetComponent<EnemyScript>(); if (enemy != null) { // Смерть врага HealthScript enemyHealth = GetComponent<HealthScript>(); if (enemyHealth != null) enemyHealth.Damage(enemyHealth.hp); damagePlayer = true; } // Повреждения у игрока if (damagePlayer) { HealthScript playerHealth = GetComponent<HealthScript>(); if (playerHealth != null) playerHealth.Damage(1); } } }
Это кстати сайт с которого я брал скрипты для игры - http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p6
Сообщение отредактировал android555 - Пн, 11 Апр 2016, 13:05
Сообщение Ни как не пойму куда нужно вставить эти строкиКод
void OnDestroy { transform.parent.gameObject.GetComponent<GameOverScript>(); }
в скрипте PlayerScript что бы вызвать скрипт GameOverScript. В уроке сказано что нужно GameOverScript привязать к смерти. Это сам скрипт в который нужно добавить строкиКод
using UnityEngine; public class PlayerScript : MonoBehaviour { /// /// 1 - скорость движения /// public Vector2 speed = new Vector2(50, 50); // 2 - направление движения private Vector2 movement; void Update() { // 3 - извлечь информацию оси float inputX = Input.GetAxis("Horizontal"); float inputY = Input.GetAxis("Vertical"); // 4 - движение в каждом направлении movement = new Vector2( speed.x * inputX, speed.y * inputY); // 5 - Стрельба bool shoot = Input.GetButtonDown("Fire1"); shoot |= Input.GetButtonDown("Fire2"); // Замечание: Для пользователей Mac, Ctrl + стрелка - это плохая идея if (shoot) { WeaponScript weapon = GetComponent<WeaponScript>(); if (weapon != null) { // ложь, так как игрок не враг weapon.Attack(false); SoundEffectsHelper.Instance.MakePlayerShotSound(); } } // 6 - Убедиться что игрок не выходит за рамки кадра var dist = (transform.position - Camera.main.transform.position).z; var leftBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 0, dist)).x; var rightBorder = Camera.main.ViewportToWorldPoint( new Vector3(1, 0, dist)).x; var topBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 0, dist)).y; var bottomBorder = Camera.main.ViewportToWorldPoint( new Vector3(0, 1, dist)).y; transform.position = new Vector3( Mathf.Clamp(transform.position.x, leftBorder, rightBorder), Mathf.Clamp(transform.position.y, topBorder, bottomBorder), transform.position.z); } void FixedUpdate() { // 5 - перемещение игрового объекта GetComponent<Rigidbody2D>().velocity = movement; } void OnCollisionEnter2D(Collision2D collision) { bool damagePlayer = false; // Столкновение с врагом EnemyScript enemy = collision.gameObject.GetComponent<EnemyScript>(); if (enemy != null) { // Смерть врага HealthScript enemyHealth = GetComponent<HealthScript>(); if (enemyHealth != null) enemyHealth.Damage(enemyHealth.hp); damagePlayer = true; } // Повреждения у игрока if (damagePlayer) { HealthScript playerHealth = GetComponent<HealthScript>(); if (playerHealth != null) playerHealth.Damage(1); } } }
Это кстати сайт с которого я брал скрипты для игры - http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p6 Автор - android555 Дата добавления - 10 Апр 2016 в 18:25
Левша Дата: Вс, 10 Апр 2016, 19:31 | Сообщение # 2
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Цитата android555 (
)
сайт с которого я брал скрипты для игры
Может проще там и спросить ?
X.cor.R (Prologue)
Сообщение Цитата android555 (
)
сайт с которого я брал скрипты для игры
Может проще там и спросить ?Автор - Левша Дата добавления - 10 Апр 2016 в 19:31
android555 Дата: Вс, 10 Апр 2016, 19:56 | Сообщение # 3
Сообщений: 5
Награды:
0
Репутация:
0
Статус: Offline
Цитата Левша (
)
Может проще там и спросить ?
Там нет форума или какой то обратной связи. Просто пример урока переведенный с английского(находил оригинал)
Сообщение Цитата Левша (
)
Может проще там и спросить ?
Там нет форума или какой то обратной связи. Просто пример урока переведенный с английского(находил оригинал)Автор - android555 Дата добавления - 10 Апр 2016 в 19:56
NapalmRain Дата: Пн, 11 Апр 2016, 10:26 | Сообщение # 4
Сообщений: 473
Награды:
0
Репутация:
31
Статус: Offline
1. оформляйте код в соответствующие теги. Сейчас это читать невозможно. 2. если брали скрипты с урока, внимательно читайте/смотрите урок.
Сообщение 1. оформляйте код в соответствующие теги. Сейчас это читать невозможно. 2. если брали скрипты с урока, внимательно читайте/смотрите урок. Автор - NapalmRain Дата добавления - 11 Апр 2016 в 10:26
android555 Дата: Пн, 11 Апр 2016, 12:39 | Сообщение # 5
Сообщений: 5
Награды:
0
Репутация:
0
Статус: Offline
Цитата NapalmRain (
)
1. оформляйте код в соответствующие теги. Сейчас это читать невозможно. 2. если брали скрипты с урока, внимательно читайте/смотрите урок.
1. Оформил. 2. Я уже перечитал там всё 100 раз. Поэтому и обратился за помощью.
Сообщение Цитата NapalmRain (
)
1. оформляйте код в соответствующие теги. Сейчас это читать невозможно. 2. если брали скрипты с урока, внимательно читайте/смотрите урок.
1. Оформил. 2. Я уже перечитал там всё 100 раз. Поэтому и обратился за помощью.Автор - android555 Дата добавления - 11 Апр 2016 в 12:39
NapalmRain Дата: Пн, 11 Апр 2016, 13:59 | Сообщение # 6
Сообщений: 473
Награды:
0
Репутация:
31
Статус: Offline
android555 , ну, достаточно очевидно, что эти строки нужно добавить в скрипт того объекта, который будет уничтожаться. Если у вас подразумевается, что игрок при смерти уничтожается, то добавляете эти строки в скрипт, который висит на игроке. или если у вас уничтожается какой-то компонент на игроке, до добавляется именно в этот компонент. Это стандартное инитиевское событие ОнДестртой ("При уничтожении") А вообще система, на мой взгляд , мягко говоря, не очень... Посоветовал бы вам почитать официальную документацию и посмотреть официальные уроки. Практически всё что нужно можно найти там.
Сообщение android555 , ну, достаточно очевидно, что эти строки нужно добавить в скрипт того объекта, который будет уничтожаться. Если у вас подразумевается, что игрок при смерти уничтожается, то добавляете эти строки в скрипт, который висит на игроке. или если у вас уничтожается какой-то компонент на игроке, до добавляется именно в этот компонент. Это стандартное инитиевское событие ОнДестртой ("При уничтожении") А вообще система, на мой взгляд , мягко говоря, не очень... Посоветовал бы вам почитать официальную документацию и посмотреть официальные уроки. Практически всё что нужно можно найти там.Автор - NapalmRain Дата добавления - 11 Апр 2016 в 13:59
android555 Дата: Пн, 11 Апр 2016, 19:15 | Сообщение # 7
Сообщений: 5
Награды:
0
Репутация:
0
Статус: Offline
Цитата NapalmRain (
)
А вообще система, на мой взгляд, мягко говоря, не очень...
Согласен, хоть я и не разбираюсь в скриптах мне тоже кажется что система корявенькая Мне кажется, если бы сам писал, то можно было сделать лучше. Но пока я только изучаю С#(в свободное время на работе читаю Герберт Шилдт - C# 4.0 Полное руководство) приходится брать что есть. А проблему я решил следующим способом: создал сцену Game Over и прикрепил к ней скрипт GameOverScript который выводит 2 кнопки - Retry & Main menu. В скрипте PlayerScript добавил следующее:Код
void OnDestroy { SceneManager.LoadScene("GameOver"); }
Сообщение Цитата NapalmRain (
)
А вообще система, на мой взгляд, мягко говоря, не очень...
Согласен, хоть я и не разбираюсь в скриптах мне тоже кажется что система корявенькая Мне кажется, если бы сам писал, то можно было сделать лучше. Но пока я только изучаю С#(в свободное время на работе читаю Герберт Шилдт - C# 4.0 Полное руководство) приходится брать что есть. А проблему я решил следующим способом: создал сцену Game Over и прикрепил к ней скрипт GameOverScript который выводит 2 кнопки - Retry & Main menu. В скрипте PlayerScript добавил следующее:Код
void OnDestroy { SceneManager.LoadScene("GameOver"); }
Автор - android555 Дата добавления - 11 Апр 2016 в 19:15
NapalmRain Дата: Пн, 11 Апр 2016, 20:49 | Сообщение # 8
Сообщений: 473
Награды:
0
Репутация:
31
Статус: Offline
android555 , тоже вариант. Но я бы посоветовал просто сделать canvas новой системы UI в юнити. Внутри сделать панель с двумя кнопками, и canvas выключить (снять галочку enabled с него) а при смерти enabled канваса снова делать тру.
Сообщение android555 , тоже вариант. Но я бы посоветовал просто сделать canvas новой системы UI в юнити. Внутри сделать панель с двумя кнопками, и canvas выключить (снять галочку enabled с него) а при смерти enabled канваса снова делать тру.Автор - NapalmRain Дата добавления - 11 Апр 2016 в 20:49
DjeeZ Дата: Вт, 12 Апр 2016, 06:49 | Сообщение # 9
Сообщений: 270
Награды:
8
Репутация:
291
Статус: Offline
Извините что вмешиваюсь, мужики. Обычно я молча читаю. Но сейчас, толком, не проснувшись вошел на форум и аж вздрогнул, прочитав название темы. В голове мгновенно возникла надпись: "Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта". Укокашивайте "персонажа" (перса), пожалуйста, в своих выражениях.
Сообщение Извините что вмешиваюсь, мужики. Обычно я молча читаю. Но сейчас, толком, не проснувшись вошел на форум и аж вздрогнул, прочитав название темы. В голове мгновенно возникла надпись: "Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта". Укокашивайте "персонажа" (перса), пожалуйста, в своих выражениях. Автор - DjeeZ Дата добавления - 12 Апр 2016 в 06:49
android555 Дата: Вт, 12 Апр 2016, 14:09 | Сообщение # 10
Сообщений: 5
Награды:
0
Репутация:
0
Статус: Offline
Цитата NapalmRain (
)
android555, тоже вариант. Но я бы посоветовал просто сделать canvas новой системы UI в юнити. Внутри сделать панель с двумя кнопками, и canvas выключить (снять галочку enabled с него) а при смерти enabled канваса снова делать тру.
Спасибо за совет, наверное я так и сделаю.Добавлено (12 Апр 2016, 14:09) ---------------------------------------------
Цитата DjeeZ (
)
"Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта".
Ну, не исключено что так и будет. Цитата DjeeZ (
)
Укокашивайте
Давненько я не слышал это словечко
Сообщение Цитата NapalmRain (
)
android555, тоже вариант. Но я бы посоветовал просто сделать canvas новой системы UI в юнити. Внутри сделать панель с двумя кнопками, и canvas выключить (снять галочку enabled с него) а при смерти enabled канваса снова делать тру.
Спасибо за совет, наверное я так и сделаю.Добавлено (12 Апр 2016, 14:09) ---------------------------------------------
Цитата DjeeZ (
)
"Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта".
Ну, не исключено что так и будет. Цитата DjeeZ (
)
Укокашивайте
Давненько я не слышал это словечко Автор - android555 Дата добавления - 12 Апр 2016 в 14:09