Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 pascal07nouma · Feb 24, 2019 at 06:58 PM · c#gameobjectarraynullindexoutofrangeexception

Simple Looping drag and drop game

hi, I'm trying to do a simple drag and drop game for my nephew (maybe can publish it in playstore). Because of that I will work with so many items I don't want to write code for each of them. I want to make a loop to find them by their index number and move to it's place with the same index number. this is the code I came up with. but it's not working and giving me theese errors; IndexOutOfRangeException: Index was outside the bounds of the array. MouseDrag.Start () (at Assets/MouseDrag.cs:22) Assets\DragAndDrop.cs(10,25): warning CS0649: Field 'DragAndDrop.initialPosition' is never assigned to, and will always have its default value null

I'm sure there are many other errors that I don't know. is there any body here have an idea or could show me how to do it. I'm desperately need any kind of help now.

Here is the code I tried to write:

`public class MouseDrag : MonoBehaviour { public GameObject[] objects;

 public Transform[] objectPlace;
 public List <Vector2> initialPosition = new List<Vector2>();
 private Vector2 mousePosition;
 private float deltaX, deltaY;
 int i = 0;
 public static bool locked;

 private void Start()
 {     
     for(int i=0; i< objects.Length; i++) 
     
           initialPosition.Add(new Vector2());
           initialPosition[i] = objects[i].transform.position;
         
           
     
     
 }
 
    void OnMouseDown()
 {    
     
         metod(i);
         
         
         deltaX = Camera.main.ScreenToWorldPoint(Input.mousePosition).x - transform.position.x;
         deltaY = Camera.main.ScreenToWorldPoint(Input.mousePosition).y - transform.position.y;
     
     
 
 }
       void OnMouseDrag() {
             if(!locked){
             mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
              transform.position = new Vector2(mousePosition.x - deltaX, mousePosition.y - deltaY);
             }
         }
          void OnMouseUp()
 {
         if(Mathf.Abs(transform.position.x - objectPlace[i].position.x) <= 0.5f &&
             Mathf.Abs(transform.position.y - objectPlace[i].position.y)<= 0.5f)
             {
                 transform.position = new Vector2(objectPlace[i].position.x, objectPlace[i].position.y);
                 locked = true;
                 
             }
     }

     public int metod(int i)
     {
             for(int p = 0; p < objects.Length; p++)
     if ( !locked)
     {    
         RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
         
         if (hit.collider.gameObject == objects[p].gameObject){Debug.Log("index number is: " + objects[p].transform.position.ToString());}
         p = i;}
         return i;
     }

}

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

1 Reply

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

Answer by dan_wipf · Feb 24, 2019 at 07:27 PM

2 things wrong here on a wuick overview:


  • delete the line initialposition.add and ad directly the position = initialPosition.Add(objects[i].transform.position);


  • metod i is wrong, you call it in the update section with i. is never asigned or a valid int. delet int i in metod because its unecessary, instead return p directly


Edit, Final working Script:


 using UnityEngine;
 using System.Collections.Generic;
 public class MouseDrag : MonoBehaviour{
 
         public float distanceToEndPos = 1;
         public List<GameObject> objects = new List<GameObject>();
         public List<Vector2> initialPosition = new List<Vector2>();
         public List<Vector2> desiredPosition = new List<Vector2>();
         Vector3 mousePos;
         Transform curObj;
         int curIndex;
         bool isDraging = false;
         
         void Start(){
                 objects.AddRange(GameObject.FindGameObjectsWithTag("DragAndDropObjects"));
                 foreach(GameObject g in objects){
                     initialPosition.Add(g.transform.position);
                 }
                 GameObject[] desObj = GameObject.FindGameObjectsWithTag("DragAndDropEndPos");
                 foreach(GameObject g in desObj){
                     desiredPosition.Add(g.transform.position);
                 }
         }
         void Update(){
             mousePos = GetMousePos();
             if(!isDraging){
                 GetRayCast();
             }
             if(isDraging){
                 DragAndDrop();
             }
         }
         public void GetRayCast(){
             RaycastHit2D hit = Physics2D.Raycast(new Vector2(mousePos.x,mousePos.y),Vector2.one);
                 if(hit.collider != null && Input.GetMouseButtonDown(0) && hit.transform.tag == "DragAndDropObjects"){
                     for(int i = 0; i<objects.Count;i++){
                         if(hit.collider != null && Input.GetMouseButtonDown(0) && hit.transform.gameObject == objects[i]){
                             curIndex = i;
                             curObj = objects[i].transform;
                             isDraging = true;
                         }
                     }
                 
             }
         }
         
         public Vector3 GetMousePos(){
             Vector3 mp = new Vector3();
             mp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
             return new Vector3(mp.x,mp.y,0);
         }
         public void DragAndDrop(){
             if(curObj != null){
                 if(Input.GetMouseButton(0)){
                     curObj.position = mousePos;
                     
                 }
                 if(Input.GetMouseButtonUp(0)){
                     if(Vector2.Distance(mousePos,desiredPosition[curIndex]) <= distanceToEndPos){
                         curObj.position = desiredPosition[curIndex];
                         curObj = null;
                         isDraging = false;
                     }else{
                         curObj.position = initialPosition[curIndex];
                         curObj = null;
                         isDraging = false;
                     }
                 }
             }
         }
     }


Comment
Add comment · Show 3 · 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 pascal07nouma · Feb 24, 2019 at 10:12 PM 0
Share

edit: it's working know. Thanks man I was working on this script about two weeks. you did it in a couple hours @dan_wipf

avatar image dan_wipf pascal07nouma · Feb 25, 2019 at 07:17 AM 1
Share

@pascal07nouma I did as quick edit of your Code. => untested, but should work. But I think there are more Problems in your code (logical ones, than you think of). for example you Debug in the int method() index number is: + objects position as a Vector actual the index number is simple i.


as well in your Titel it says a Drag and Drop game. but I can't see when you actually Drag any Thing except the Transform this Script is attached to. So right now the RayCast and the List of Objects is kind of unused just for the Position where this Transform should be Placed next on $$anonymous$$ouseUp..


I recommend you to re think what you actually want to achieve. but you can have a chat over here https://discord.gg/kdEbm3V

avatar image dan_wipf pascal07nouma · Feb 25, 2019 at 07:26 AM 1
Share

ah and I believe you got as well an error through the RayCast. if the Ray's detecting something else than in you array of objects it causes troubles so as I mentioned re think what you want to do!

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

611 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

Prefab not loading in data from Inspector 1 Answer

Array of Arrays of GameObjects/Prefabs (C#) 1 Answer

Get Script from gameobject knowing only parent script 1 Answer

C# SetActive GameObject Array 2 Answers

GameObjects static array NullReferenceException 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