Game Maker - создание игр | HellRoom Games

Дополнительно: => Вопросы - Ответы => Тема начата: redeek789789789 от Ноябрь 18, 2012, 23:33:03



Название: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 18, 2012, 23:33:03
Здравствуйте sm_hi3
помогите пожалуйста сделать прицел на Unity3d, который бы увеличивался плавно во время стрельбы. Я уже как только не пытался его делать, я и создавал листинговый массив, в который добавлял элементы изображений, а потом рисовал GUI текстуру, но не получилось, так как рисовалось множество прицелов сразу. Создавал переменную, на которую умножал размеры спрайта, прицел вроде как увеличивался но это выглядило не красиво  :facepalm_2:
Подскажите пожалуйста более работающий способ создания плавного увеличения прицела?


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 19, 2012, 09:45:33
Всё просто. текстура должна быть квадратом 50х50.
Создай скрипт Crosshair.cs.
Вот набросал код:
Код:
using UnityEngine;
using System.Collections;


 
public class Crosshair : MonoBehaviour {

public Texture2D tx;
public float maxSize = 100.0F;
public float minSize = 20.0F;
public float changeSpeed = 0.5F;
float tempRange = 0.0F;

void Max() {

if(tempRange < maxSize) {
tempRange+=changeSpeed;
}

}


 void Min() {

if(tempRange > 0) {
tempRange-=changeSpeed;
}

}


void OnGUI() {

GUI.Box(new Rect(Screen.width/2-200-tempRange, Screen.height/2, 120, 40), tx);
 GUI.Box(new Rect(Screen.width/2+200+tempRange, Screen.height/2, 120, 40), tx);
 GUI.Box(new Rect(Screen.width/2, Screen.height/2-200-tempRange, 120, 40), tx);
 GUI.Box(new Rect(Screen.width/2, Screen.height/2+200+tempRange, 120, 40), tx);
}


}




Добавлено: Ноябрь 19, 2012, 09:53:23
Теперь скажу как юзать:

Если скрипт оружия на шарпе:

Код:
public Crosshair cros;


////// при выстреле
cros.Max();


////// при отпускании мыши.
cros.Min();

если на яве,
 
Код:
var cros : GameObject;


////// при выстреле
cros.SendMessage("Max");


////// при отпускании мыши.
 cros.SendMessage("Min");


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 19, 2012, 19:44:03

Спасибо, всё работает, только пришлось подправить с размерами и вместо
Код:
GUI.Box(...);
прописал
Код:
GUI.DrawTexture
sm:)


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 19, 2012, 19:45:20

Спасибо, всё работает, только пришлось подправить с размерами и вместо
Код:
GUI.Box(...);
прописал
Код:
GUI.DrawTexture
sm:)

Не за что. Как по мне - бокс оптимальнее.


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 19, 2012, 19:57:58

Спасибо, всё работает, только пришлось подправить с размерами и вместо
Код:
GUI.Box(...);
прописал
Код:
GUI.DrawTexture
sm:)

Не за что. Как по мне - бокс оптимальнее.
просто Box рисовал вокруг каждой части прицела Квадратик  sm:)


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 19, 2012, 20:01:32
Я же сказал, что нужен белый квадрат, 50 на 50.


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 19, 2012, 20:08:13
ай, блин, это я слегка протупил :facepalm_2:
но вроде тоже нечего так получилось


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 19, 2012, 20:10:49
ай, блин, это я слегка протупил :facepalm_2:
но вроде тоже нечего так получилось
Ну вот, видишь :)


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 19, 2012, 20:22:19
Спасибо :-))


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 19, 2012, 20:24:04
Спасибо :-))
Не за что!  sm_good


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 20, 2012, 21:03:48
а можете ещё подсказать? sm:)
когда я деактивирую объект при помощи
Код:
Объект.SetActiveRecursively(false);
и активирую
Код:
Объект.SetActiveRecursively(true);
как туда "впихнуть" анимацию, например, анимация "Оружие опускается" проиграла и объект деактивируется.
в каком событие мне анимацию лучше прописать?


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 21, 2012, 19:01:42
как пример:

Код:
void Hide() {
animation.CrossFade("hide");
yield WaitForSeconds(1);
Объект.SetActiveRecursively(false);
}


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 21, 2012, 21:43:21
как пример:

Код:
void Hide() {
animation.CrossFade("hide");
yield WaitForSeconds(1);
Объект.SetActiveRecursively(false);
}

спасибо sm_good

Добавлено: Ноябрь 21, 2012, 21:50:38
а как реализовать обмен значений между листинговыми массивами?
например
Код:

_List[1] = 3;
_List[2] = 1;

_List[1] меняется_значением с _List[2];

просто пишу алгоритм сортировки по дистанции и использую известный "алгоритм Пузырька" sm:)



Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 22, 2012, 09:44:49

Листы на шарпе?
добавлять в элемент ? то так:

Код:
public List<GameObject> lst = new List<GameObject>();
/////
lst.Add(gameObject);
///


p.s: Посмотри список методов класса в справке. там всё есть.


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 22, 2012, 15:34:26

Листы на шарпе?
добавлять в элемент ? то так:

Код:
public List<GameObject> lst = new List<GameObject>();
/////
lst.Add(gameObject);
///


p.s: Посмотри список методов класса в справке. там всё есть.


это я написал, потом скрипт у меня находит объекты с определенным тегом, потом при помощи цикла foreach(){} я перебираю объекты в массиве, в котором хранятся объекты с тегом и добавляю их в Lst, потом пишу 2 цикла for и сравниваю их, вот скрипт
Код:
public List<GameObject> _List;

// Use this for initialization
void Start () {

GameObject[] TochkyPeremeshenia = GameObject.FindGameObjectsWithTag("Finish");

foreach(GameObject Finish in TochkyPeremeshenia){

List.Add(Finish);


for(int a=0;a<=_List.Count-1;a++){

for(int i=0; i< _List.Count - a; i++){

float distancesI = Vector3.Distance(transform.position,_List[i].transform.position) * 10;
float distancesI1 = Vector3.Distance(transform.position,_List[i+1].transform.position) * 10;

if(distancesI > distancesI1){
_List[i] МЕНЯЕТСЯ _List[i+1]  //  <<-------- Как?:(

}
}
}
}
}


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: Alcatraz от Ноябрь 27, 2012, 09:50:31
Такс, потерял тему, т.к ты создал не в том разделе, надо было в разделе юнити.

Присваивать значение элементу листа так:

Код:
lst[i] = "test" as string;
т.е с указанием типа.  sm_good


Название: Re: Плавное увеличение прицела в Unity3d
Отправлено: redeek789789789 от Ноябрь 29, 2012, 17:00:57
Спасибо sm_hi3 sm_good