0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17

Игрок проходит сквозь стену постоянно!

04.04.2020, 09:57. Показов 8501. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть 2D платформер, в платформере у меня есть игрок, который может ходить, но он ходит сквозь стену, постоянно. Я пробовал уже и RigidBody 2D на стену поставить с значением Static, изменял ходьбу на GetComponent<RigidBody2D>().MovePosition , и пробовал поставить вместо Update на FixedUpdate, а еще пробовал заставить ходить персонажа через GetComponent<RigidBody2D>().velocity, с transform.position все нормально и игрок ходит сквозь стены, а если добавляю новую ходьбу через физику то проигрывается анимация ходьбы но игрок не ходит вообще!

Unity Personal 2019.3.7f1

AndroidMoveLeft, AndroidMoveRight, AndroidJump, AndroidAttack, это что будет когда игрок нажмет на кнопки управления.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerMove : MonoBehaviour
{
    public int SpeedPlayer;
    public float JumpForce;
    private bool IsGround;
    private float gameTime;
    private float timeleft;
    public bool IsAttack;
    private bool IsTrigerAttack;
    public bool Hit;
    public Buttons1 button;
    public Buttons1 button1;
    public Buttons1 button2;
    public Buttons1 button3;
    Rigidbody2D rb;
    Animator anim;
    SpriteRenderer sprite; 
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        sprite = GetComponent<SpriteRenderer>();
    }
    /*
    private void Update()
    {
        if (Input.GetKey(KeyCode.D))
        {
            transform.position += transform.right *SpeedPlayer* Time.deltaTime;
            if (IsGround)
                anim.SetInteger("State", 1);
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.position -= transform.right *SpeedPlayer* Time.deltaTime;
            if (IsGround)
                anim.SetInteger("State", 1);
        }
        if (!Input.GetKey(KeyCode.D) && (!Input.GetKey(KeyCode.A)))
        {
            //if (IsGround)
                //anim.SetInteger("State", 0);
        }
        if (Input.GetKey(KeyCode.Space))
        {
            if (!Jump)
            {
                Jump = true;
                rb.AddForce(transform.up *JumpForce* Time.deltaTime,ForceMode2D.Force);
            }
        }
        if (!IsGround)
        {
            anim.SetInteger("State", 2);
        }
    }
    */
    private void Update()
    {
        /*
        Vector3 temp = transform.position;
        temp.x += 99999 * Time.deltaTime;
 
        var rb2 = GetComponent<Rigidbody2D>();
        rb2.MovePosition(temp);
        */
 
        if (!button.IsPressed)
        {if (!button1.IsPressed)
        {if (!button2.IsPressed)
        {if (!button3.IsPressed)
        {if (IsGround)
        {anim.SetInteger("State", 0);
                        }
                    }
                }
            }
        }
        IsGround = GetComponentInChildren<GroundDetect>().IsGround;
        gameTime += 1 * Time.deltaTime;
        if (IsAttack)
        {
            if (gameTime >= 0.5)
            {
                timeleft += 0.5f;
                gameTime = 0;
            }
            if (timeleft == 0.5)
            {
                timeleft = 0;
                IsAttack = false;
            }
            anim.SetInteger("State", 3);
        }
        if (IsTrigerAttack)
        {
            IsTrigerAttack = false;
            rb.AddForceAtPosition(new Vector2(0, 0.02f), new Vector2(0, 0.02f));
        }
    }
 
    public void AndroidMoveRight()
    {
        if (!IsAttack)
        {
            //transform.position += transform.right * SpeedPlayer * Time.deltaTime;
            //rb.MovePosition(transform.position + new Vector3(2, 0));
            //rb.velocity = transform.position + new Vector3(2, 0) * Time.deltaTime;
            //rb.velocity = new Vector3(2, 0);
            sprite.flipX = false;
            if (IsGround)
                anim.SetInteger("State", 1);
        }
    }
    public void AndroidMoveLeft()
    {
        if (!IsAttack)
        {
            //transform.position -= transform.right * SpeedPlayer * Time.deltaTime;
            //rb.MovePosition(transform.position + new Vector3(2,0));
            //rb.velocity = transform.position + new Vector3(2, 0) * Time.deltaTime;
            //rb.velocity = new Vector3(2, 0);
            sprite.flipX = true;
            if (IsGround)
                anim.SetInteger("State", 1);
        }
    }
    public void AndroidJump()
    {
        if (IsGround == true)
        {
            if (!IsAttack)
            {
                rb.AddForceAtPosition(new Vector2(0, JumpForce), new Vector2(0, JumpForce));
                anim.SetInteger("State", 2);
            }
        }
    }
    public void AndroidAttack ()
    {
        IsAttack = true;
        IsTrigerAttack = true;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2020, 09:57
Ответы с готовыми решениями:

Объект частично проходит сквозь стену
Объект входит в стену одной половиной ,а когда отпускаю клавишу его как будто выкидывает назад. Использую Rigidbody . Для передвижения...

Игрок проходит сквозь клоны объектов
Здравствуйте, я пишу игру и столкнулся с такой проблемой, при создании объектов через instatiate, они подвергаются физике с другими...

Игрок проходит сквозь объект, хотя box collider 2d уже стоит(включен Trigger)
Игрок проходит сквозь объект, хотя box collider 2d уже стоит(включен Trigger) Скрипт using System.Collections; using...

11
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.04.2020, 10:37
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class XXX : MonoBehaviour
{
    Rigidbody2D rb;
 
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
 
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
 
        rb.velocity = new Vector2(h * 100.0f, rb.velocity.y);
 
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity += Vector2.up * 200.0f;
        }
    }
}
Вот это всё что нужно для ходьбы и прыжка. Вот тут более наворочено сделано https://www.youtube.com/watch?v=dwcT-Dch0bA
0
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17
04.04.2020, 11:30  [ТС]
А если надо для Android устройств игра?? Еще этот способ опять не работает, персонаж просто не двигается.
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.04.2020, 11:38
Цитата Сообщение от ArkadiiLite Посмотреть сообщение
Еще этот способ опять не работает
Похоже, звезды не благоволят тебе...
Цитата Сообщение от ArkadiiLite Посмотреть сообщение
А если надо для Android устройств игра?
Переделать под кнопки, очевидно же.
0
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
04.04.2020, 11:44
Цитата Сообщение от ArkadiiLite Посмотреть сообщение
А если надо для Android устройств игра??
https://www.youtube.com/watch?v=6J6-7MV6nrA

А по поводу хождения сквозь стены, у тебя бокс коллайдеры есть на стенах и на герое?
0
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17
04.04.2020, 13:16  [ТС]
У меня и на стене коллайдер и на игроке. Character Controller не использую.
0
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
04.04.2020, 13:48
А по координатам Z герой и стена в одной плоскости? Из 2D переключился вид в 3d и посмотри с боку.
1
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.04.2020, 14:38
Скрины покажи, какие коллайдеры висят.
1
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17
04.04.2020, 15:47  [ТС]
Вот. По координатам Z у меня все на одной плоскости.
Миниатюры
Игрок проходит сквозь стену постоянно!   Игрок проходит сквозь стену постоянно!  
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.04.2020, 16:40
Советую тебе просто создать пустой спрайт кинуть на него мой скрипт + рб + коллайдер. Потому что мне кажется, что-то там тебе мешает или ты что-то не туда пишешь.
1
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17
04.04.2020, 19:02  [ТС]
Скрипт заработал, но у меня есть вопрос, как сделать тот же скрипт но не используя этот "Horizontal", у меня Android устройство, и если я сделаю например

C#
1
2
3
4
5
6
7
8
private void AndroidMoveRight()
{
    h = 1;
}
private void AndroidMoveLeft()
{
    h = -1;
}
У меня конечно же код не заработает, а как сделать чтобы работало?
0
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 17
05.04.2020, 08:02  [ТС]
Я понял в чем ошибка! В RigidBody2D было замороженное перемещение по координате X. Но все равно спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2020, 08:02
Помогаю со студенческими работами здесь

Сделать чтобы игрок ПРОХОДИЛ сквозь объект (2D)
Добрый день! У меня такая задача. Есть игрок у которого есть RigidBody2D и коллайдер и есть лестница у которой есть коллайдер и...

Сделать так, чтобы определенные объекты могли проходить сквозь коллайдер, в то время как игрок - не мог
Недавно начал изучать Unity и нужно сделать так чтобы определенные обьекты могли проходить сквозь коллайдер, в то время как игрок не мог....

Игрок проходит через объекты
Создал игрока по видео-уроку:https://www.youtube.com/watch?v=k0MKDPKp3ZI&amp;t=33s . В RigidBody2D - BodyType -Kinematic (2 Скриншот). На...

Свет проходит сквозь обьекты
К сожалению, не могу прикрепить картинку, но проблема заключается в том, что свет от point light (так и spot light) распростроняется...

Персонаж проходит сквозь стены
Здравствуйте! Прошу помочь, персонаж проходит сквозь стены как можно исправить? (Вид игры сверху, персонаж двигается во все стороны) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru