Атака врага

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Атака врага

Сообщение SaigafarovOleg 18 окт 2012, 12:19

Доброго всем времени суток! Давайте сразу к делу: вот у меня появилась проблема... Делаю игрулю, пропечатал много скриптов, уже впринципе 50% игры готово, но столкнулся с проблемой: нужно сделать так, чтобы когда враг касается меня, то у меня отнимались жизни. Видел такой скрипт но почему-то не скопировал себе... Вообщем, помогите, если знаете как это сделать, буду ооооочень благодарен:)))
SaigafarovOleg
UNец
 
Сообщения: 4
Зарегистрирован: 08 окт 2012, 11:15

Re: Атака врага

Сообщение KorsaiR 18 окт 2012, 12:22

как касается? если просто коллизия игрока и коллизия врага - всё просто

Синтаксис:
Используется csharp
void OnCollisionEnter(Collision obj){
if(obj.gameObject.tag == "enemy"){//у врага должен быть таг enemy

hp +=(-30);//к примеру


}



}


вот это прицепи к скрипту хп своего)только значения свои подставь..если я не понял вопроса - то прошу прощения :)
Мои игры: Sunrise, Fireground, Spacerift
Sunrise: _www.sunsurv.ru , _https://store.steampowered.com/app/6631 ... _survival/
Fireground: _https://store.steampowered.com/app/1026 ... ND/?beta=0
Spacerift: _https://vk.com/spacerift
Аватара пользователя
KorsaiR
Старожил
 
Сообщения: 797
Зарегистрирован: 09 июл 2012, 12:20
Откуда: Новосибирск
Skype: pwiliya

Re: Атака врага

Сообщение SaigafarovOleg 18 окт 2012, 13:00

Не помогает.. Ошибки в самом скрипте. типа забыл поставить такойто такойто знак(например ; ) хотя в редакторе не выдаёт ошибок да и не должно...
Ну у меня вообщем такой вот скриптик движения на меня врага:
Синтаксис:
Используется csharp
using UnityEngine;
 
public class Enemy : MonoBehaviour
{
    // скорость ходьбы и скорость поворота в секунду
    public float moveSpeed = 2;
    public float turnSpeed = 90;
 
    private CharacterController _controller;
    private Transform _thisTransform;
    private Transform _playerTransform;
 
    public void Start()
    {
        // Получаем контроллер
        _controller = GetComponent<CharacterController>();
 
        // Получаем компонент трансформации объекта, к которому привязан данный компонент
        _thisTransform = transform;
 
        // Получаем компонент трансформации игрока
        Player player = (Player)FindObjectOfType(typeof(Player));
        _playerTransform = player.transform;
    }
 
    // Все что связано с физикой выполняем в FixedUpdate
    public void FixedUpdate()
    {
        // направление на игрока
        Vector3 playerDirection = (_playerTransform.position - _thisTransform.position).normalized;
 
        // угол поворота на игрока
        float angle = Vector3.Angle(_thisTransform.forward, playerDirection);
 
        // максимальный угол поворота на текущем кадре
        float maxAngle = turnSpeed * Time.deltaTime;
 
        // Вычисляем прямой поворот на игрока
        Quaternion rot = Quaternion.LookRotation(_playerTransform.position - _thisTransform.position);
 
        // поворачиваем врага на игрока с учетом скорости поворота
        if (maxAngle < angle)
        {
            _thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
        }
        else
        {
            _thisTransform.rotation = rot;
        }
 
        // если дистанция до игрока больше трех метров
        if (Vector3.Distance(_playerTransform.position, _thisTransform.position) > 3.0f)
        {
            // двигаемся к игроку
            _controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
        }
        else // если меньше или равна трем метрам
        {
            // здесь например стреляем в игрока
        }
 
        // гравитация
        _controller.Move(Vector3.down * 10.0f * Time.deltaTime);
    }
}

