forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Физика (http://forum.boolean.name/forumdisplay.php?f=168)
-   -   Толчок (http://forum.boolean.name/showthread.php?t=19350)

6082asil 09.08.2014 18:17

Толчок
 
Здравствуйте. Есть главный объект - "игрок"; за ним ходят "враги". Если их много, то они окружают "игрока", и он не может сдвинуться с места, вот.
Хочу сделать так, чтобы при нажатии на Пробел, например, все "враги" отталкивались от "игрока" на определенное расстояние.

Ну так вот, как это сделать?

Arton 09.08.2014 21:29

Ответ: Толчок
 

Я думал игра про это:


6082asil 09.08.2014 21:47

Ответ: Толчок
 
Я подозревал, что так кто-то подумает..
Ну а по теме что-то есть?

Andvrok 09.08.2014 22:38

Ответ: Толчок
 
http://docs.unity3d.com/ScriptRefere...sionForce.html
Это если с физикой делать.

6082asil 09.08.2014 23:38

Ответ: Толчок
 
А если без нее? мне она как-то не особо нужна. Лишний геморрой с ней.

Andvrok 09.08.2014 23:51

Ответ: Толчок
 
А если без неё, то находишь все объекты в радиусе вокруг игрока, вычисляешь вектор по направлению от игрока и двигаешь по этому вектору.

6082asil 10.08.2014 04:20

Ответ: Толчок
 
Ладно..давайте с физикой все-таки попробуем разобраться.
AddExplosionForce не работает, вот.

Andvrok 10.08.2014 04:25

Ответ: Толчок
 
На врагах ригидбоди висит?

6082asil 10.08.2014 12:47

Ответ: Толчок
 
Конечно, епт. "Ты за меня придурка не держи" (с)

tirarex 10.08.2014 13:10

Ответ: Толчок
 
Я не работаю с юнити но : Поиграй с массой тел и меняй типы прилагаемых сил.

pax 10.08.2014 13:36

Ответ: Толчок
 
Цитата:

Сообщение от 6082asil (Сообщение 285188)
Конечно, епт. "Ты за меня придурка не держи" (с)

Первое предупреждение, еще одно и бан за оскорбление.

6082asil 10.08.2014 13:58

Ответ: Толчок
 
Вот до толчка.

Вот после (ну или во время него).

Ну то есть, они как бы покосились чуть-чуть и все, вот.
-----
О.о
Вот это да, кто кого оскорбил-то?

pax 10.08.2014 15:12

Ответ: Толчок
 
Картинки ничего не показывают. Покажи состав компонентов на врагах и сам скрипт применения сил. Тогда будет понятно почему не работает.

Цитата:

Сообщение от 6082asil (Сообщение 285192)
О.о
Вот это да, кто кого оскорбил-то?

Учитесь нормально общаться, с взаимным уважением. На вполне адекватный вопрос, Вы дали не адекватный ответ, который можно посчитать личным оскорблением. Поэтому получили предупреждение.

6082asil 10.08.2014 15:25

Ответ: Толчок
 
Код:

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Rigidbody))]

public class spacebarImpulse : MonoBehaviour {

       

        void Start () {
               
        }

        void Update () {
                if(Input.GetKeyDown(KeyCode.Space)) {
                        GameObject.Find("astar").GetComponent<AstarPath>().enabled = !GameObject.Find("astar").GetComponent<AstarPath>().enabled;
                        GameObject.Find("enemy1").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy1").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy2").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy2").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy3").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy3").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy4").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy4").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy5").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy5").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy6").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy6").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy7").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy7").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy8").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy8").GetComponent<AIFollow>().enabled;
                        GameObject.Find("enemy9").GetComponent<AIFollow>().enabled = !GameObject.Find("enemy9").GetComponent<AIFollow>().enabled;
                        rigidbody.AddExplosionForce(100,transform.position,10);
                }
        }
}

Вот скрипт.
-----
Ну с одной стороны, серьезный настрой, это конечно хорошо, а с другой - ну вы чего, шуток не понимаете чтоли?

Mr_F_ 10.08.2014 15:32

Ответ: Толчок
 
Цитата:

rigidbody.AddExplosionForce(100,transform.position ,10);
ригидбоди чей? ты даёшь пинок объекту, на котором скрипт, из центра его же самого.

pax 10.08.2014 15:34

Ответ: Толчок
 
1. Не понятно на каком объекте этот скрипт.
2. Если такой скрипт на игроке, то он применяет силу к игроку.
3. Для поиска врагов можно использовать теги. Наприер если всем врагам назначить тег Enemy, то потом можно получить все объекты с этим тегом http://docs.unity3d.com/ScriptRefere...tsWithTag.html и применить к ним что-то. Например силу взрыва.
4. Если опираться на твой подход, то применить к врагу силу можно так:
PHP код:

GameObject.Find("enemy1").rigidbody.AddExplosionForce(100,transform.position,10); 

Шутки мы понимаем, но нормальные шутки

6082asil 11.08.2014 02:25

Ответ: Толчок
 
Код:

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Rigidbody))]

public class spacebarImpulse : MonoBehaviour {



        void Start () {
               
        }

        void Update () {
                if(Input.GetKeyDown(KeyCode.Space)) {
                        GameObject.Find("astar").GetComponent<AstarPath>().enabled = !GameObject.Find("astar").GetComponent<AstarPath>().enabled;
                        GameObject[] Enemies = GameObject.FindGameObjectsWithTag("enemy");
                        foreach (GameObject enemy in Enemies) {
                                GetComponent<AIFollow>().enabled = !GetComponent<AIFollow>().enabled;
                                rigidbody.AddExplosionForce(10,transform.position,5);
                        }
                }
        }
}

После компиляции:
Assets/Handmade/Enemy/spacebarImpulse.cs(18,45): warning CS0219: The variable `enemy' is assigned but its value is never used

При нажатии на пробел:
NullReferenceException: Object reference not set to an instance of an object
spacebarImpulse.Update () (at Assets/Handmade/Enemy/spacebarImpulse.cs:19)

Mr_F_ 11.08.2014 02:40

Ответ: Толчок
 
ну не будь дураком.

Цитата:

foreach (GameObject enemy in Enemies) {
GetComponent<AIFollow>().enabled = !GetComponent<AIFollow>().enabled;
rigidbody.AddExplosionForce(10,transform.position, 5);
}
ты берёшь компоненты AIFollow и rigidbody у вызывающего скрипта, у котрого их нет.
ты делаешь цикл по врагам и НЕ ЮЗАЕШЬ объект enemy.

6082asil 11.08.2014 02:50

Ответ: Толчок
 
Код:

                        foreach (GameObject enemy in Enemies) {
                                enemy.GetComponent<AIFollow>().enabled = !GetComponent<AIFollow>().enabled;
                                enemy.rigidbody.AddExplosionForce(10,transform.position,5);
                        }

Так чтоли? Кажется, нет, потому что так все равно не работает.

Цитата:

ну не будь дураком.
Это между прочим не так-то просто.

Mr_F_ 11.08.2014 03:05

Ответ: Толчок
 
Цитата:

= !GetComponent<AIFollow>().enabled;
ну а тут почему забыл?

6082asil 11.08.2014 03:22

Ответ: Толчок
 
Ох..ну вот, я ведь сказал, что это непросто. с:

Ну..теперь просто ничего не происходит. Вернее, они не отталкиваются, а просто наклоняются в сторону игрока.

Mr_F_ 11.08.2014 03:29

Ответ: Толчок
 
больше силу попробуй ставить

6082asil 11.08.2014 03:38

Ответ: Толчок
 
Бинго! Как жахнуло-то. с:
Большое спасибо, взрыв сам работает.
Но вы бы не могли мне еще объяснить почему, когда я нажимаю второй раз на пробел (ну, скрипты обратно включаются), то все враги встают на те места, откуда улетели?
P.S.: A* Pathfinding Project...кажется, в нем причина..вы случаем не имели с ним дело?

pax 11.08.2014 06:47

Ответ: Толчок
 
Цитата:

Сообщение от Mr_F_ (Сообщение 285226)
ну не будь дураком.

Mr_F_ пожалуйста, тоже не надо таких выражений.

Оффтоп удален.

6082asil 11.08.2014 19:36

Ответ: Толчок
 
Ну так что, никто не проконсультирует?

pax 11.08.2014 23:31

Ответ: Толчок
 
Вероятно никто не использует эту систему поиска путей здесь. Скорее всего тебе надо для каждого объекта после взрыва пересчитать позицию на сетке навигации, а потом заново включать поиск пути к игроку.


Часовой пояс GMT +4, время: 21:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot