1 Вопрос: Как я могу сделать свой префаб полностью обратным (180 градусов) от его точки появления? Unity 2D

вопрос создан в Thu, May 2, 2019 12:00 AM

Итак, я сделал небольшую боковую прокрутку, которая использует сборный домик для порождения пуль. Моя проблема в том, что он стреляет только в одну сторону ... справа.
Мне нужно, чтобы стрелять влево тоже. Я уже сделал переменную, чтобы увидеть, смотрит ли игрок вправо или влево.

Я пытался установить скорость до -20, и я пытался повернуть ее на 180 градусов по оси Z. Я проверил, подхватил ли сценарий пули изменение из сценария движения игрока, и он это делает.

Скрипт движения игрока

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public GameObject bullet;

    private Rigidbody2D myRigidbody;
    private float speed = 15;
    private bool facingRight;
    private bool ground = false;
    private float jump = 23;
    // Start is called before the first frame update
    void Start()
    {
        facingRight = true;
        myRigidbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");

        Movement(horizontal);
        Flip(horizontal);
        if (Input.GetKey("w"))
        {
            if (ground)
            {
                GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jump);
            }
        }
        if(facingRight == false)
        {
            bullet.GetComponent<bullet>().left = true;
        }
        if (facingRight == true)
        {
            bullet.GetComponent<bullet>().left = false;
        }
    }

    void OnTriggerEnter2D()
    {
        ground = true;
    }

    void OnTriggerExit2D()
    {
        ground = false;
    }

    private void Movement(float horizontal)
    {

        myRigidbody.velocity = new Vector2(horizontal * speed,myRigidbody.velocity.y);
    }

    private void Flip(float horizontal)
    {
        if (horizontal > 0 && !facingRight || horizontal < 0 && facingRight)
        {
            facingRight = !facingRight;

            Vector3 theScale = transform.localScale;

            theScale.x *= -1;

            transform.localScale = theScale;
        }
    }


}

Оружейный скрипт

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class weapon : MonoBehaviour
{
    // Start is called before the first frame update
    public bool right;
    public Transform firepointR;

    public GameObject bulletPrefab;

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("space"))
        {
            Debug.Log("Oh well");
            Shoot();
        }

    }

    void Shoot()
    {
            Instantiate(bulletPrefab, firepointR.position, firepointR.rotation);
    }
}

скрипт пули

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bullet : MonoBehaviour
{
    public bool left;
    public float speed = 20;

    public Rigidbody2D rb;
    // Start is called before the first frame update
    void Start()
    {
        rb.velocity = transform.right * speed;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Debug.Log(speed);

        if (left == false)
        {
            transform.Rotate(0, 0, 180);
        }
    }
}

Как я уже говорил ранее, мне нужно, чтобы моя пуля (сборная) шла в противоположном направлении, но что бы я ни делал сейчас, оно всегда будет идти правильно.

    
1
  1. Вы пытались изменить скорость? rb.velocity = -(transform.right * speed);
    2019-05-02 15: 06: 46Z
  2. @ Mark Это решило проблему! спасибо!
    2019-05-02 15: 28: 22Z
  3. @ Mark Не могли бы вы представить его в качестве ответа, чтобы этот вопрос не отображался в списке без ответов? Спасибо!
    2019-05-02 15: 45: 06Z
1 ответ                              1                         

Расширение моего комментария:

Вы пытались изменить скорость?

rb.velocity = -(transform.right * speed);

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

Я думаю, это тоже будет работать ( и, вероятно, это правильный способ сделать это ):

rb.velocity = transform.left * speed;
    
0
2019-05-03 14: 41: 23Z
источник размещен Вот