Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Unity, Unity3D Настройки Canvas делаю моб приложение и не могу настроить кавас ...По умолчанию ставить горизонтально , а мне нужно вертикально .... А в настройках нельзя менять ...Как изменить расширение ? https://www.cyberforum.ru/ unity/ thread2625534.html Баг с Resources.Load() Unity, Unity3D
Нужно загрузить GameObject из префаба. Префаб есть, папка Resources с префабом есть. По идее всё должно работать, но Resources.Load() в этом примере не возвращает результат, т.е. похоже на ожидание...
Unity, Unity3D Луч (lineRenderer) Добрые день/вечер! Нужна Ваша помощь, ломаю голову вот уже неделю. Мне нужно провести луч от точки "SetPosA" до "SetPosB". Проблема следующая, в канвасе стоит mode renderer - Overlay и луч рисуется... https://www.cyberforum.ru/ unity/ thread2625440.html Unity, Unity3D Проблема с телепортацией объекта https://www.cyberforum.ru/ unity/ thread2625311.html
obj.transform.position = new Vector2(0.41f, 0.035f); По логике объект должен переносится на заданные кординаты но почему то он переносится в стартовую позицию (Стартовая позиция - это когда ты только...
Unity, Unity3D Top Down Joystick как настроить?
Добрый день! Я начинающий в сфере геймдева, да и на языке c# начал писать не давно. Захотелось создать свой тестовый проект под мобилки с джойстикам. Скачал префаб из asset store и попытался написать...
Unity, Unity3D Как сделать хоррор на unity ? Платформа андроид. С чего начать и тд? Нужна помощь. Если кто знает, пожалуйста поделитесь опытом. Заранее спасибо ) https://www.cyberforum.ru/ unity/ thread2625124.html
Unity, Unity3D Вращение спрайта вокруг оси Z используя Input.GetTouch https://www.cyberforum.ru/ unity/ thread2625123.html
Доброго времени суток, Форумчане! Сейчас работаю над задачей - поворот спрайта вокруг своей оси Z с помощью Input.GetTouch. Но столкнулся с проблемой, когда пытаюсь вращать спрайт происходят будь...
Unity, Unity3D Рандомный спавн деревьев в Unity2D TDS
Привет. Пытаюсь сделать рандомный спавн деревьев на карте, но определенное количество, но сделать этого у меня не получается. Я сам не пойму почему, потому что с циклом for, он либо спавнит мне...
Unity, Unity3D Игра Unity2D. ИИ ставлю этот скрипт для бота, но юнити выдаёт ошибку using System.Collections; using System.Collections.Generic; using UnityEngine; public class Bot : MonoBehaviour { // точки, между... https://www.cyberforum.ru/ unity/ thread2625022.html Unity, Unity3D Игра Unity2D. Стрельба https://www.cyberforum.ru/ unity/ thread2625011.html
Помогите, когда герой стреляет пуля просто отскакивает от противника, не исчезая и не убивая противника. вот код стрельбы: using UnityEngine; using System.Collections; public class FireScript2D...
Ошибка с переменной Transform: Argument 1: cannot convert from 'UnityEngine.Transform' to 'float' Unity, Unity3D
Кароч, я пытаюсь сделать спавн бревен, у динамического обьекта в рандомной позиции и с определенными границами. Я написал такой код, но он не может конвентировать transform в float. Вот код: ...
Unity, Unity3D Как задать торможение Scroll View в Unity? https://www.cyberforum.ru/ unity/ thread2624699.html
Добрый день, как организовать торможение для каждого объекта Scroll View + как к нему обращаться после его выделения?
0 / 0 / 0
Регистрация: 22.04.2020
Сообщений: 5
0

Игра Unity2D. ИИ - Unity, Unity3D - Ответ 14464258

23.04.2020, 16:12. Показов 216. Ответов 0
Метки (Все метки)

никакой ошибки не выдаёт, но не работает, бот стоит на месте и не двигается и не преследует героя.
вот скрипт на боте:
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class EnemyAI : MonoBehaviour
{
    // точки, между которыми бот будет двигаться, в ожидании игрока
    public Transform waypointA;
    public Transform waypointB;
 
    public float speed = 1.5f; // скорость движения
    public float acceleration = 10; // ускорение
    public float searchDistance = 4; // с какого расстояния бот сможет "увидеть" игрока
    public float checkDistance = 1; // расстояние с которого бот проверку перед собой, на наличие обрыва
    public float resetDistance = 50; // макс дистанция, когда бот отслеживает позицию игрока
    public float height = 3; // маск высота, для падения (например, если надо спуститься по ступеням за игроком)
 
    // действие, когда позиция игрока не отслеживается (например, он ушел далеко вперед)
    // возврат в стартовую позицию и отключение, отключение в текущей позиции, уничтожение объекта
    public enum Mode {WaypointsAndDisabled = 0, Disabled = 1, Destroy = 2};
    public Mode action = Mode.WaypointsAndDisabled;
 
    public bool facingRight = true; // бот смотрит вправо?
 
    private int layerMask;
    private bool isTarget, isWait;
    private Rigidbody2D body;
    private Vector3 direction;
    private Vector3 startPosition;
    private float curDist;
 
    void Awake()
    {
        layerMask = 1 << gameObject.layer | 1 << 2;
        layerMask = ~layerMask;
        body = GetComponent<Rigidbody2D>();
        body.freezeRotation = true;
        startPosition = transform.position;
    }
 
    void OnCollisionEnter2D(Collision2D coll) 
    {
        if(coll.transform.tag == "Player") 
        {
            // физический контакт с целью
        }
 
    }
 
    Vector3 SetDirection(float xPos)
    {
        return new Vector3(xPos, transform.position.y, transform.position.z) - transform.position;
    }
 
    void Walk() // зацикленное движение от А к В и обратно
    {
        float a = Vector3.Distance(transform.position, waypointA.position);
        float b = Vector3.Distance(transform.position, waypointB.position);
 
        if(a < 1)
        {
            direction = SetDirection(waypointB.position.x);
        }
        else if(b < 1)
        {
            direction = SetDirection(waypointA.position.x);
        }
        else if(body.velocity.x == 0)
        {
            direction = SetDirection(waypointA.position.x);
        }
        else if(curDist > resetDistance)
        {
            Choose();
        }
 
        if(SearchPlayer()) isTarget = true;
    }
 
    void Follow() // преследование игрока
    {
        if(!CheckPath() && curDist > checkDistance || body.velocity.magnitude == 0 && curDist > searchDistance)
        {
            direction = Vector3.zero;
            body.velocity = Vector3.zero;
            isWait = true;
        } 
        else if(curDist > resetDistance)
        {
            Choose();
        }
        else
        {
            direction = SetDirection(GameManager.player.position.x);
        }
    }
 
    void Wait() // режим ожидания
    {
        if(curDist < searchDistance)
        {
            isWait = false;
        }
        else if(curDist > resetDistance)
        {
            Choose();
        }
    }
 
    void Choose() // финальное действие
    {
        switch(action)
        {
        case Mode.Disabled:
            isWait = false;
            isTarget = false;
            gameObject.SetActive(false);
            break;
 
        case Mode.WaypointsAndDisabled:
            transform.position = startPosition;
            isWait = false;
            isTarget = false;
            gameObject.SetActive(false);
            break;
 
        case Mode.Destroy:
            Destroy(gameObject);
            break;
        }
    }
 
    void LateUpdate()
    {
        if(!waypointA || !waypointB) return;
 
        curDist = Vector3.Distance(GameManager.player.position, transform.position);
 
        if(!isTarget)
        {
            Walk();
        }
        else if(!isWait && isTarget)
        {
            Follow();
        }
        else if(isWait && isTarget)
        {
            Wait();
        }
    
        if(body.velocity.x > 0 && !facingRight) Flip();
        else if(body.velocity.x < 0 && facingRight) Flip();
    }
 
    bool CheckPath() // проверка поверхности на пути следования
    {
        Vector3 pos = new Vector3(transform.position.x + checkDistance * Mathf.Sign(body.velocity.x), transform.position.y, transform.position.z);
 
        Debug.DrawRay(pos, Vector3.down * height, Color.red);
 
        RaycastHit2D hit = Physics2D.Raycast(pos, Vector3.down, Mathf.Infinity, layerMask);
 
        if(hit.collider && hit.distance < height)
        {
            return true;
        }
 
        return false;
    }
 
    bool SearchPlayer() // поиск игрока на пути следования
    {
        Vector3 dir = Vector3.right * searchDistance * Mathf.Sign(body.velocity.x);
 
        Debug.DrawRay(transform.position, dir, Color.blue);
 
        RaycastHit2D hit = Physics2D.Raycast(transform.position, dir, searchDistance, layerMask);
 
        if(hit.collider && hit.transform.tag == "Player")
        {
            return true;
        }
 
        return false;
    }
 
    void FixedUpdate()
    {
        body.AddForce(direction.normalized * body.mass * speed * acceleration);
 
        if(Mathf.Abs(body.velocity.x) > speed)
        {
            body.velocity = new Vector2(Mathf.Sign(body.velocity.x) * speed, body.velocity.y);
        }
    }
 
    void Flip() // отражение по горизонтали
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
 
    public void GenerateWaypoints(GameObject point) // вспомогательная функция для создания вейпоинтов
    {
        if(!waypointA && !waypointB)
        {
            GameObject obj = new GameObject(gameObject.name + "_Waypoints");
            obj.transform.position = transform.position;
 
            GameObject clone = Instantiate(point) as GameObject;
            clone.transform.parent = obj.transform;
            clone.transform.localPosition = new Vector2(3, 0);
            clone.name = "Point_A";
            waypointA = clone.transform;
 
            clone = Instantiate(point) as GameObject;
            clone.transform.parent = obj.transform;
            clone.transform.localPosition = new Vector2(-3, 0);
            clone.name = "Point_B";
            waypointB = clone.transform;
        }
    }
}
вот скрип ткоторый создаёт вейпоинты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#if UNITY_EDITOR
using UnityEngine;
using System.Collections;
using UnityEditor;
 
[CustomEditor(typeof(EnemyAI))]
 
public class EnemyAIEditor : Editor {
 
    public GameObject waypoint; // префаб вейпоинта
 
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        EnemyAI t = (EnemyAI)target;
        if(GUILayout.Button("Generate Waypoints"))
        {
            t.GenerateWaypoints(waypoint);
        }
    }
}
#endif
вот скрипт который даёт ссылку на игрока
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
using System.Collections;
 
