Вывод меню после смерти игрока - Форум Игроделов
Чт, 02 Май 2024, 07:52 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Вывод меню после смерти игрока
Вывод меню после смерти игрока
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 ()
А вообще система, на мой взгляд, мягко говоря, не очень...


Согласен, хоть я и не разбираюсь в скриптах мне тоже кажется что система корявенькая smile
Мне кажется, если бы сам писал, то можно было сделать лучше. Но пока я только изучаю С#(в свободное время на работе biggrin читаю Герберт Шилдт - C# 4.0 Полное руководство) приходится брать что есть.
А проблему я решил следующим способом: создал сцену Game Over и прикрепил к ней скрипт GameOverScript который выводит 2 кнопки - Retry & Main menu. В скрипте PlayerScript добавил следующее:
Код
void OnDestroy
{
SceneManager.LoadScene("GameOver");
}
 
Сообщение
Цитата NapalmRain ()
А вообще система, на мой взгляд, мягко говоря, не очень...


Согласен, хоть я и не разбираюсь в скриптах мне тоже кажется что система корявенькая smile
Мне кажется, если бы сам писал, то можно было сделать лучше. Но пока я только изучаю С#(в свободное время на работе biggrin читаю Герберт Шилдт - 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 ()
"Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта".


Ну, не исключено что так и будет. biggrin

Цитата DjeeZ ()
Укокашивайте

Давненько я не слышал это словечко smile
 
Сообщение
Цитата NapalmRain ()
android555, тоже вариант.
Но я бы посоветовал просто сделать canvas новой системы UI в юнити. Внутри сделать панель с двумя кнопками, и canvas выключить (снять галочку enabled с него) а при смерти enabled канваса снова делать тру.


Спасибо за совет, наверное я так и сделаю.

Добавлено (12 Апр 2016, 14:09)
---------------------------------------------

Цитата DjeeZ ()
"Мама игрока, наша компания приносит вам свои соболезнования, и сожалеет что именно во время нашей игры ваш сын двинул копыта".


Ну, не исключено что так и будет. biggrin

Цитата DjeeZ ()
Укокашивайте

Давненько я не слышал это словечко smile

Автор - android555
Дата добавления - 12 Апр 2016 в 14:09
Форум Игроделов » UNITY3D » СКРИПТИНГ » Вывод меню после смерти игрока
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024