тобишь враг ко мне двигается и как только он зайдёт на какуюто определённую зону, то у меня должны отняться жизни. Если нужно еще и скрипт Player.cs то:
Синтаксис:
Используется csharp
using UnityEngine;
 
public class Player : MonoBehaviour
{
    // скорость ходьбы и скорость поворота в секунду
    public float moveSpeed = 2;
    public float turnSpeed = 90;
 
    private CharacterController _controller;
    private Transform _thisTransform;
 
    public void Start()
    {
        // Получаем контроллер
        _controller = GetComponent<CharacterController>();
 
        // Получаем компонент трансформации объекта, к которому привязан данный компонент
        _thisTransform = transform;
    }
 
    public void FixedUpdate()
    {
        // Рассчитываем позицию
        _controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime * Input.GetAxis("Vertical") +
                        Vector3.down * 10.0f * Time.deltaTime);
 
        // Рассчитываем поворот
        Quaternion rot = Quaternion.AngleAxis(
            turnSpeed * Time.deltaTime * Input.GetAxis("Horizontal"), Vector3.up);
        _thisTransform.rotation *= rot;
    }
}


и еще проблема: почемуто враг не может подойти ко мне в плотную, за счёт чего он не касается моей коллизии... Что делать, х3) Помогите как можете начинающему))
SaigafarovOleg
UNец
 
Сообщения: 4
Зарегистрирован: 08 окт 2012, 11:15

Re: Атака врага

Сообщение KorsaiR 18 окт 2012, 13:09

ну у тебя ведь в скрипте указанно что если он подходит к тебе только если дистанция больше 3х метров :)

з.ы покажи тот скрипт в который ты вставлял OnCollisionEnter
Мои игры: Sunrise, Fireground, Spacerift
Sunrise: _www.sunsurv.ru , _https://store.steampowered.com/app/6631 ... _survival/
Fireground: _https://store.steampowered.com/app/1026 ... ND/?beta=0
Spacerift: _https://vk.com/spacerift
Аватара пользователя
KorsaiR
Старожил
 
Сообщения: 797
Зарегистрирован: 09 июл 2012, 12:20
Откуда: Новосибирск
Skype: pwiliya

Re: Атака врага

Сообщение KorsaiR 18 окт 2012, 13:16

как вариант: создай SphereCollider у игрока, сделай его триггером(галочка IsTrigger), потом создай(или возьми свой написанный)скрипт Hp в котором собственно есть числовая переменная

public int hp = 100;//переменная

void hpp(int h){//функция расчёта хп

hp +=h;//чтобы можно было отнимать и прибавлять значения

}
void OnTriggerStay(Collider telo){//если тело
if(telo.CompareTag("enemy"){//с тегом enemy находится в зоне триггера(тот о котором я выше сказал)

hpp(-30);//отнять хп

}


}//+ к этому всему тебе нужно сделать, чтобы hp отнималось допустим с промежутком в 1 секунду.ибо если ты это добавишь на игрока - твоё хп будет тратиться при входе врага в коллайдер по 30 едениц в кадр.а значит уйдёт в минус. ну и тут же создашь функцию dead, которая вызывается когда hp <=0. там допустим можно сделать самое простое: Destroy(gameObject); :) удачи
Мои игры: Sunrise, Fireground, Spacerift
Sunrise: _www.sunsurv.ru , _https://store.steampowered.com/app/6631 ... _survival/
Fireground: _https://store.steampowered.com/app/1026 ... ND/?beta=0
Spacerift: _https://vk.com/spacerift
Аватара пользователя
KorsaiR
Старожил
 
Сообщения: 797
Зарегистрирован: 09 июл 2012, 12:20
Откуда: Новосибирск
Skype: pwiliya

Re: Атака врага

Сообщение Левш@ 18 окт 2012, 14:42

почемуто враг не может подойти ко мне в плотную, за счёт чего он не касается моей коллизии... Что делат

Дистанцию отслеживай.

Синтаксис:
Используется javascript
Vector3.Distance(transform.position, enemy.position);
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28