Помогите пожалуйста с поведением пули. Готов заплатить.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение neyron 23 дек 2016, 14:52

В общем, игра по типу stupid zombies.
Пуля должна отскакивать на тот же угол, с которого она прилетела через нормаль.

У меня пуля отскакивает, но видимо из-за того, что на ней circle collider угол немного отличается от того, что рисуется рейкастом. Нужно, чтобы было 1 в 1.

Создание пули при выстреле
Синтаксис:
Используется csharp
 
Rigidbody2D clone = Instantiate(Shells[SelectedShell].bullet, gunPoint.position, gunPoint.rotation) as Rigidbody2D;
                clone.velocity = gunPoint.right * speed;
                clone.transform.right = gunPoint.right;
         
 

Поведение при коллизии
Синтаксис:
Используется csharp

        Vector3 heading = transform.position - startPosition;

        Vector3 dir = Vector3.Reflect(heading, collision.contacts[0].normal);

        Rigidbody2D shot = GetComponent<Rigidbody2D>();

        // GetComponent<AudioSource>().PlayOneShot(MyAudio);
        startPosition.x = transform.position.x;
        startPosition.y = transform.position.y;


        // shot.velocity = dir;
        //shot.velocity = dir;
        transform.right = dir;

        shot.velocity = transform.right * player.speed;
 


Можно ли как то реализовать движение пули вдоль рейкаста, также рефлектить?
Готов заплатить за консультацию.
neyron
UNец
 
Сообщения: 20
Зарегистрирован: 03 ноя 2016, 14:07

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение waruiyume 23 дек 2016, 14:57

Уберите с пули физику и двигайте её в FixedUpdate, предварительно пуская луч в место новой позиции.
Отразить можно так: Vector3.Reflect.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение neyron 23 дек 2016, 15:03

waruiyume писал(а):Уберите с пули физику и двигайте её в FixedUpdate, предварительно пуская луч в место новой позиции.
Отразить можно так: Vector3.Reflect.

Вот я и не знаю как это сделать, я пробовал посылать рейкаст, потом использовать Lerp. Выходит не то. Не могли бы вы помочь, я заплачУ, а то уже очень долгое время бьюсь над этим?
neyron
UNец
 
Сообщения: 20
Зарегистрирован: 03 ноя 2016, 14:07

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение Cr0c 23 дек 2016, 15:33

waruiyume писал(а):Уберите с пули физику и двигайте её в FixedUpdate, предварительно пуская луч в место новой позиции.
Отразить можно так: Vector3.Reflect.

Я пробовал такое реализовать - нормаль считалась как хотела. Нипабидил (((
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение neyron 23 дек 2016, 17:21

Помогите кто нибудь, пожалуйста. Обсудим цену.
neyron
UNец
 
Сообщения: 20
Зарегистрирован: 03 ноя 2016, 14:07

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение VitalyS 23 дек 2016, 18:25

Нужно просто получить угол пули и объекта с которым она сталкивается, потом в месте касания пули с объектом, должна изменить направление движения с учетом полученного угла.
Можно использовать для этого Quaternion
VitalyS
UNIт
 
Сообщения: 87
Зарегистрирован: 10 янв 2012, 23:59

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение neyron 23 дек 2016, 18:56

VitalyS писал(а):Нужно просто получить угол пули и объекта с которым она сталкивается, потом в месте касания пули с объектом, должна изменить направление движения с учетом полученного угла.
Можно использовать для этого Quaternion

Для этого есть Reflection. Но почему то отличается траектория пули от ray кастов.
neyron
UNец
 
Сообщения: 20
Зарегистрирован: 03 ноя 2016, 14:07

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение Anonymyx 23 дек 2016, 20:25

Из архива... Cуть понятна думаю.
Синтаксис:
Используется csharp
public class Shell : MonoBehaviour
{
    public float shellLifeTime = 2.0f;
    public float shellSpeed = 1000.0f;
    public Transform impactEffect;
    public Transform shellHost;
    public float hullDamage;
    public float shieldDamage;
    RaycastHit hit;
    Vector3 velocity;
    Vector3 newPos;
    Vector3 oldPos;    


    void Start ()
    {
        newPos = transform.position;
        oldPos = newPos;        
        velocity = shellSpeed * transform.forward;
        Destroy(gameObject, shellLifeTimer);
    }

    void Update ()
    {        
        newPos += transform.forward * velocity.magnitude * Time.deltaTime;
        Vector3 direction = newPos - oldPos;
        float distance = direction.magnitude;
       
        if (distance > 0)
        {
            if (Physics.Raycast(oldPos, direction, out hit, distance))
            {    
                Vector3 VRefl = Vector3.Reflect(transform.forward, hit.normal);
                transform.forward = VRefl;
            }
        }
        oldPos = transform.position;
        transform.position = newPos;      
    }
}

Если физикой непринципиально, попробуйте так.
При создании пули передавайте скорость в переменную shellSpeed, а не меняйте velocity.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение Cr0c 23 дек 2016, 20:35

А у меня такой рейкаст ИЗРЕДКА давал правильную нормаль. Правда я двигал физикой, а поворачивал velocity.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Помогите пожалуйста с поведением пули. Готов заплатить.

Сообщение Anonymyx 23 дек 2016, 20:39

Ну не знаю, у меня все вроде нормально работает, 3 рикошета подряд на очень высоких скоростях корректно отрабатываются. От сферы к кубу и обратно.
Метод проверен временен.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25