Unity 2D - оружие не переключается влево - PullRequest
0 голосов
/ 28 августа 2018

Простая 2D-сцена, в которой я двигаюсь влево / вправо по оси X и прыгаю / падаю по оси Y. Во всяком случае, я установил оружие по умолчанию направо. Я сделал его ребенком игрока, но когда я использую стрелку влево или клавишу A, оружие не переходит на другую сторону. Там нет ничего удивительного.

Я не совсем понимаю, как подойти к этому переключателю перехода.

 public GameObject gun; // define the gun object

затем внутри функции

 getComponent<GameObject>(); //Which I may not need to do ?

внутри моего скрипта движения:

if(GetKeyDown(KeyCode.A) || GetKeyDown(KeyCode.LeftArrow)){

    gun.transform.position = player.position.rotate; // ??? 
 }

По какой-то причине я не могу придумать, как просто изменить LOL ПОЧЕМУ МЕНЯ ???

1 Ответ

0 голосов
/ 28 августа 2018

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

bool isFacingRight = true;

void Update(){
    //other stuff

    if(GetKeyDown(KeyCode.A) || GetKeyDown(KeyCode.LeftArrow)){
        FaceLeft();
    }    
    if(GetKeyDown(KeyCode.D) || GetKeyDown(KeyCode.RightArrow)){
        FaceRight();
    }    
}

void FaceRight(){
    if(!isFacingRight){
        gun.transform.localScale = new Vector3(1, 1, 1);
        isFacingRight = true;
    }
}

void FaceLeft(){
    if(isFacingRight){
        gun.transform.localScale = new Vector3(-1, 1, 1);
        isFacingRight = false;
    }
}

********************* решено ************************* *****

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

public GameObject gun = Pshoot.gun; // Right facing gun
public GameObject gun1 = Pshoot.gun1; // Left facing gun

if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) {
       GetComponent<Renderer>().material = rgtFace;
        gun.SetActive(false);
        gun1.SetActive(true);
       // isFacingRight = false;
       // FaceLeft();
      // gun.transform.localScale = new Vector3(-1,1,-1);
    }

В этой проверке левого движения я установил для правого пистолета значение false и активировал левый пистолет для появления. (Не обращайте внимания на закомментированную часть, сегодня я выучил localeScale, поэтому сохраняю ее для дальнейшего использования. ВАМ может и не понадобиться, поэтому игнорируйте ее)

if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow))
    {

        GetComponent<Renderer>().material = lftFace;
        gun.SetActive(true);
        gun1.SetActive(false);
       // isFacingRight = true;
    }

Выше приведен код для установки пистолета, обращенного вправо. Теперь просто хедз-ап, вам не понадобится код материала. Это просто то, что я сделал, чтобы оживить мой спрайт. Вы заметите, что выше написано lftFace, но я случайно поместил правильное изображение лица в переменную leftface lol, это не влияет на игру, и я могу жить с этим. Не суди меня! : Р

В любом случае, спасибо всем, кто прокомментировал, чтобы помочь мне! Очень люблю кибер-программиста Fam!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...