Немного продвинулся в перёд :
Теперь харвестер сосёт туман, количество и скорость всасываемого, зависит от дистанции между харвестером и орбитальной станцией.
На планете простой скрипт, имя планеты, общее количество тумана и сколько тумана осталось.
В верхнем левом углу, отображается - количество собранного тумана.
Немного оптимизировал скрип:
using UnityEngine;
using System.Collections;
public class NameUnit : MonoBehaviour {
public static NameUnit Instance { get; private set; }
public string UnitName;
public Color ColorText;
public float UnitHP;
public Color ColorHP;
public float UnitEnergy;
public Color ColorEnergy;
public float Resurs;
public Color ColorResurs;
private float distanceVector;
public float distanceOrbitalStation;
public Transform AlienUnit;
public Transform OrbitalStationUnit;
private float HarvestMistRes;
public bool componentHarvest;
void Start () {
//HarvestMistRes = Mist.Instance.MistPlanet;
}
public void Awake()
{
Instance = this;
}
Vector3 TextPos;
void OnGUI()
{
TextPos = Camera.main.WorldToScreenPoint (transform.position);
if (Input.GetKey (KeyCode.Q)) {
GUI.Label (new Rect (TextPos.x, Screen.height - TextPos.y, 50, 50), UnitName);
GUI.color = Color.black + ColorText;
GUI.Label (new Rect (TextPos.x, Screen.height - TextPos.y - (20), 50, 50), "HP:" + UnitHP);
}
if (componentHarvest == true) {GUIResursProgress (Resurs, ColorResurs, 40);}
GUIResursProgress (UnitHP, ColorHP, 35);
GUIResursProgress (UnitEnergy, ColorEnergy, 30);
}
void Update ()
{
distanceVector = DistanceUnit(gameObject.transform, AlienUnit);
distanceOrbitalStation = DistanceUnit(gameObject.transform, OrbitalStationUnit);
if (Input.GetKeyDown (KeyCode.F1) && distanceVector<5) {UnitHP-=10;}
//UnitHP
UnitHP=HPUnit(UnitHP,gameObject);
//UnitEnergy
if (distanceOrbitalStation > 20) {UnitEnergy = Energy(UnitEnergy,100,20,1);}
if (distanceOrbitalStation < 20) {UnitEnergy = Energy(UnitEnergy,100,20,0);}
//UnitResurs
if (componentHarvest == true) {Resurs = ResursLimit (80, Resurs, 100, UnitEnergy, 20);}
}
//Function=====================================================================================================================================
public void GUIResursProgress(float ResursGUI, Color ResursColor, int TextYPos)
{
GUI.color = Color.black + ResursColor;
for (int i = 0; i <ResursGUI; i=i+1)
{
GUI.Label (new Rect ((TextPos.x + (i) - ResursGUI / 2), Screen.height - TextPos.y - (TextYPos), 50, 50), ".");
}
}
public static float DistanceUnit(Transform A,Transform B)
{
return Vector3.Distance (A.position, B.position);
}
public static float HPUnit(float HP, GameObject gameObject)
{
if (HP > 100) {HP = 100;}
if (HP < 1) {gameObject.active = false;}
return HP;
}
public static float Energy(float E,float Max,float Min , int FlagIE)
{
if (FlagIE == 0 )
{
E += 10f * TimeRTS ();
if (E > Max) {E =Max;}
}
if (FlagIE == 1 )
{
E -= 10f * TimeRTS ();
if (E < Min ) {E = Min;}
}
return E;
}
public static float ResursLimit(float UpdateHarvest ,float ResursHarvest, float MaxResurs, float ResursEnergy, float EnergyDist)
{
if (Mist.Instance.MistPlanet > 0)
{
if (ResursHarvest < MaxResurs && ResursEnergy > EnergyDist) {
ResursHarvest += 50f * TimeRTS ();
}
if (ResursHarvest < MaxResurs && ResursEnergy == EnergyDist) {
ResursHarvest += 10f * TimeRTS ();
UpdateHarvest=99.9f;
}
if (ResursHarvest > MaxResurs) {
ResursHarvest = 0;
}
if (ResursHarvest < MaxResurs && ResursHarvest > UpdateHarvest && Mist.Instance.MistPlanet > 0) {
Mist.Instance.MistPlanet--;//Resurs
}
}
return ResursHarvest;
}
public static float TimeRTS(float t=1.0f )
{
return Time.deltaTime*t;
}
//Function=====================================================================================================================================
}
Управление осталось тем же Узнать о планете больше “Q”
Обзор - Зажать правую кнопку мыши + двигаем мышь.
Зум -Скроллинг .
Передвинуть орбитальную станцию; Клик по сфере левая кнопка мыши.
Строить можно только там, где орбитальная станция и в определённом радиусе вокруг неё.
Стройка – Пробел.
Сейчас в планах сделать GUI механизм покупки – продажи.