 |
26.07.2016, 14:43
|
#16
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Всё просто
http://shgames.ru/index.php?title=%D...BE%D0%BD%D1%8B
Пример использования сферической интерполяции в Unity3D
// Интерполяция между двумя вращениями.
// (Назначьте два разных объекта на переменные from и to
// и данный объект повернется начиная с вращения первого,
// приняв в итоге вращение второго )
using UnityEngine;
public class example : MonoBehaviour {
public Transform from;
public Transform to;
public float speed = 0.1F;
void Update() {
transform.rotation = Quaternion.Slerp(from.rotation, to.rotation, Time.time * speed);
}
}
Теперь и планета поворачивается в место клика 
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.07.2016, 15:01
|
#17
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Mistshift Обучение
Есть еще куча официальных уроков как по юнити3д так и по C#.
http://unity3d.com/learn/tutorials
Естественно, что все на английском.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.07.2016, 02:22
|
#18
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Доделал то, что хотел, что то получается уже
Для перемещения по сфере можно кликать по ней, кликать по кубам для перемещения к ним, расставлять “Станции” пробелом. Сейчас можно ставить друг в друга “Станции”
Дальше в планах ООП, уже сейчас чувствую что необходимо.
|
(Offline)
|
|
27.07.2016, 08:54
|
#19
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от Foxymist
Дальше в планах ООП, уже сейчас чувствую что необходимо.
|
 чего? Т.е ты на шарпе до этого без него писал типо? 
|
(Offline)
|
|
27.07.2016, 12:39
|
#20
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от RegIon
 чего? Т.е ты на шарпе до этого без него писал типо? 
|
Типо. Несовсем так, вот он пишет;
https://habrahabr.ru/post/148015/