public class GameManager : MonoBehaviour {
 
    private static Transform _player;
 
    void Awake()
    {
        _player = GameObject.FindGameObjectWithTag("Player").transform;
    }
 
    public static Transform player
    {
        get{ return _player; }
    }
}


Вернуться к обсуждению:
Игра Unity2D. ИИ Unity, Unity3D
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2020, 16:12
Готовые ответы и решения:

Игра Unity2D. ИИ
ставлю этот скрипт для бота, но юнити выдаёт ошибку using System.Collections; using...

Игра Unity2D. Стрельба
Помогите, когда герой стреляет пуля просто отскакивает от противника, не исчезая и не убивая...

NavMesh в Unity2D (игра с видом сверху
У меня проблема! Я хочу сделать чтобы враги обходили стены. Но я не знаю как это реализовать. На...

Вспышка после выстрела в TDS игре на Unity2D (игра с видом сверху)
Я хочу сделать вспышку после выстрела в игре. Но не знаю как это реализовать и не знаю где брать...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2020, 16:12

Наведения врага на игрока оружием в TDS ( игра с видом сверху) в Unity2D
Я хочу сделать чтобы враг наводился на игрока за которого я управляю и начинал стрелять! Но не знаю...

Проблема стрельбы врагов через стены по игроку в TDS Unity2D (игра с видом сверху)
Здравствуйте уважаемые знатоки). У меня враги стреляют в меня через стены, а мне этого не надо. Я...

AI в Unity2D
Есть готовый скрипт ботинка(AI),он может меня преследовать, прыгать через платформы, убивать меня....

Магазин в Unity2D
Здрасте. Я хочу сделать магазин в unity2D. Интерфейс магазина и все я уже сделал. Но дело в том что...

Префаб в Unity2d
Есть префаб врага!Когда он умирает, нужно этот префаб заменить другим объектом!

Вращение Unity2D
Как зарегестрировать вращение в Unity по определенной плоскости? Например, если куб со значением...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.