//eventually public if fabrics will call CreateUnitAt(). private void CreateUnitAt(int x, int y, UnitType.UnitArcheType unitType, Player p) { //instantiate at x, y as UnitArcheType unitType such as Archer, Infantry or others: UnitType ut = GetUnitTypeBy(unitType); GameObject go = Instantiate(ut.UnitVisualPrefab, new Vector3(x, y, 0), Quaternion.identity) as GameObject; go.transform.SetParent(_unitsHolder); // Initialize Unit script. Unit unitScript = go.GetComponent <Unit>(); unitScript.TileX = (int)go.transform.position.x; unitScript.TileY = (int)go.transform.position.y; unitScript.OwningPlayerID = p.PlayerID; unitScript.Unit_Type = unitType; unitScript.IsRangedUnit = ut.MaxAttackRange > 1; unitScript.Map = BoardManager; unitScript.CurrentHealth = ut.MaxHealth; unitScript.Crosshair = go.transform.Find("Crosshair").gameObject; //GO -> Transform -> child's transform -> child GameObject. //Initialize ClickOnUnitHandler. go.GetComponent <ClickOnUnitHandler>().UnitManager = this; //colouring the Units go.GetComponentInChildren <SpriteRenderer>().material.color = p.UnitColouring; // How to change sprite colouring: https://www.youtube.com/watch?v=J66UkLJHzCY // GetComponent functions overview: https://docs.unity3d.com/ScriptReference/Component.html p.AllUnits.Add(go); }
private UnitType GetUnitTypeBy(UnitType.UnitArcheType uat) { return(UnitTypes[(int)uat]); }