1. Наследование. Есть пекарь. Есть печь электрическая и газовая. Ваша задача смоделировать процесс приготовления пищи пекарем в каждой из печи. Решая задачу в лоб, у нас будет много дублирования кода из-за того, что сам процесс передачи пищи в печь и сама работа с печами идентичны для обеих печей. Но если мы включаем объектное мышление, и вспоминаем про инструмент наследование, то получаем примерно следующее (диаграмму лень рисовать, сорри):
Есть печь (абстрактная печь). У нее есть поведение — включить, выключить, увеличить или уменьшить температуру, положить чего-то, достать чего-то и состояние — температура в печи, включена или выключена. Это отличный пример абстрактного объекта в котором соблюдены принципы инкапсуляции (при реализации я их обязательно буду соблюдать). И есть пекарь, конкретный такой пекарь Иван. Он умеет работать с абстрактной печью. Т.е. смотреть температуру, включать выключать и т.д. вы поняли. Сила наследования в том, что нам не придется переписывать нашего Ивана для каждой из печей, будь то электро или газовая печь. Я думаю всем ясно почему? Получается что инструмент применен правильно.
|
А у меня есть скрипт “PickedEntity” он двигает сферу при клике(Камеру вокруг сферы) а вчера я продублировал его “PickedEntity1” и добавил возможность клонирования объекта(Станции - куба)
Вот и понял, что тут чтото не так, а конкретно я не использую ООП а надо бы.
Я не особо в этом разбираюсь, возможно, неправильно выразился. 
|
(Offline)
|
|
27.07.2016, 15:21
|
#21
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Mistshift Обучение
Ты вообще ничего пока что не понял.
Сообщение от Foxymist
А у меня есть скрипт “PickedEntity” он двигает сферу при клике(Камеру вокруг сферы) а вчера я продублировал его “PickedEntity1” и добавил возможность клонирования объекта(Станции - куба)
Вот и понял, что тут чтото не так, а конкретно я не использую ООП а надо бы.
|
Это называется Entity Component System.
У тебя на сцене есть объект и по сути это просто точка в пространстве как в блитзе пивот (CreatePivot()). На нем есть уже стандартные от юнити3д компоненты (Transform, Renderer, etc) и ты еще навешиваешь свои компоненты (скрипты), которые им или другими объектами как то манипулируют.
Сообщение от Foxymist
|
У тебя вот есть станция. Если ты захочешь добавить еще одну станцию, то ты вероятно как в блитзе начнешь писать новый код для этой станции. Но если подумать, то у станций если некоторые одинаковые возможности. Допустим стандартная возможность это продать станцию.
В случае без ООП ты будешь писать два раза функцию ПродатьСтанцию1() и ПродатьСтанцию2().
С ООП ты можешь сделать базовый класс для станций.
public class Station {
protected int cost = 100 // цена станции
public virtual void Sell(){ // функция продажи станции
playerMoney += cost / 2; // возвращаем половину цены за станцию в казну
}
}
Далее код станции Харвестера:
// создаем новый класс для Харвестера
public class StationHarvester : Station { // и наследуем возможности из класса "Station"
// и вдруг оказалось, что Харвестер при постройке занимает
// 10 единиц электричества (привет Red Alert, C&C: Generals)
// и соответственно нужно возвращать в казну эти 10 единиц электричества, но
// в базовой функции продажи такой возможности нет. Поэтому нужно изменить функцию (перезаписать).
public override void Sell(){
playerEnergy += 10; // новая возможность (возвращение энергии)
base.Sell(); // и при этом через base.Sell() мы вызываем стандартную функцию продажи, которая
// возвращает деньги за станцию.
}
}
1. Меньше кода нужно писать ведь функция Sell может быть огромная, а тут изменили одну строку при той же
функциональности.
2. Если нужно все переделать, то это будет легко и все внезапно не перестанет работать так как все
разложено по полочкам (по классам), а не как в Блитзе все в одной куче.
Главное не слишком увлекаться "разбиением" по классам и функциям. Еще есть интерфейсы, но это уже другая история.
playerEnergy += 10; - "+=" это тоже самое, что и "playerEnergy = playerEnergy + 10;"
virtual - это ключевое слово значит, что если это класс кто-то наследует, то эту функцию можно изменить.
override - это ключевое слово значит, что мы изменяем (перезаписываем) функцию, которая кстати должна быть помечена ключевым словом virtual.
Вроде можно изменять (перезаписывать) функцию в лоб просто объявив новую с таким же именем, но тогда мы потеряем возможности старой функции и это вроде не совсем правильно.
Пример не самый лучший, но возможно поможет не много разобраться. 
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Nex за это полезное сообщение:
|
|
28.07.2016, 19:50
|
#22
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Изменил управление так вроде удобнее.
Использовал этот пример: http://wiki.unity3d.com/index.php/Mo...fiteRotateZoom
Обзор - Зажать правую кнопку мыши + двигаем мышь.
Зум -Скроллинг .
Передвинуть орбитальную станцию; Клик по сфере левая кнопка мыши.
Строить можно только там, где орбитальная станция и в определённом радиусе вокруг неё.
Стройка – Пробел.
Планета вращается вокруг звезды.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.07.2016, 01:24
|
#23
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Вот что готово;
Немного осваивая ГУИ написал вот такой скрипт ;

