Criando Inteligencia Artificial Para BOSS.
5 participantes
Página 1 de 1
Criando Inteligencia Artificial Para BOSS.
Eu preciso criar um script para configurar um boss que solte magias/skill no jogador, algum tutorial para me ajudar a configura-lo? Estou utilizando a ferramente Unity3D e linguagem C# e preciso configurar a IA dos inimigos. Estou utilizando o NavMesh para os inimigos com ataques a curta distancia, mas preciso configurar agora inimigos que atacam a longa distancia, como o BOSS para configurar suas skills. Alguém pode me ajudar???
EduCarvalhoF- Iniciante
- PONTOS : 2820
REPUTAÇÃO : 0
Respeito as regras :
Re: Criando Inteligencia Artificial Para BOSS.
Bom inteligencia artificial nunca é facil de se fazer dependendo do modelo do inimigo, no caso você vai fazer verificação de distancia, e um verificador de ataque. Ai depende de como você quer que o inimigo se comporte, se ele vai parar, para atacar a uma longa distancia se ele vai atacar andando. Porque se ele for atacar parado é só faze uma verificação de distancia para ele parar e outra para ele atacar. Como seria seu "BOSS"? como você quer que seja o comportamento dele.
rafaelllsd- ProgramadorMaster
- PONTOS : 5243
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: Criando Inteligencia Artificial Para BOSS.
faz o boss instanciar projeteis, com o comando "Instantiate", e faz o projétil fazer um lookAt logo que é instanciado, e depois faça ele receber um AddForce na direção transform.forward, que ai ele via pra frente.
Re: Criando Inteligencia Artificial Para BOSS.
Eu procurei tambem informaçoes sobre o assunto mais nao achei ainda tambem estou fazendo um jogo dr rpg
Re: Criando Inteligencia Artificial Para BOSS.
Poste seu Script de AI pra gente te ajudar e Modificar ele ao seu gosto!
Re: Criando Inteligencia Artificial Para BOSS.
Esses 2 sao os que eu uso aqui de inimigos simples attack,movimento,
- Código:
//movimento
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
public float moveSpeed = 5.0f;
public int agroRange = 10;
public GameObject target;
public Rigidbody rb;
private bool isMoving;
private Vector3 moveDirection;
public float waitTime = 3;
private float waitCounter;
public float moveTime = 5;
private float moveCounter;
public Animator anim;
void Awake () {
rb = GetComponent<Rigidbody>();
}
void Start () {
target = GameObject.FindWithTag ("Player");
anim = GetComponent<Animator> ();
anim.SetBool("isMove",true);
RandomWaitCounter();
RandomMoveCounter();
}
void Update () {
transform.LookAt (target.transform.position);
if(Vector3.Distance(target.transform.position,transform.position)>= agroRange){
if(isMoving){
moveCounter -= Time.deltaTime;
rb.velocity = moveDirection;
if(moveCounter <0.0f){
isMoving = false;
RandomWaitCounter();
}
}
else{
waitCounter -= Time.deltaTime;
rb.velocity = Vector3.zero;
if (waitCounter < 0.0f){
isMoving = true;
RandomMoveCounter();
moveDirection = new Vector3 (Random.Range (-1.0f,1.0f)* moveSpeed,0.0f,Random.Range(-1.0f,1.0f));
}
}
}
if(Vector3.Distance (target.transform.position,transform.position)<= agroRange){
Vector3 dir = target.transform.position - transform.position;
dir.Normalize();
transform.position += dir * moveTime * Time.deltaTime;
}
}
public void RandomWaitCounter(){
waitCounter = Random.Range(waitTime* 0.75f,waitTime * 1.25f);
}
public void RandomMoveCounter(){
moveCounter = Random.Range(moveTime* 0.75f,moveTime * 1.25f);
}
}
- Código:
//Attack
using UnityEngine;
using System.Collections;
public class DamangeOnPlayer : MonoBehaviour {
public int damage;
public int attackBonus = 2;
public bool inAttack;
public float attackCounter;
public float attackTime = 3.0f;
public Animator anim;
// Use this for initialization
void Start () {
inAttack = false;
anim.SetBool("isAttack",false);
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other){
if(other.gameObject.tag == "Player" && inAttack == false){
inAttack = true;
anim.SetBool("isAttack",true);
damage = attackBonus + gameObject.GetComponent<EnemyStats>().attack - PlayerStats.Defense;
other.gameObject.GetComponent<PlayerStats>().DamageReceived(damage);
inAttack = false;
}
}
void OnTriggerStay(Collider other){
if(other.gameObject.tag == "Player"){
attackCounter += Time.deltaTime;
if(attackCounter > attackTime){
transform.Translate(Vector3.back);
attackCounter = 0.0f;
}
}
}
}
Re: Criando Inteligencia Artificial Para BOSS.
Ta, não sei por que você separou em 2 scripts... só está complicando a parte do vector3.distance. seria bom juntar os comandos do inimigo todos em um script só...
Bom, precisamos do script 'PlayerStats' do seu jogador para poder testar as modificações.
Bom, precisamos do script 'PlayerStats' do seu jogador para poder testar as modificações.
Re: Criando Inteligencia Artificial Para BOSS.
A area de distancia e a agroRange o script status do player e esse
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public enum CharacterType{
Guerreiro = 0,
Mago = 1,
Arqueiro = 2,
Alienigena = 3,
Robor = 4
}
public class PlayerStats: MonoBehaviour {
public CharacterType characterType;
public static int Level = 1;
public static int nextLevel;
public static int xp;
public static int xpToLevel;
public static int xpDiff;
private Animator anim;
public string GameOver;
//Lugar magico da margia ganhando level
public Transform Lugarmagico;
public ParticleSystem GanhouLevel;
public AudioClip SomGanhouLevel;
//Status
public static int Life;
public static int totalLife;
public static int Magic;
public static int totalMagic;
public static int Attack;
public static int Defense;
//Morte
bool chamouMorte = false;
public MonoBehaviour[] scriptsToDisable;
public float morteTime = 10;
private int atualAttack;
private int atualDefense;
private bool blinkActive;
public float blinkTime;
private float blinkCouter;
public SkinnedMeshRenderer playerRenderer;
void Start () {
Recalculation();
atualAttack = Attack;
atualDefense = Defense;
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
nextLevel = Level + 1;
xpToLevel = 50* nextLevel * Level;
if(xp >= xpToLevel){
xpDiff = xp - xpToLevel;
LevelUP();
}
Attack = 5 * Level;
Defense = 3 * Level;
if (Input.GetKeyDown(KeyCode.I)){
AddXp (12);
Debug.Log("Ganhou xp");
}
if (Life <= 0) {
Life = 0;
if (chamouMorte == false) {
chamouMorte = true;
Morrer();
}
}
}
public void Recalculation(){
totalLife = 40 * Level;
totalMagic = 20 * Level;
Life = totalLife;
Magic = totalMagic;
}
public static void AddXp(int newXp){
xp += newXp;
}
public void LevelUP(){
Level ++;
xp = 0 + xpDiff;
Recalculation();
GanhandoLevel();
}
public void Morrer(){
if (scriptsToDisable.Length == 0) {
Debug.Log ("All scripts still Die");
return;
}
foreach ( MonoBehaviour script in scriptsToDisable)
script.enabled = false;
anim.SetBool("isMorte",true);
morteTime -= Time.deltaTime;
Application.LoadLevel (GameOver);
}
public void DamageReceived(int damage){
Life -= damage;
blinkActive = true;
blinkCouter = blinkTime;
}
public void GanhandoLevel(){
Instantiate (GanhouLevel, transform.position, transform.rotation);
GetComponent<AudioSource> ().PlayOneShot (SomGanhouLevel);
}
public void ActiveBlinc(){
if(blinkActive){
if(blinkCouter > blinkTime * 0.66f){
playerRenderer.enabled = false;
}
else if (blinkCouter > blinkTime * 0.33f){
playerRenderer.enabled = true;
}else if (blinkCouter > 0){
playerRenderer.enabled = false;
}else{
playerRenderer.enabled = true;
blinkActive = false;
}
blinkCouter -= Time.deltaTime;
}
}
}
Re: Criando Inteligencia Artificial Para BOSS.
Aqui amigao
- Código:
using UnityEngine;
using System.Collections;
public class EnemyStats : MonoBehaviour {
public int LevelEnemy =1;
public int attack = 5;
public int defense = 2;
public int life = 20;
public int xpGived = 10;
public int totallife;
private int nextLevelEnemy;
public GameObject damageParticle;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void DamageReceived(int damage){
life -= damage;
Instantiate(damageParticle,transform.position,transform.rotation);
if(life <- 0){
Destroy(gameObject);
PlayerStats.AddXp(xpGived);
Debug.Log("Ganhou xp");
}
}
}
Re: Criando Inteligencia Artificial Para BOSS.
Os sistemas de attack sao esses amigo
- Código:
//Tirar vida do player
using UnityEngine;
using System.Collections;
public class DamangeOnPlayer : MonoBehaviour {
public int damage;
public int attackBonus = 2;
public bool inAttack;
public float attackCounter;
public float attackTime = 3.0f;
public Animator anim;
// Use this for initialization
void Start () {
inAttack = false;
anim.SetBool("isAttack",false);
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other){
if(other.gameObject.tag == "Player" && inAttack == false){
inAttack = true;
anim.SetBool("isAttack",true);
damage = attackBonus + gameObject.GetComponent<EnemyStats>().attack - PlayerStats.Defense;
other.gameObject.GetComponent<PlayerStats>().DamageReceived(damage);
inAttack = false;
if(damage <= 0)damage = 1;
}
}
void OnTriggerStay(Collider other){
if(other.gameObject.tag == "Player"){
attackCounter += Time.deltaTime;
if(attackCounter > attackTime){
transform.Translate(Vector3.back);
attackCounter = 0.0f;
}
}
}
}
- Código:
//tirar vida do inimigo
using UnityEngine;
using System.Collections;
public class DamangeOnEnemy : MonoBehaviour {
public int attackBonus = 1;
public int damage;
private bool inAttack;
// Use this for initialization
void Start () {
damage = attackBonus;
}
// Update is called once per frame
void Update () {
if(PlayerCombat.attacking == false){
inAttack = false;
}
}
void OnTriggerEnter(Collider other){
if(other.gameObject.tag == "Enemy" && inAttack == false){
damage = attackBonus + PlayerStats.Attack - other.gameObject.GetComponent<EnemyStats>().defense;
other.gameObject.GetComponent<EnemyStats>().DamageReceived(damage);
inAttack = true;
if(damage <= 0)damage = 1;
}
}
}
Re: Criando Inteligencia Artificial Para BOSS.
Boss AI
Eu achei esse aqui mais o cara mostra os scripts no site dele mais ainda e complicado de enteder tudo em Russo traduzi mais algumas explicacoes nao foram traduzidas deixei aqui para voces da uma olhadadinha
Site
Eu achei esse aqui mais o cara mostra os scripts no site dele mais ainda e complicado de enteder tudo em Russo traduzi mais algumas explicacoes nao foram traduzidas deixei aqui para voces da uma olhadadinha
Site
Tópicos semelhantes
» Inteligência Artificial
» (Dúvida) iRDS - Inteligencia artificial para carros.
» Inteligencia artificial?
» Fiz uma música orquestral para uma batalha final contra um Boss
» SCRIPT DE INTELIGENCIA ARTIFICIAL PARA ZUMBI, DESVIAR DE OBJETOS E ATACAR JOGADOR
» (Dúvida) iRDS - Inteligencia artificial para carros.
» Inteligencia artificial?
» Fiz uma música orquestral para uma batalha final contra um Boss
» SCRIPT DE INTELIGENCIA ARTIFICIAL PARA ZUMBI, DESVIAR DE OBJETOS E ATACAR JOGADOR
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos