Автор Тема: Скрипт с двойным щелчком перестал работать  (Прочитано 961 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Март 26, 2015, 19:27:18 pm
Прочитано 961 раз

RummyDay

  • Новичок

  • Оффлайн
  • *

  • 15
  • Репутация:
    0
    • Просмотр профиля
Делаю RTS, написал код, который при однократном нажатии на область должен был поставить туда маршрутную точку, а при двойном нажатии заставить объект ускориться.
Когда только написал- всё работало, а как только добавил возможность выбирать несколько людей при помощи GUI Rect, сразу перестало работать.
Пытался и по другому делать, и перемещать строки в другие части кода, ничего не помогает, теперь просто новая маршрутная точка ставится выше старой, помогите разобраться, пожалуйста


void Update(){
ray = Camera.main.ScreenPointToRay (Input.mousePosition);    //  Создает луч из камеры в позицию мыши

Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);//  Чертит луч
if (Physics.Raycast (ray, out hit, 100)) {                     
//
}
if (Input.GetMouseButtonDown (1)) {
if (hit.collider.gameObject != GO.gameObject && hit.collider.tag != Side) {     //проверяет, совпадает ли                     .                                                                                                                                                                                            объект, которого касается           .                                                                                                                                                                                             луч, маршрутной точке      .                                                                                                                                                                                             или членам стороны
GO.transform.position = hit.point; //GO-это маршрутная точка
mv.SetDest ();                                //mv- это выбранный человек
mv.tap = false;                                //tap- это и есть "двойное нажатие"
mv.SpeedCh ();
}
if (hit.collider == GO.gameObject) {
mv.tap = true;
}

}
//Тут начинается выделение области:

if (Input.GetMouseButtonDown (0)) {
point1 = Input.mousePosition;
}
if (Input.GetMouseButton (0)) {
dragmouse=true;
point2=Input.mousePosition;
}
if(Input.GetMouseButtonUp(0)){
dragmouse=false;
Select();
}
}
}
void OnGUI(){
if (dragmouse) {
width=point2.x-point1.x;
height=(Screen.height-point2.y)-(Screen.height-point1.y);
SelectRect=new Rect(point1.x,Screen.height-point1.y,width,height);
GUI.DrawTexture(SelectRect,selTex,ScaleMode.StretchToFill,true);
}
}
void Select(){
width = point2.x - point1.x;
height = (Screen.height - point2.y) - (Screen.height - point1.y);
if (width < 0) {
width-=width+width;
}
if (height < 0) {
height-=height+height;
}
if (point2.x < point1.x) {
var x1=point1.x;
var x2=point2.x;
point1.x=x2;
point2.x=x1;
}
if (point2.y > point1.y) {
var y1=point1.y;
var y2=point2.y;
point1.y=y2;
point2.y=y1;
}
SelectRect = new Rect (point1.x, Screen.height - point1.y, width, height);
for (int p =0; p<=SU.unitlist.Count; p++) {
if(SelectRect.Contains(GetComponent<Camera>().WorldToScreenPoint(SU.unitlist[p].transform.position))){
if(mv==null){
mv=SU.unitlist[p];
GO=mv.wp;
mv.cursq=mv.sq;
}else{
if(mv.sq.mv[1]==null){
mv.sq.mv[1]=SU.unitlist[p];
mv.sq.mv[1].cursq=mv.sq;
}else{
if(mv.sq.mv[2]==null){
mv.sq.mv[2]=SU.unitlist[p];
mv.sq.mv[2].cursq=mv.sq;
}else{
if(mv.sq.mv[3]==null){
mv.sq.mv[3]=SU.unitlist[p];
mv.sq.mv[3].cursq=mv.sq;
}else{
if(mv.sq.mv[4]==null){
mv.sq.mv[4]=SU.unitlist[p];
mv.sq.mv[4].cursq=mv.sq;
}else{
if(mv.sq.mv[5]==null){
mv.sq.mv[5]=SU.unitlist[p];
mv.sq.mv[5].cursq=mv.sq;
}else{
if(mv.sq.mv[6]==null){
mv.sq.mv[6]=SU.unitlist[p];
mv.sq.mv[6].cursq=mv.sq;
}else{
if(mv.sq.mv[7]==null){
mv.sq.mv[7]=SU.unitlist[p];
mv.sq.mv[7].cursq=mv.sq;
}
}
}
}
}
}
}
}
}
}
}
}

Знаю, что код получается большой и проще было бы использовать функцию "for (int...)" для назначения в отряд, но Unity  проверял только до первого свободного места в отряде и всё, то есть добавлял всего одного человека, а так - всех необходимых

Пробовал также убирать выбор сразу нескольких людей, всё-равно больше не работает
« Последнее редактирование: Март 26, 2015, 19:29:08 pm от RummyDay »