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 Ganimedes · Sep 17, 2012 at 09:53 AM · instantiatemousemouse clickdiablo

instantiate object at mouse position clicked

i have the click move down and the object instantiating but it doesn't show im guessing it has something to do with not knowing where the mouse position is when i GetMouseButtonDown(0). what i want to happen is a visual identifier to where you have clicked for your character to move. similar to Mu Online

         // Moves the Player if the Left Mouse Button was clicked
         if (Input.GetMouseButtonDown(0)&& GUIUtility.hotControl ==0) {
             
             animation.CrossFade ("walk");
             animation["walk"].speed = 0.25f;
             
             
             Plane playerPlane = new Plane(Vector3.up, myTransform.position);
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             Instantiate(Resources.Load("MoveTarget"));
             float hitdist = 0.0f;
 
             if (playerPlane.Raycast(ray, out hitdist)) {
                 Vector3 targetPoint = ray.GetPoint(hitdist);
                 destinationPosition = ray.GetPoint(hitdist);
                 Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                 myTransform.rotation = targetRotation;
 
             }
         }

The whole code

 using UnityEngine;
 using System.Collections;
  
 public class moveOnMouseClick : MonoBehaviour {
     private Transform myTransform;                // this transform
     private Vector3 destinationPosition;        // The destination Point
     private float destinationDistance;            // The distance between myTransform and destinationPosition
  
     public float moveSpeed;                        // The Speed the character will move
  
  
  
     void Start () {
         myTransform = transform;                            // sets myTransform to this GameObject.transform
         destinationPosition = myTransform.position;            // prevents myTransform reset
     }
  
     void Update () {
  
         // keep track of the distance between this gameObject and destinationPosition
         destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
  
         if(destinationDistance < .5f){        // To prevent shakin behavior when near destination
             moveSpeed = 0;
             animation.CrossFade ("idle");
             animation["idle"].speed = 0.25f;
             Destroy(MoveTarget);
         }
         else if(destinationDistance > .5f){            // To Reset Speed to default
             moveSpeed = 2.0f;
         }
  
  
         // Moves the Player if the Left Mouse Button was clicked
         if (Input.GetMouseButtonDown(0)&& GUIUtility.hotControl ==0) {
             
             animation.CrossFade ("walk");
             animation["walk"].speed = 0.25f;
             
             
             Plane playerPlane = new Plane(Vector3.up, myTransform.position);
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             float hitdist = 0.0f;
 
             if (playerPlane.Raycast(ray, out hitdist)) {
                 Vector3 targetPoint = ray.GetPoint(hitdist);
                 destinationPosition = ray.GetPoint(hitdist);
                 Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                 myTransform.rotation = targetRotation;
                 Instantiate(Resources.Load("MoveTarget"), targetPoint, Quaternion.identity);
 
             }
         }
  
         // Moves the player if the mouse button is hold down
         else if (Input.GetMouseButton(0)&& GUIUtility.hotControl ==0) {
              animation.CrossFade ("walk");
             Plane playerPlane = new Plane(Vector3.up, myTransform.position);
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             float hitdist = 0.0f;
 
             if (playerPlane.Raycast(ray, out hitdist)) {
                 Vector3 targetPoint = ray.GetPoint(hitdist);
                 destinationPosition = ray.GetPoint(hitdist);
                 Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                 myTransform.rotation = targetRotation;
 
             }
         //    myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
         }
  
         // To prevent code from running if not needed
         if(destinationDistance > .5f){
             myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
         }
     }
 }
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
0
Best Answer

Answer by Zerot · Sep 17, 2012 at 10:04 AM

You are not giving a position to the instantiate, nor are you positioning it afterwards. You already have a raycast in there finding the position where it needs to be placed. now you only have to set that position in the instantiate.

First, move the instantiate line in the raycast if block. Next change it to:

`Instantiate(Resources.Load("MoveTarget"), targetPoint, Quaternion.identity);`

Alternatively, you could store the result of the instantiate and set it using that:

`GameObject go = (GameObject)Instantiate(Resources.Load("MoveTarget"));`

and then later:

`go.transform.position = targetPoint;`

Comment
Add comment · Show 8 · 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 Ganimedes · Sep 17, 2012 at 10:14 AM 0
Share

The first method works but the character is not walking to the point clicked it moves abit beyond the point is there a way to have it more precise that the character stops moving exactly under the instantiated object?

avatar image Zerot · Sep 17, 2012 at 10:19 AM 0
Share

You didn't post any movement code, so I can't be certain what the problem/cause is. It might be that your movement code is incorrect, but it might also be that the indicator you use has its pivot point somewhere strange causing it to be offset from the desired point.

avatar image Ganimedes · Sep 17, 2012 at 10:23 AM 0
Share

i have edited my post containing the entire Script

avatar image Zerot · Sep 17, 2012 at 10:38 AM 0
Share

Well, you have "if(destinationDistance > .5f){" in your code, which will mean that it might not get to the destination position if the distance is half a unit or closer.

$$anonymous$$oveTowards will only move as far as the destination position given, so it is impossible that it will go beyond the destination point, which makes me believe that the pivot point in your marker is wrong. $$anonymous$$ake sure that the tip(or center, or whatever you want) is at 0,0,0 in local space of the model. If it was for example at 1,0,0 then the marker would be displayed at 1 unit to the side looking like the character is walking to the incorrect place.

avatar image Ganimedes · Sep 17, 2012 at 10:49 AM 0
Share

you are correct with it being something other than the code, i turned off my animation for the instantiated object and the character moves and stops at the instantiated object, so it has to be the animation changing the location of the object. thanks for your help but i have one more question for you..

what i want to happen after the character hits the coordinates of the mouse click, i want that instantiated object to be destroyed how may i code that in?

Show more comments

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

11 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

Related Questions

How to I get an object to disappear when I use the mouse to click on it? 1 Answer

Different action if a key is pressed when the mouse is clicked 2 Answers

Explosion at mouse 1 Answer

Instantiate Objects on Cells created during run time 1 Answer

How to prevent GameObject from spawning on top of each other? 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