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 /
avatar image
0
Question by stenclowskimat · May 31, 2015 at 12:26 PM · aiartificial intelligence

AI Avoiding Obstacles!

I need help making an AI. It's working really great, but the AI is not avoiding walls, obstacles etc. If the enemy is on the right side of the wall, and im on the left, the enemy will keep trying to go throughout the wall (Will be still facing me instead of avoiding the wall).

Can somebody edit the script to make it avoid things?

  var target : Transform;
  var gravity : float = 20;
  var moveSpeed : float = 6;  // chase speed
  var rotSpeed : float = 90;  // speed to turn to the player (degrees/second)
  var attackDistance : float = 2;  // attack distance
  var detectRange : float = 20;  // detection distance
  var otherObj : GameObject;
  var otherObj2 : GameObject;
  var dangermusic : GameObject;
  var BipedMesh : GameObject;
  var Bipedv : GameObject;
  var AllFourv : GameObject;
  
  private var transf : Transform;
  private var character: CharacterController; 
  
  function Start () { 
      if (!target) target = GameObject.FindWithTag ("Player").transform; 
      transf = transform;
      character = GetComponent(CharacterController);
  }
  
  function Update(){
      if (target){
          var tgtDir = target.position - transf.position;
          var tgtDist = tgtDir.magnitude; // get distance to the target
          if (!Physics.Raycast(transf.position, tgtDir, detectRange)){
              // stays in idle mode if can't see target
              Idle(); 
          }
          else {
              var moveDir = target.position - transf.position;
              moveDir.y = 0;  // prevents enemy tilting
              rot = Quaternion.FromToRotation(Vector3.forward, moveDir);
              transf.rotation = Quaternion.RotateTowards(transf.rotation, rot, rotSpeed * Time.deltaTime);
              if (tgtDist <= attackDistance){  // if dist <= attackDistance: stop and attack
                  // do your attack here
                  print("Attack!");
                  otherObj2.animation.Play();
                  BipedMesh.animation.Play("devmesh2");
                  otherObj.animation.Play("phoenixfreeroamjp");                                      
              }
              else {  // if attackDistance < dist < detectRange: chase the player
                  // Move towards target
                  MoveCharacter(moveDir, moveSpeed);
                  audio.volume = 1.0;
                  dangermusic.audio.volume = 0.0;
              }
          }
      }
  }
  
  var walkSpeed = 3.0; 
  var travelTime = 2.0; 
  var idleTime = 1.5;
  var rndAngle = 45;  // enemy will turn +/- rndAngle
  
  private var timeToNewDir = 0.0;
  private var turningTime = 0.0;
  private var turn: float;
  
  function Idle () { 
      // Walk around and pause in random directions 
      if (Time.time > timeToNewDir) { // time to change direction?
          turn = (Random.value > 0.5)? rndAngle : -rndAngle; // choose new direction
          turningTime = Time.time + idleTime; // will stop and turn during idleTime...
          timeToNewDir = turningTime + travelTime;  // and travel during travelTime 
      }
      if (Time.time < turningTime){ // rotate during idleTime...
          transform.Rotate(0, turn*Time.deltaTime/idleTime, 0);
      } else {  // and travel until timeToNewDir
          MoveCharacter(transform.forward, walkSpeed);
          audio.volume = 0.0;
          dangermusic.audio.volume = 1.0;       
          Bipedv.renderer.enabled = true;
          AllFourv.renderer.enabled = false;
      }
  }
  
  function MoveCharacter(dir: Vector3, speed: float){
  
      var vel = dir.normalized * speed;  // vel = velocity to move 
      // clamp the current vertical velocity for gravity purpose
      vel.y = Mathf.Clamp(character.velocity.y, -30, 2); 
      vel.y -= gravity * Time.deltaTime;  // apply gravity
      character.Move(vel * Time.deltaTime);  // move   
      Bipedv.renderer.enabled = false;
      AllFourv.renderer.enabled = true;
  }
  
Comment
Add comment · Show 4
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 Baste · Jun 19, 2015 at 02:47 PM 2
Share

Just use a Nav$$anonymous$$esh ins$$anonymous$$d. Link to tutorial.

avatar image Immanuel-Scholz · Jun 22, 2015 at 10:24 AM 0
Share

If the enemy is on the right side of the wall, and im on the left, the enemy will keep trying to go throughout the wall

Have you checked whether this "wall" has a correct physics collider? Your line 27 should prevent "seeing" through the wall so actually, your enemy should idleing around ins$$anonymous$$d of trying to bump into the wall.

Try simplefying your scene (backup first!) or placing Logging statements all over the place to find out why the Physics-raycast does not kick in correctly.

avatar image Lahzar · Jun 26, 2015 at 10:03 PM 0
Share

To do this you need some sort of pathfinding. This is a sortof advanced concept, but Unity comes with a great and easy bultin system for this! Follow the link posted by @Baste and make his comment the awnser!

avatar image Wolfdog · Jun 26, 2015 at 10:33 PM 0
Share

I agree with Baste. Learn to use Nav$$anonymous$$esh. This is becomes automated, so no further scripting for the AI about avoiding obstacles.

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Unity3d tetris with AI 1 Answer

Check lenght from player? 2 Answers

Unity ML Agent doesn't learn well on default examples 1 Answer

Call MATLAB Fuzzy Logic Toolbox function in UNITY3D 1 Answer

Friendly AI that follows player and shoot zombies. 1 Answer


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