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 Roger0 · Feb 12, 2012 at 11:23 PM · javascriptmenurtsbuildings

RTS building placement with reference while placing buildings

I am building a Real time strategy type game and i'm trying to figure out how to make a building reference while placing a building. When the player clicks on the building icon for a particular building, it should have a reference for that building while moving around the terrain. Like a transparent version of the selected building. I have tried doing this but so far im only able to spawn another object right when the buttons clicked. How can I make the building reference stick onto the mouse while it moves around the terrain? Here is my code.

Note, the object i'm trying to add a reference to for starters is the Cube object.

 var cash : int = 2000;
 var boxIcon : Texture2D;
 var sphereIcon : Texture2D;
 var cylinderIcon : Texture2D;
 var cubeCost : int = 400;
 var sphereCost : int = 200;
 var cylinderCost : int = 600;
 var cubeGhost : Transform;
 private var building;
 private var buildingCost : int = 0;
 
 
 var isHoverGUI : boolean = false; 
 var rect : Rect = Rect (10,10, 150, 50);
 
 function OnGUI () 
 {
 
     if (GUI.Button (Rect (10,10, 50, 50), GUIContent( boxIcon, "Build a box") )) 
     {
         building = GameObject.Find("Cube");
         buildingCost = cubeCost;
         var hitGhost : RaycastHit;
 var rayGhost : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 if(Physics.Raycast(rayGhost,hitGhost,300))
 {
 
         cubeGhost.position = hitGhost.point;
 }
     }
 
    if(GUI.Button (Rect (60,10,50,50), GUIContent( sphereIcon, "Build a sphere") ))
     {
         building = GameObject.Find("Sphere");
         buildingCost = sphereCost;
     }
  
     if(GUI.Button(Rect ( 110,10,50,50), GUIContent( cylinderIcon, "Build a cylinder") ))
     {
         building = GameObject.Find("Cylinder");
         buildingCost = cylinderCost;
         
     
 
     }
         isHoverGUI = rect.Contains( Event.current.mousePosition );
 }
 
 function Update () {
 
 
 if(Input.GetMouseButtonDown(0) && !isHoverGUI )
 {
     
 var hit : RaycastHit;
 var ray : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
 if(Physics.Raycast(ray,hit,300)&&building && cash >= buildingCost)
 {
 if(hit.transform.tag == "terrain")
 {
 Instantiate(building,hit.point,Quaternion.identity);
 
 
 switch(building)
 {
     case  GameObject.Find("Sphere"):
     cash -= 200;
     break;
     
     case   GameObject.Find("Cube"):
     cash -= 400;
     break;
     
     case GameObject.Find("Cylinder"):
     cash -= 600;
     break;
     
     default: print ("nothings the case!");
 break;
                     }    
                 }                    
             }
             else
             {
             print("not enough money");
             
             }
         }
     }
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

3 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by dazdspaz · Mar 16, 2012 at 02:21 PM

I'm trying to do the same thing man and am at pretty much the same point as you. Did you get it going yet

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 Roger0 · Mar 16, 2012 at 03:59 PM 0
Share

Not yet. Still looking for an answer though.

avatar image dazdspaz · Mar 20, 2012 at 11:08 AM 0
Share

If I get it going i'll post it here. Trying to change the mouse cursor into a dummy of the object for placement of the building only then it would turn back but so far cursor just disappears. Since I've already failed at instantiating a dummy object which would follow the mouse position and then delete on placement of the actual object

avatar image Trixxy · Jul 24, 2015 at 11:33 AM 0
Share

Hi all, here is a link to a tutorial and demo project it is in c# but has the elements that you are looking for. I hope this helps! link text

avatar image
0

Answer by Endico · Dec 12, 2016 at 08:29 AM

Try using the transform position and rotation of the refrence object

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

Answer by areFranz · Jul 23, 2017 at 04:53 PM

Hi all! I had the same issue and came up with this solution:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class SpawnBuildings : MonoBehaviour {
 
     public bool placeObjects;
     public GameObject castlePrefab;
 
     private GameObject building;
     private bool created = false;
     private bool instantiated = false;
     private bool placed = false;
     private Vector3 pos;
 
     void Start ()
     {
         
     }
     
     void Update ()
     {
         if (placeObjects) {
 
             if (!created) {
                 created = true;
                 instantiated = false;
                 placed = false;
             }
 
             Plane plane = new Plane (Vector3.up, new Vector3 (0, 0, 0));
             Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
             float dist;
 
             plane.Raycast (ray, out dist);
             pos = ray.GetPoint (dist);
 
             if (!instantiated) {
                 building = Instantiate (castlePrefab, new Vector3 (pos.x, 0, pos.z), Quaternion.identity) as GameObject;
                 instantiated = true;
             }
 
             if (!placed) {
                 building.transform.position = new Vector3 (pos.x, 0, pos.z);
             }
 
             if (Input.GetMouseButton (0) && !placed) {
                 building.transform.position = new Vector3 (pos.x, 0, pos.z);
                 placed = true;
                 created = false;
                 instantiated = false;
                 placeObjects = false;
             }
         }
     }
 }

Just make a UI canvas with a button that handles the placeObject bool and you are done. Off course, if you have many buildings, you can add public prefabs (GameObjet) and handle the Instantiate function to select from them. Hope this helps...

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

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

7 People are following this question.

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

Related Questions

Can someone help me fix my Javascript for Flickering Light? 6 Answers

Setting Scroll View Width GUILayout 1 Answer

rts building placement 1 Answer

Main menu help (javascript) 1 Answer

3D Menu Help 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