Проблема со скриптом. - Форум Игроделов
Вт, 04 Фев 2025, 01:44 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Проблема со скриптом.
УпырьДата: Сб, 24 Дек 2011, 19:16 | Сообщение # 1
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Вот, есть один скрипт AI противника:
Quote
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);

}

}


И я уже задолбался его исправлять на атаку не игрока, а другого бота.
Возможно ли такое провернуть, или нужно писать другой скрипт?
 
СообщениеВот, есть один скрипт AI противника:
Quote
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);

}

}


И я уже задолбался его исправлять на атаку не игрока, а другого бота.
Возможно ли такое провернуть, или нужно писать другой скрипт?

Автор - Упырь
Дата добавления - 24 Дек 2011 в 19:16
ЛевшаДата: Сб, 24 Дек 2011, 20:25 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Code
Player player = (Player)FindObjectOfType(typeof(Player));

Достаточно имя Player поменять на имя бота.


X.cor.R (Prologue)
 
Сообщение
Code
Player player = (Player)FindObjectOfType(typeof(Player));

Достаточно имя Player поменять на имя бота.

Автор - Левша
Дата добавления - 24 Дек 2011 в 20:25
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025