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 /
  • Help Room /
avatar image
0
Question by Kabyn · Nov 01, 2017 at 12:16 AM · networkingmultiplayerplacementtower defensebuildings

How to convert buildmode script to be used in multiplayer?

So I have a buildmode script to be used to build towers/buiildings which works in single player but if i try to use it with UNet the building only show up for the client. I've been googling around and reading the manual but can't figure out how to transfer the script so it can be used in a multiplayer environment. Any help would be greatly appreciated!

Being fairly new please bare with me.

Here is the buildmode script I am working with:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Networking;
 
 public class TowerInfo
 {
     public GameObject TowerObject { set; get; }
     public BaseTower Tower { set; get; }
     public Vector3 Position { set; get; }
     public bool IsOccupied { set; get; }
 }
 
 public class BuildMode : NetworkBehaviour
 
 {
 
     private const float PREVIEW_DISTANCE_FROM_PLAYER = 3.0f;
 
     public List<GameObject> towerPrefabs;
 
     private int selectedTowerIndex = 0;
     private TowerInfo focusedTowerSpawn;
     private List<TowerInfo> towerSpawns;
     private Transform playerTransform;
     private Transform CameraTransform;
     private GameObject spawnPreview;
 
     private bool isActive = false;
 
     private void Start()
     {
         towerSpawns = new List<TowerInfo>();
         // Get all the tower info in the map
         foreach(GameObject go in GameObject.FindGameObjectsWithTag("TowerSpawn"))
         {
             towerSpawns.Add(new TowerInfo
             {
                 Position = go.transform.position,
                 IsOccupied = false
             });
         }
 
         // Creat the Tower preview
         OnSelectionChanged();
     }
 
     private void Update()
     {
         PoolInput();
 
         if (!isActive)
             return;
 
         MoveSpawnPreview();
     }
 
     private void SpawnTower()
     {
         if (focusedTowerSpawn == null)
             return;
 
         if (focusedTowerSpawn.IsOccupied == true)
             return;
 
         // If Enough Resources
 
         focusedTowerSpawn.TowerObject = Instantiate(towerPrefabs[selectedTowerIndex], focusedTowerSpawn.Position, Quaternion.identity) as GameObject;
         focusedTowerSpawn.Tower = focusedTowerSpawn.TowerObject.GetComponent<BaseTower>();
         focusedTowerSpawn.IsOccupied = true;
 
         
     }
 
     private void OnSelectionChanged()
     {
         Destroy(spawnPreview);
         spawnPreview = Instantiate(towerPrefabs[selectedTowerIndex]) as GameObject;
         spawnPreview.GetComponent<BaseTower>().enabled = false;
         spawnPreview.GetComponent<Collider>().enabled = false;
     }
 
     private void MoveSpawnPreview()
     {
         if (playerTransform == null || CameraTransform == null)
         {
             playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
                             // GameObject.FindGameObjectWithTag ("MainCamera");
             CameraTransform = Camera.main.transform;
             return;
         }
 
 
         Vector3 previewPosition = playerTransform.position;
         previewPosition += (playerTransform.position - CameraTransform.position).normalized * PREVIEW_DISTANCE_FROM_PLAYER;
         RaycastHit hit;
         if (Physics.Raycast(previewPosition + Vector3.up * 5, Vector3.down, out hit, 10.0f, LayerMask.GetMask("Ground")))
             previewPosition.y = hit.point.y;
 
         //preview position is build range
         Collider[] towerSpawnColliders = Physics.OverlapSphere(previewPosition, 4.0f, LayerMask.GetMask("TowerSpawn"));
         if(towerSpawnColliders.Length > 0)
         {
             float closestDistanceSqr = Vector3.SqrMagnitude(previewPosition - towerSpawnColliders[0].transform.position);
             int closestIndex = 0;
             for(int i = 1; i < towerSpawnColliders.Length; i++)
             {
                 float d = Vector3.SqrMagnitude(previewPosition - towerSpawnColliders[i].transform.position);
                 if (d < closestDistanceSqr)
                 {
                     closestDistanceSqr = d;
                     closestIndex = i;
                 }
             }
 
 
             focusedTowerSpawn = towerSpawns.Find(t => t.Position == towerSpawnColliders[closestIndex].transform.position);
             previewPosition = focusedTowerSpawn.Position;
         }
         else
         {
             focusedTowerSpawn = null;
         }
 
 
         spawnPreview.transform.position = previewPosition;
     }
 
 
     private void PoolInput()
     {
         // Activate / Deactivate BuildMode
         if (Input.GetKeyDown(KeyCode.R))
         {
             if (isActive)
                 DisableBuildMode();
             else
                 ActivateBuildMode();
         }
 
         // Change Tower Selection
         if (isActive)
         {
             if(Input.GetKeyDown (KeyCode.Q))
             {
                 if(selectedTowerIndex > 0)
                 {
                     selectedTowerIndex--;
                     OnSelectionChanged();
                 }
             }
 
             if (Input.GetKeyDown(KeyCode.E))
             {
                 if (selectedTowerIndex < towerPrefabs.Count - 1)
                 {
                     selectedTowerIndex++;
                     OnSelectionChanged();
                 }
             }
         }
 
         // Spawn the Tower
         if (isActive)
         {
             if(Input.GetKeyDown (KeyCode.F))
             {
                 SpawnTower();
             }
         }
     }
 
     private void ActivateBuildMode()
     {
         isActive = true;
         spawnPreview.active = true;
     }
 
     private void DisableBuildMode()
     {
         isActive = false;
         spawnPreview.active = false;
     }
 }
 
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

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

186 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

Related Questions

Unet: How can I know the percentage of packets lost? 1 Answer

Unet - spawning bullets, two issues 1 Answer

Multiplayer First Person shooter similar to Battlefield 1 Answer

Photon & Unity Question 0 Answers

How to smoothly interpolate game object positions in a network game? 0 Answers


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