Воскресенье, 19 Августа 2018, 03:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Изменение спрайта
Изменение спрайта
AlfeДата: Пятница, 19 Февраля 2016, 18:52 | Сообщение # 1
старожил
Сейчас нет на сайте
Дорогие друзья. Возникла проблема!
Написан скрипт
Код

using UnityEngine;
using System.Collections;

public class Emocion : MonoBehaviour {
public GameObject player;
public GameObject Targetd;
public Sprite evil, normal;
public float distance = 5f;
void Start() {

}
void Update() {
RaycastHit2D hit = Physics2D.Raycast (player.transform.position, Vector3.right, distance);
if ( hit.collider.gameObject.tag == "Pink") {

GetComponent<SpriteRenderer> ().sprite = evil;
print (evil);

} else {
GetComponent<SpriteRenderer> ().sprite = normal;
print (normal);
}
}
}


Который должен был выполнять условие (Если Луч настиг N-тега, менять спрайт).
Так вот.
По какому принципу происходит смена спрайта?
Что именно (Какая переменная, компонент и т.д) сменяет спрайт?


Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin


Сообщение отредактировал Alfe - Пятница, 19 Февраля 2016, 18:53
zisXДата: Пятница, 19 Февраля 2016, 18:54 | Сообщение # 2
Neto Zis
Сейчас нет на сайте
Alfe, GetComponent<SpriteRenderer> ().sprite = normal;
Меняет спрайт на normal


AlfeДата: Пятница, 19 Февраля 2016, 18:57 | Сообщение # 3
старожил
Сейчас нет на сайте
zisX, дэ на normal он меняет. Ибо в консоль выводит normal (в ту пору когда скобки делал у метода print())

Добавлено (19 февраля 2016, 18:57)
---------------------------------------------
На Evil меняет только тогда когда я делал проверку через зажатие кнопки. L зажал - менялся спрайт


Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin
VerdCSДата: Суббота, 20 Февраля 2016, 11:56 | Сообщение # 4
частый гость
Сейчас нет на сайте
Если на player-е есть коллайдер, то луч будет постоянно попадать в этот коллайдер, потому что ты кастишь его из центра объекта player.transform.position, и не изолируешь его по layerMask.
Проверь в какой объект попадает луч.
AlfeДата: Суббота, 20 Февраля 2016, 12:45 | Сообщение # 5
старожил
Сейчас нет на сайте
VerdCS, да, скорее всего луч попадает сам в себя, т.к порой выводит как раз же normal. Значит выход изоляция по маске слоя. Ну, а в остальном все верно?

Добавлено (20 февраля 2016, 12:45)
---------------------------------------------
VerdCS, т.е я так понял мне нужно поместить объект из которого RC исходит в какой то свой слой и задать в строке где пуляю Рэйкаст
Код
1 << LayerMask.NameToLayer('Player')

Верно?


Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin


Сообщение отредактировал Alfe - Суббота, 20 Февраля 2016, 12:46
VerdCSДата: Суббота, 20 Февраля 2016, 12:47 | Сообщение # 6
частый гость
Сейчас нет на сайте
Alfe, Ну, я бы так же сделал. Должно работать. Пожалуй только если объектам с тегом "Pink" задашь отдельный слой, то проверку по тегу можно будет опустить.

Нет, в строке указываются те слои с которыми луч взаимодействует.

создай Public LayerMask emotionMask.

RaycastHit2D hit = Physics2D.Raycast (player.transform.position, Vector3.right, distance, emotionMask);

в инспекторе задай нужные слои. и среди них не должно быть слоя с player-ом


Сообщение отредактировал VerdCS - Суббота, 20 Февраля 2016, 12:54
AlfeДата: Суббота, 20 Февраля 2016, 15:36 | Сообщение # 7
старожил
Сейчас нет на сайте
VerdCS, спасибо, заведомо поставлю + в репу. Проверю позже ))

Добавлено (20 февраля 2016, 15:36)
---------------------------------------------
VerdCS, а нельзя просто так взять и Игроку назначить Слой IgnoreRaycast? Значения я получать не перестану, однако Луч перестанет биться об коллайдер Player'a


Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin


Сообщение отредактировал Alfe - Суббота, 20 Февраля 2016, 15:36
berilДата: Воскресенье, 21 Февраля 2016, 18:08 | Сообщение # 8
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата Alfe ()
VerdCS, т.е я так понял мне нужно поместить объект из которого RC исходит в какой то свой слой и задать в строке где пуляю Рэйкаст
Код

1 << LayerMask.NameToLayer('Player')

Верно?


Код
private int _clickLayer;//слой 'Player'

  public void Awake () {
        _clickLayer = LayerMask.GetMask('Player');
    }




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
AlfeДата: Воскресенье, 21 Февраля 2016, 20:25 | Сообщение # 9
старожил
Сейчас нет на сайте
beril,
Код

using UnityEngine;
using System.Collections;

public class Emocion : MonoBehaviour {
    public GameObject player;
    public GameObject Targetd;
    public Sprite evil, normal;
    public float distance = 5f;
    private int _ClickLayer;

    public void Awake() {
  _ClickLayer = LayerMask.GetMask("Player");
    }
    void Start() {

    }
    void Update () {
  RaycastHit2D hit = Physics2D.Raycast(player.transform.position, Vector3.right, distance);
  Debug.DrawRay (player.transform.position, Vector3.right, Color.red);//Луч рисуется
  if (Targetd.tag == "Pink") {
   GetComponent<SpriteRenderer> ().sprite = evil;
  } else {
   GetComponent<SpriteRenderer> ().sprite = normal;
  }
  }
    }

Тупо перенимает спрайт поля evil сразу же. Ровно также как и при методе VerdCS.

Добавлено (21 февраля 2016, 20:25)
---------------------------------------------
beril,



Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin


Сообщение отредактировал Alfe - Воскресенье, 21 Февраля 2016, 20:23
berilДата: Воскресенье, 21 Февраля 2016, 23:28 | Сообщение # 10
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
LayerMask.GetMask используй вместо сдвигов 1 << LayerMask.NameToLayer

RaycastHit2D hit = Physics2D.Raycast(player.transform.position, Vector3.right, distance, _ClickLayer); у тебя не указан слой
LayerMask.GetMask("Player") - маска слоя, где "Player" название слоя(это название слоя из моего проекта, у тебя такого слоя нету, если сам его не создал) , все обьекты которые не находятся на этом слое будут игнорироваться.
В правом верхнем углу кнопка "Layers" там создаешь новый слой.
Логично все препятствия с которыми будешь взаимодействовать поместить на один слой (к примеру "Ground")
Ну или использовать Physics2D.RaycastAll и потом проверять есть ли в полученном массиве обьект с тегом "Pink"




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
AlfeДата: Понедельник, 22 Февраля 2016, 13:24 | Сообщение # 11
старожил
Сейчас нет на сайте
beril, мы решили перейти на другую среду разработки. Construct2. Игра то изначально легкая. Это меня пришибло делать ее на Unity biggrin

Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

Моя первая игpa - Crazy Penguin
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Изменение спрайта
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2018 Рейтинг