Страница 1 из 1

Нанесение урона raycast'ом через RPC [Решено]

СообщениеДобавлено: 07 янв 2015, 19:56
ZakkArn
Доброго времени суток!) В общем, суть проблемы: есть игрок, у него разные части тела представлены триггерами, когда один игрок стреляет в другого (по триггеру, через рейкаст) этот тригер должен терять здоровье и в последствии отключаться. Если этим методом атаковать не игровые объекты (например тупо куб) то все работает прекрасно, но если этот триггер является частью игрока (например на голове, и стрельба идет по голове), то этого триггера вообще как будто нету, т.е. луч как будто идет минуя его, из-за чего это может быть?
Скрипт стрельбы:

Синтаксис:
Используется csharp
public void Shooting()
        {


                if (photonView.isMine) {
                        int damage=10;
                        RaycastHit hit;
                        Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition);
                        if (Physics.Raycast(ray, out hit,400))
                        {
                                if (hit.transform.tag=="head")
                                {
                                       
                                        hit.transform.GetComponent<PhotonView>().RPC("AddDamage", PhotonTargets.All, damage);
                       
                                }
                               
                               
                        }
                       
                }
        }



скрипт на триггере:

Синтаксис:
Используется csharp
        [RPC]
        public void AddDamage(int damage)
        {
                if (photonView.isMine) {
               
                                                headHp -= damage;
               
                                                if (headHp <= 0) {
                                                                gameObject.SetActive (false);
                                                }
               
               
                                }
        }

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 08 янв 2015, 11:29
ZakkArn
Ни кто не сталкивался с такой проблемой?

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 08 янв 2015, 20:01
MAXYA159
Вот ты говоришь: "когда попадаешь, например, в голову..."
А разве на голове есть компонент PhotonView?
Тогда уж надо получать корень трансформа (игрока, которому эта голова принадлежит) - transform.root

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 08 янв 2015, 20:10
ZakkArn
MAXYA159 писал(а):Вот ты говоришь: "когда попадаешь, например, в голову..."
А разве на голове есть компонент PhotonView?
Тогда уж надо получать корень трансформа (игрока, которому эта голова принадлежит) - transform.root

На голове есть PhotonView, говорю же, если этот триггер не является дочерним к игроку, то все работает как и планировалось. А тут дело даже не в RPC, ибо не работает именно рейкаст, он почему-то не видит триггер.
Т.е. если сделать так:

Синтаксис:
Используется csharp
        if (Physics.Raycast (ray, out hit, 400)) {
if (hit.transform.tag == "enemy") {
Debug.Log("HIT");
}
}
 



То нефига не будет происходить.

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 08 янв 2015, 20:12
MAXYA159
ZakkArn писал(а):А тут дело даже не в RPC, ибо не работает именно рейкаст, он почему-то не видит триггер.


Может, проблема в тэге? Он на этом объекте стоит?

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 08 янв 2015, 20:17
ZakkArn
MAXYA159 писал(а):
ZakkArn писал(а):А тут дело даже не в RPC, ибо не работает именно рейкаст, он почему-то не видит триггер.


Может, проблема в тэге? Он на этом объекте стоит?


Вот смотрите, есть объект, который условно является головой (но по сути это куб-триггер). Если этот объект я поставил просто так на сцену, то он прекрасно "убивается", но если я после этого этот же триггер сделаю дочерним к игроку, то уже даже рейкаст через него не проходит. Но это точно такой же триггер, который секунду назад, будучи не к чему не привязанным прекрасно убивался.

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 09 янв 2015, 10:42
ZakkArn
актуально

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 09 янв 2015, 11:08
Syberex
Посмотри во что попадает твой рейкаст:
Синтаксис:
Используется csharp
if (Physics.Raycast (ray, out hit, 400)) {
        if (hit.transform.tag == "enemy") {
                Debug.Log("enemy: "+hit.gameObject.name);
        }
        else
                Debug.Log("other collider: "+hit.gameObject.name);
}
 

наверняка упирается в другой коллайдер, без тега...

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 09 янв 2015, 11:59
ZakkArn
Syberex писал(а):Посмотри во что попадает твой рейкаст:
Синтаксис:
Используется csharp
if (Physics.Raycast (ray, out hit, 400)) {
        if (hit.transform.tag == "enemy") {
                Debug.Log("enemy: "+hit.gameObject.name);
        }
        else
                Debug.Log("other collider: "+hit.gameObject.name);
}
 

наверняка упирается в другой коллайдер, без тега...


Хм.. когда луч попадает именно по триггеру (точно по триггеру,ибо я увеличил его очень сильно), то определяется, почему-то, что попал не по триггеру, а по родительскому объекту..

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 09 янв 2015, 12:47
ZakkArn
т.е. коллайдер триггера почему-то определяется как продолжение коллайдера родителя. В каком направлении капать, чтобы решить эту проблему?

Re: Нанесение урона raycast'ом через RPC

СообщениеДобавлено: 09 янв 2015, 18:15
ZakkArn
Проблема решилась заменой
Синтаксис:
Используется csharp
 hit.transform.
на
Синтаксис:
Используется csharp
hit.collider.transform.gameObject.
. Хоть и не понял, почему первый вариант не рабочий, ну и ладно, главное работает).

Re: Нанесение урона raycast'ом через RPC [Решено]

СообщениеДобавлено: 09 янв 2015, 18:18
ZakkArn
+ еще убрал коллайдер с родительского объекта

Re: Нанесение урона raycast'ом через RPC [Решено]

СообщениеДобавлено: 10 янв 2015, 11:31
Syberex
ZakkArn писал(а):+ еще убрал коллайдер с родительского объекта

Проблема решилась именно этим, а не тем что поменял коде :)