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 $$anonymous$$ · Apr 03, 2013 at 05:24 PM · c#spawningwaypointassign

I have problem, i cant spawn enemies with script Waypoints.

When i make and object with this script and setting waypoints in unity editor everything works fine, but when im spawning an object with this script, it doesnt works because the variable waypoints isnt assigned,so how can i assign waypoint in the script?

using UnityEngine; using System.Collections;

public class SeekSteer : MonoBehaviour {

 public Transform[] waypoints = new Transform[1];
 public float waypointRadius = 1.5f;
 public float damping = 0.1f;
 public bool loop = false;
 public float speed = 2.0f;
 public bool faceHeading = true;
  
 private Vector3 currentHeading,targetHeading;
 private int targetwaypoint;
 private Transform xform;
 private bool useRigidbody;
 private Rigidbody rigidmember;
 
 void OnTriggerEnter(Collider collision)
 {
 Destroy(gameObject);    
 }
 
 
 // Use this for initialization
 protected void Start ()
 {
     
     
     xform = transform;
     currentHeading = xform.forward;
     if(waypoints.Length<=0)
     {
         Debug.Log("No waypoints on "+name);
         enabled = false;
     }
     targetwaypoint = 0;
     if(rigidbody!=null)
     {
         useRigidbody = true;
         rigidmember = rigidbody;
     }
     else
     {
         useRigidbody = false;
     }
 }
 
 
 // calculates a new heading
 protected void FixedUpdate ()
 {
     targetHeading = waypoints[targetwaypoint].position - xform.position;
 
     currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
 }
 
 // moves us along current heading
 protected void Update()
 {
     
     
     if(useRigidbody)
         rigidmember.velocity = currentHeading * speed;
     else
         xform.position +=currentHeading * Time.deltaTime * speed;
     if(faceHeading)
         xform.LookAt(xform.position+currentHeading);
 
     if(Vector3.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
     {
         targetwaypoint++;
         if(targetwaypoint>=waypoints.Length)
         {
             targetwaypoint = 0;
             if(!loop)
                 enabled = false;
         }
     }
 }
 
 
 // draws red line from waypoint to waypoint
 public void OnDrawGizmos()
 {
     Gizmos.color = Color.red;
     if(waypoints==null)
         return;
     for(int i=0;i< waypoints.Length;i++)
     {
         Vector3 pos = waypoints[i].position;
         if(i>0)
         {
             Vector3 prev = waypoints[i-1].position;
             Gizmos.DrawLine(prev,pos);
         }
     }
 }
 

}

Comment
Add comment
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

2 Replies

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by Nidre · Apr 05, 2013 at 01:32 PM

Because you are only creating the Transform[1] array but you are not adding new transforms to it.

My advice is:

Since you are only using position you can create a Vector3 array instead of a transform array.

But if you need transform array you should find the related object from the scene(or spawn them) and assign their Transform to your array.

Havent tested the below code but i simply changed Trannsform array to Vector3 array and changed its referances in code.It should work or at least put you in the correct path :)

     public Vector3[] waypoints = new Vector3[1];
     public float waypointRadius = 1.5f;
     public float damping = 0.1f;
     public bool loop = false;
     public float speed = 2.0f;
     public bool faceHeading = true;
      
     private Vector3 currentHeading,targetHeading;
     private int targetwaypoint;
     private Transform xform;
     private bool useRigidbody;
     private Rigidbody rigidmember;
      
     void OnTriggerEnter(Collider collision)
     {
     Destroy(gameObject);
     }
      
      
     // Use this for initialization
     protected void Start ()
     {
      
      
     xform = transform;
     currentHeading = xform.forward;
     if(waypoints.Length<=0)
     {
     Debug.Log("No waypoints on "+name);
     enabled = false;
     }
     targetwaypoint = 0;
     if(rigidbody!=null)
     {
     useRigidbody = true;
     rigidmember = rigidbody;
     }
     else
     {
     useRigidbody = false;
     }
     }
      
      
     // calculates a new heading
     protected void FixedUpdate ()
     {
     targetHeading = waypoints[targetwaypoint] - xform.position;
      
     currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
     }
      
     // moves us along current heading
     protected void Update()
     {
      
      
     if(useRigidbody)
     rigidmember.velocity = currentHeading * speed;
     else
     xform.position +=currentHeading * Time.deltaTime * speed;
     if(faceHeading)
     xform.LookAt(xform.position+currentHeading);
      
     if(Vector3.Distance(xform.position,waypoints[targetwaypoint])<=waypointRadius)
     {
     targetwaypoint++;
     if(targetwaypoint>=waypoints.Length)
     {
     targetwaypoint = 0;
     if(!loop)
     enabled = false;
     }
     }
     }
      
      
     // draws red line from waypoint to waypoint
     public void OnDrawGizmos()
     {
     Gizmos.color = Color.red;
     if(waypoints==null)
     return;
     for(int i=0;i< waypoints.Length;i++)
     {
     Vector3 pos = waypoints[i];
     if(i>0)
     {
     Vector3 prev = waypoints[i-1];
     Gizmos.DrawLine(prev,pos);
     }
     }
     }
Comment
Add comment · Show 1 · Share
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 Nidre · Apr 05, 2013 at 01:33 PM 0
Share

Btw i have used notepad++ so i ddnt had intellisense/autocomplete i could have made some mistakes but the logic should be ok :)

avatar image
0

Answer by $$anonymous$$ · Apr 06, 2013 at 03:58 PM

Thank you very much,everything works fine) Im new to programming and it was a trouble for me. Thank you again!

Comment
Add comment · Show 4 · Share
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 Nidre · Apr 06, 2013 at 08:58 PM 0
Share

Can you accept the answer if it worked for you :) I am glad to be help btw :)

avatar image Nidre · Apr 09, 2013 at 08:35 AM 0
Share

Still no accept for me :(:)

avatar image $$anonymous$$ · Apr 20, 2013 at 01:49 PM 0
Share

how to accept your help?

avatar image Nidre · Apr 20, 2013 at 02:18 PM 0
Share

Click the "check" symbol near the answer below the hand symbol ;)

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

10 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

Related Questions

Need an advise to upgrade my code!!! 1 Answer

Distribute terrain in zones 3 Answers

Multiple Cars not working 1 Answer

How to assign transfrom array in the code? 1 Answer

Assigning variables in inspector 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