Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Troodamium · Jun 16, 2021 at 09:20 PM · 2draycastscript.rigidbody2denemy ai

raycast2d problem enemies,Raycast2D problem

Hi, i am making a 2d rpg but the enemies doesnt go to the player , your can help me?. This is my code

 // Variables para gestionar el radio de visión, el de ataque y la velocidad
 public float visionRadius;
 public float attackRadius;
 public float speed;
 public Vector2 dir;
 // Variable para guardar al jugador
 GameObject player;

 // Variable para guardar la posición inicial
 Vector3 initialPosition;

 // Animador y cuerpo cinemático con la rotación en Z congelada
 Animator anim;
 Rigidbody2D rb2d; 

 void Start () {

     // Recuperamos al jugador gracias al Tag
     player = GameObject.FindGameObjectWithTag("player");

     // Guardamos nuestra posición inicial
     initialPosition = transform.position;

     anim = GetComponent<Animator>();
     rb2d = GetComponent<Rigidbody2D>();
 }

 void Update () {

     // Por defecto nuestro target siempre será nuestra posición inicial
     Vector3 target = initialPosition;

     // Comprobamos un Raycast del enemigo hasta el jugador
     RaycastHit2D hit = Physics2D.Raycast(
         transform.position, 
         player.transform.position - transform.position, 
         visionRadius, 
         1 << LayerMask.NameToLayer("Default") 
         // Poner el propio Enemy en una layer distinta a Default para evitar el raycast
         // También poner al objeto Attack y al Prefab Slash una Layer Attack 
         // Sino los detectará como entorno y se mueve atrás al hacer ataques
     );

     // Aquí podemos debugear el Raycast
     Vector3 forward = transform.TransformDirection(player.transform.position - transform.position);
     Debug.DrawRay(transform.position, forward, Color.red);

     // Si el Raycast encuentra al jugador lo ponemos de target
     if (hit.collider != null) {
         if (hit.collider.tag == "player"){
             target = player.transform.position;
         }
     }

     // Calculamos la distancia y dirección actual hasta el target
     float distance = Vector3.Distance(target, transform.position);
     Vector3 dir = (target - transform.position).normalized;

     // Si es el enemigo y está en rango de ataque nos paramos y le atacamos
     if (target != initialPosition && distance < attackRadius){
         // Aquí le atacaríamos, pero por ahora simplemente cambiamos la animación
         anim.SetFloat("x", dir.x);
         anim.SetFloat("y", dir.y);
         anim.SetBool("Atacando", true);
         // Congela la animación de andar
     }
     // En caso contrario nos movemos hacia él
     else {
         rb2d.MovePosition(transform.position + dir * speed * Time.deltaTime);

         // Al movernos establecemos la animación de movimiento
         anim.speed = 2;
         anim.SetFloat("x", dir.x);
         anim.SetFloat("y", dir.y);
         anim.SetLayerWeight(1, 1);
     }

     // Una última comprobación para evitar bugs forzando la posición inicial
     if (target == initialPosition && distance < 0.02f){
         transform.position = initialPosition; 
         // Y cambiamos la animación de nuevo a Idle
         anim.SetLayerWeight (1, 0);
     }

     // Y un debug optativo con una línea hasta el target
     Debug.DrawLine(transform.position, target, Color.green);
 }

 // Podemos dibujar el radio de visión y ataque sobre la escena dibujando una esfera
 void OnDrawGizmosSelected() {

     Gizmos.color = Color.yellow;
     Gizmos.DrawWireSphere(transform.position, visionRadius);
     Gizmos.DrawWireSphere(transform.position, attackRadius);

 }

} thanks for you help. ,Hi i am making a 2d rpg but the enemies doesnt go to the player. This is my code using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Enemy : MonoBehaviour {

 // Variables para gestionar el radio de visión, el de ataque y la velocidad
 public float visionRadius;
 public float attackRadius;
 public float speed;
 public Vector2 dir;

 // Variable para guardar al jugador
 GameObject player;

 // Variable para guardar la posición inicial
 Vector3 initialPosition;

 // Animador y cuerpo cinemático con la rotación en Z congelada
 Animator anim;
 Rigidbody2D rb2d; 

 void Start () {

     // Recuperamos al jugador gracias al Tag
     player = GameObject.FindGameObjectWithTag("player");

     // Guardamos nuestra posición inicial
     initialPosition = transform.position;

     anim = GetComponent<Animator>();
     rb2d = GetComponent<Rigidbody2D>();
 }

 void Update () {

     // Por defecto nuestro target siempre será nuestra posición inicial
     Vector3 target = initialPosition;

     // Comprobamos un Raycast del enemigo hasta el jugador
     RaycastHit2D hit = Physics2D.Raycast(
         transform.position, 
         player.transform.position - transform.position, 
         visionRadius, 
         1 << LayerMask.NameToLayer("Default") 
         // Poner el propio Enemy en una layer distinta a Default para evitar el raycast
         // También poner al objeto Attack y al Prefab Slash una Layer Attack 
         // Sino los detectará como entorno y se mueve atrás al hacer ataques
     );

     // Aquí podemos debugear el Raycast
     Vector3 forward = transform.TransformDirection(player.transform.position - transform.position);
     Debug.DrawRay(transform.position, forward, Color.red);

     // Si el Raycast encuentra al jugador lo ponemos de target
     if (hit.collider != null) {
         if (hit.collider.tag == "player"){
             target = player.transform.position;
         }
     }

     // Calculamos la distancia y dirección actual hasta el target
     float distance = Vector3.Distance(target, transform.position);
     Vector3 dir = (target - transform.position).normalized;

     // Si es el enemigo y está en rango de ataque nos paramos y le atacamos
     if (target != initialPosition && distance < attackRadius){
         // Aquí le atacaríamos, pero por ahora simplemente cambiamos la animación
         anim.SetFloat("x", dir.x);
         anim.SetFloat("y", dir.y);
         anim.SetBool("Atacando", true);
         // Congela la animación de andar
     }
     // En caso contrario nos movemos hacia él
     else {
         rb2d.MovePosition(transform.position + dir * speed * Time.deltaTime);

         // Al movernos establecemos la animación de movimiento
         anim.speed = 2;
         anim.SetFloat("x", dir.x);
         anim.SetFloat("y", dir.y);
         anim.SetLayerWeight(1, 1);
     }

     // Una última comprobación para evitar bugs forzando la posición inicial
     if (target == initialPosition && distance < 0.02f){
         transform.position = initialPosition; 
         // Y cambiamos la animación de nuevo a Idle
         anim.SetLayerWeight (1, 0);
     }

     // Y un debug optativo con una línea hasta el target
     Debug.DrawLine(transform.position, target, Color.green);
 }

 // Podemos dibujar el radio de visión y ataque sobre la escena dibujando una esfera
 void OnDrawGizmosSelected() {

     Gizmos.color = Color.yellow;
     Gizmos.DrawWireSphere(transform.position, visionRadius);
     Gizmos.DrawWireSphere(transform.position, attackRadius);

 }

}

Thank for your help.

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image FMGtm · Jun 17, 2021 at 08:18 AM 0
Share

I recommend changing the comments to english.

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

380 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Can't change velocity on instantiated object 1 Answer

Why is my character slightly floating above the ground? 0 Answers

Raycast2D don't hit anything below 0 Answers

Unity2D Help with rigidbody character movement. 0 Answers

Boss ai help EoW 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges