Показать сообщение отдельно
Старый 02.08.2016, 23:49   #24
Foxymist
Нуждающийся
 
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений
(для 52 пользователей)
Ответ: Mistshift Обучение

Немного продвинулся в перёд :
Теперь харвестер сосёт туман, количество и скорость всасываемого, зависит от дистанции между харвестером и орбитальной станцией.

На планете простой скрипт, имя планеты, общее количество тумана и сколько тумана осталось.

В верхнем левом углу, отображается - количество собранного тумана.
Немного оптимизировал скрип:

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 механизм покупки – продажи.
Миниатюры
Нажмите на изображение для увеличения
Название: Mistshift.png
Просмотров: 968
Размер:	613.4 Кб
ID:	22455  
Вложения
Тип файла: rar Mistshift.rar (7.81 Мб, 791 просмотров)
(Offline)
 
Ответить с цитированием