Mail.ru
Почта
Мой Мир
Одноклассники
ВКонтакте
Игры
Знакомства
Новости
Календарь
Облако
Заметки
Все проекты
Все проекты
выход
Регистрация
Вход
Категории
Все вопросы проекта
Компьютеры, Интернет
Темы для взрослых
Авто, Мото
Красота и Здоровье
Товары и Услуги
Бизнес, Финансы
Наука, Техника, Языки
Философия, Непознанное
Города и Страны
Образование
Фотография, Видеосъемка
Гороскопы, Магия, Гадания
Общество, Политика, СМИ
Юридическая консультация
Досуг, Развлечения
Путешествия, Туризм
Юмор
Еда, Кулинария
Работа, Карьера
О проектах Mail
Животные, Растения
Семья, Дом, Дети
Другое
Знакомства, Любовь, Отношения
Спорт
Золотой фонд
Искусство и Культура
Стиль, Мода, Звезды
Полный список
Спросить
Лидеры
Поиск по вопросам
Ответы Mail
Программирование
Android
C/C++
C#
iOS
Java
JavaScript
jQuery
SQL
Perl
PHP
Python
Веб-дизайн
Верстка, CSS, HTML, SVG
Системное администрирование
Другие языки и технологии
Вопросы - лидеры.
Проблема с коллайдером и триггером в Unity
1 ставка
Unity editor помогите с программой!
1 ставка
Лидеры категории
Лена-пена
Искусственный Интеллект
М.И.
Искусственный Интеллект
Y.Nine
Искусственный Интеллект
•••
Персонаж бесконечно поворачивается поворачивается Unity 2D
Родион Антонов
Ученик
(170), на голосовании
10 месяцев назад
Написал код на движение игрока, поворот подсмотрел в видео. Когда персонаж стоит на месте поворачивается в разные стороны на бешенной скорости.
код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movement_player : MonoBehaviour
{
public float Speed;
public float DirectionX;
public float JumpForce;
private bool FacingRight = true;
private Rigidbody2D rb;
SpriteRenderer spr;
public Animator anim;
public bool isGrounded = false;
public float checkGroundoffsetY;
public float checkGroundRadious;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
spr = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update()
{
Mathf.Abs(DirectionX);
Flip();
DirectionX = Input.GetAxis("Horizontal");
transform.position += new Vector3(DirectionX, 0, 0) * Speed * Time.deltaTime;
if (Input.GetKeyDown(
KeyCode.Space
) && Mathf.Abs(rb.velocity.y) < 0.05)
rb.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
anim.SetFloat("HorizontalMove", Mathf.Abs(DirectionX));
if (DirectionX < 0 && FacingRight)
{
Flip();
}
else if (DirectionX > 0 && !FacingRight)
{
Flip();
}
}
private void FixedUpdate()
{
CheckGroud();
}
private void Flip()
{
FacingRight = !FacingRight;
transform.Rotate(0f, 180f, 0f);
}
private void CheckGroud()
{
Collider2D[] collider = Physics2D.OverlapCircleAll(new Vector2(transform.position.x, transform.position.y + checkGroundoffsetY), checkGroundRadious);
if (collider.Length > 1)
{
isGrounded = true;
}
else
{
isGrounded = false;
}
}
}
Голосование за лучший ответ
ivan866_z
Просветленный
(20795)
11 месяцев назад
в строке 34 идет вызов функции Flip(), а по задумке он должен идти только когда скорость по оси X меняет знак
Родион Антонов
Ученик (170)
11 месяцев назад
от души брат
Похожие вопросы
код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movement_player : MonoBehaviour
{
public float Speed;
public float DirectionX;
public float JumpForce;
private bool FacingRight = true;
private Rigidbody2D rb;
SpriteRenderer spr;
public Animator anim;
public bool isGrounded = false;
public float checkGroundoffsetY;
public float checkGroundRadious;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
spr = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update()
{
Mathf.Abs(DirectionX);
Flip();
DirectionX = Input.GetAxis("Horizontal");
transform.position += new Vector3(DirectionX, 0, 0) * Speed * Time.deltaTime;
if (Input.GetKeyDown( KeyCode.Space ) && Mathf.Abs(rb.velocity.y) < 0.05)
rb.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
anim.SetFloat("HorizontalMove", Mathf.Abs(DirectionX));
if (DirectionX < 0 && FacingRight)
{
Flip();
}
else if (DirectionX > 0 && !FacingRight)
{
Flip();
}
}
private void FixedUpdate()
{
CheckGroud();
}
private void Flip()
{
FacingRight = !FacingRight;
transform.Rotate(0f, 180f, 0f);
}
private void CheckGroud()
{
Collider2D[] collider = Physics2D.OverlapCircleAll(new Vector2(transform.position.x, transform.position.y + checkGroundoffsetY), checkGroundRadious);
if (collider.Length > 1)
{
isGrounded = true;
}
else
{
isGrounded = false;
}
}
}