using UnityEngine;
using System.Collections;
public class NameUnit : MonoBehaviour {
private RaycastHit hit;
public string UnitName;
public Color ColorText;
public int UnitHP;
public int HP=0;
public Color ColorHP;
public int UnitEnergy;
public int E=0;
public Color ColorEnergy;
private float distanceVector;
public Transform AlienUnit;
void Start () {
}
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);
}
//Transform Unit;
distanceVector = Vector3.Distance (gameObject.transform.position , AlienUnit.position);
if (distanceVector <2)
{
if (Input.GetKeyDown (KeyCode.F1)) {
UnitHP -= 10;
}
if (Input.GetKeyDown (KeyCode.F2)) {
UnitEnergy -= 10;
}
//if (Input.GetKeyDown (KeyCode.F3)) {
// UnitHP += 10;
//}
//if (Input.GetKeyDown (KeyCode.F4)) {
// UnitEnergy += 10;
//}
}
//UnitHP
HP = UnitHP;
if (HP>99){HP=100;}
if (HP<1){gameObject.active= false;}
GUI.color = Color.black+ColorHP;
for (int i = 0; i <HP; i=i+1)
{
GUI.Label (new Rect ((TextPos.x+(i)-HP/2), Screen.height - TextPos.y - (35), 10, 10), "|");
}
//UnitEnergy
E = UnitEnergy;
if (E>99){E=100;}
if (E<1){E=0; UnitEnergy=0;}
GUI.color = Color.black+ColorEnergy;
for (int i = 0; i <E; i=i+1)
{
GUI.Label (new Rect ((TextPos.x+(i)-E/2), Screen.height - TextPos.y - (30), 10, 10), "|");
}
}
void Update ()
{
}
}
Появилось ХП и Энергия чтобы отнять нужно чтобы зеленый маркер находился рядом c юнитом. “F1” отнять ХП “F2” отнять Энергию.
“Q” подробности. Юнит исчезает если HP=0
Теперь надо обернуть всё в базовый класс ну ООП вобщем…
Немного разобрался с ГУИ.
На скриншоте с зажатой “Q” подробности.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.08.2016, 23:49
|
#24
|
Нуждающийся
Регистрация: 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 механизм покупки – продажи.
|
(Offline)
|
|
03.08.2016, 01:46
|
#25
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Mistshift Обучение
А можно ты не будешь вываливать километровые листинги кода, а вместо этого, как белый человек, дашь ссылку на гитхаб с сорцами? Интересующиеся заглянут, а нам простыни пролистывать не придётся...
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.08.2016, 12:39
|
#26
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от Nex
playerMoney += cost / 2; // возвращаем половину цены за станцию в казну
|
После пары подстав от MATLAB, такие конструкции вызывают у меня неудобство. Укажите явно: ЧТО делать с дробной частью (в общем случае, возможны 4 варианта) до её каста к типу операнда слева - floor, ceil, round, fix?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.08.2016, 14:18
|
#27
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от impersonalis
После пары подстав от MATLAB, такие конструкции вызывают у меня неудобство. Укажите явно: ЧТО делать с дробной частью (в общем случае, возможны 4 варианта) до её каста к типу операнда слева - floor, ceil, round, fix?
|
protected int cost = 100 // цена станции
|
Думаю тут в любом случае будет 50. И если указать 2.0 или 2f, то вероятно C# сообщит о том, что float не может быть int.
Или я не правильно что-то понял?
|
(Offline)
|
|
03.08.2016, 14:18
|
#28
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от Taugeshtu
А можно ты не будешь вываливать километровые листинги кода, а вместо этого, как белый человек, дашь ссылку на гитхаб с сорцами? Интересующиеся заглянут, а нам простыни пролистывать не придётся...
|
Хорошо в будущем буду прятать под OFFtop’ы.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Foxymist за это полезное сообщение:
|
|
03.08.2016, 15:38
|
#29
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Mistshift Обучение
Сообщение от Nex
Думаю тут в любом случае будет 50. И если указать 2.0 или 2f, то вероятно C# сообщит о том, что float не может быть int.
Или я не правильно что-то понял?
|
не обращай внимания - я придираюсь. В M могла образоваться даже в априори целом результате единичка где-нить на n-ой позиции после запятой (т.е. её ещё и невидно при стандартном выводе), что при округлении в бОльшую сторону добавляло аж единицу.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.08.2016, 15:29
|
#30
|
Нуждающийся
Регистрация: 29.06.2016
Сообщений: 80
Написано 28 полезных сообщений (для 52 пользователей)
|
Ответ: Mistshift Обучение
Не стал делать GUI, просто почитал у вас тут http://forum.boolean.name/forumdisplay.php?f=167
там всё просто, мне нужно только определиться, каким оно должно быть, и какой метод использовать.
Новое; сделал основу для выбора и покупки юнитов , пока их два HarvestStation за 100 “Тумана” и ProtectStation за 10 “Тумана”
ProtectStation просто как альтернатива для тестирования (Пустышка) но её можно убить.
Выбор что строить цифры 1,2… выйти из режима строительства правая кнопка мыши.
Изначально у вас 100 тумана советую приобрести HarvestStation.
Нужно ещё пару мелочей дописать и дальше проще будет, пиши себе скрипты да придумывай
юнитов.
Энергия теперь отнимается нормально и скорость добычи тоже.
UnitEnergy = Energy(UnitStaticEnergy-distanceOrbitalStation,100,20,1);
Resurs = ResursLimit (100-(UnitEnergy/32), Resurs, 100);
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:48.
|