- Home /
Need to switch objects
im looking to switch my transform (currentobject) to the next item in the list. how would i do that?
public class BuildingSystem : MonoBehaviour {
public List<buildObjects> objects = new List<buildObjects>();
public buildObjects currentobject;
private Vector3 currentPos;
public Transform currentPreview;
public Transform cam;
public RaycastHit hit;
public LayerMask layer;
public float offset = 1.0f;
public float gridSize = 1.0f;
public bool isBuilding;
private Vector3 currentRot;
public int switcher = 0;
private void Start()
{
ChangeCurrentBuilding(switcher);
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
private void Update()
{
if (isBuilding)
{
StartPreview();
}
if (Input.GetMouseButtonDown(0))
{
Build();
}
if (Input.GetKeyDown(KeyCode.Q))
{
//Switch Object
}
}
public void ChangeCurrentBuilding(int cur)
{
currentobject = objects[cur];
if (currentPreview != null)
{
Destroy(currentPreview.gameObject);
}
GameObject currentprev = Instantiate(currentobject.preview, currentPos, Quaternion.Euler(currentRot)) as GameObject;
currentPreview = currentprev.transform;
}
public void StartPreview()
{
if (Physics.Raycast(cam.position, cam.forward, out hit, 10, layer))
{
if (hit.transform != this)
{
ShowPreview(hit);
}
}
}
public void ShowPreview(RaycastHit hit2)
{
currentPos = hit2.point;
currentPos -= Vector3.one * offset;
currentPos /= gridSize;
currentPos = new Vector3(Mathf.Round(currentPos.x), Mathf.Round(currentPos.y), Mathf.Round(currentPos.z));
currentPos *= gridSize;
currentPos += Vector3.one * offset;
currentPreview.position = currentPos;
currentPreview.position = currentPos;
if (Input.GetMouseButtonDown(1))
{
currentRot += new Vector3(0,90,0);
}
currentPreview.localEulerAngles = currentRot;
}
public void Build()
{
PreviewObject PO = currentPreview.GetComponent<PreviewObject>();
if (PO.isBuildable)
{
Instantiate(currentobject.prefab, currentPos, Quaternion.Euler(currentRot));
}
}
}
[System.Serializable]
public class buildObjects
{
public string name;
public GameObject preview;
public int materials;
public GameObject prefab;
}
Comment
Your code seem to already do what you are looking for. Does it not? What exactly does not work?
Good day.
As madks says, pelase you need to find exactly where the code stops doing what is suposed to do, where you can be sure its working fine and where is not.
And give feedback!
Bye!
Your answer
Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
A node in a childnode? 1 Answer
Player Settings Standalone resolution will not change? 0 Answers
Scenes won't work when built together 2 Answers