Форум программистов, компьютерный форум, киберфорум
Игровые движки
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 29.10.2019
Сообщений: 3
1

Передвижение объекта в Unity

09.11.2019, 20:13. Показов 676. Ответов 0
Метки нет (Все метки)

Здравствуйте. Работаю над игрой-головоломкой, где нужно, чтобы камера двигалась вокруг определенного центра (по зажатию ПКМ) и можно было передвигать объекты (по зажатию ЛКМ).Начала писать сначала для вида сверху, аналогично и для вида снизу. Всё бы было хорошо, но только вот передвижение объекта во 2 случае не происходит. Сам скрипт движения брала с Интернета, ибо проект не ждет (а я делаю проект по созданию игры), а обучаться всем тонкостям некогда. Методом проб и ошибок поняла, что Unity не хочет проверять 2-е условие вообще(Кстати движение камеры вверх и вниз у меня только до 90/-90 градусов). Может быть подскажете в чем ошибка, и как исправить. Заранее спасибо!!!

Кликните здесь для просмотра всего текста
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
using UnityEngine;
using System.Collections;
public class Cntrl : MonoBehaviour
{
 
    public string[] tags; // массив тегов, объекты которых можно двигать
    public Camera _camera; // основная камера сцены
 
    public float step = 5; // шаг для изменения высоты в 3D
    private Transform curObj;
    private float mass;
 
    int position;
    int rotY, rotX;
    float smooth = 5.0f;
    float tiltAngle = 60.0f;
    int rY;
    int rX;
    public GameObject obj;
 
    bool GetTag(string curTag)
    {
        bool result = false;
        foreach (string t in tags)
        {
            if (t == curTag) result = true;
        }
        return result;
    }
 
    void Update()
    {
 
        float rotY = obj.transform.eulerAngles.y;
        float rotX = obj.transform.eulerAngles.x;
 
 
        if (rotX < 90 && rotX > 45)
        {
 
            if (Input.GetMouseButton(0)) // Удерживать левую кнопку мыши
            {
 
                RaycastHit hit;
                Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit))
                {
                    if (GetTag(hit.transform.tag) && hit.rigidbody && !curObj)
                    {
                        curObj = hit.transform;
                        mass = curObj.GetComponent<Rigidbody>().mass; // запоминаем массу объекта
                        curObj.GetComponent<Rigidbody>().mass = 0.0001f; // убираем массу, чтобы не сбивать другие объекты
                        curObj.GetComponent<Rigidbody>().freezeRotation = true; // заморозка вращения
 
                    }
                }
 
                if (curObj)
                {
                    Vector3 mousePosition = _camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, _camera.transform.position.y));
                    curObj.GetComponent<Rigidbody>().MovePosition(new Vector3(mousePosition.x, curObj.position.y + Input.GetAxis("Mouse ScrollWheel") * step, mousePosition.z));
 
                }
            }
        }
         if (rotX > -90 && rotX < -45)
        {
 
            if (Input.GetMouseButton(0)) // Удерживать левую кнопку мыши
            {
 
                RaycastHit hit;
                Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit))
                {
                    if (GetTag(hit.transform.tag) && hit.rigidbody && !curObj)
                    {
                        curObj = hit.transform;
                        mass = curObj.GetComponent<Rigidbody>().mass; // запоминаем массу объекта
                        curObj.GetComponent<Rigidbody>().mass = 0.0001f; // убираем массу, чтобы не сбивать другие объекты
                        curObj.GetComponent<Rigidbody>().freezeRotation = true; // заморозка вращения
 
                    }
                }
 
                if (curObj)
                {
                    Vector3 mousePosition = _camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, _camera.transform.position.y));
                    curObj.GetComponent<Rigidbody>().MovePosition(new Vector3(-mousePosition.x, curObj.position.y + Input.GetAxis("Mouse ScrollWheel") * step, -mousePosition.z));
 
                }
            }
      
        }
   }
 
}


Добавлено через 3 часа 22 минуты
Я посидела и разобралась немного. У меня почему-то проверка с отрицательными значениями не работает

Добавлено через 4 часа 46 минут
Я нашла свою ошибку. Дело в том что угол поворота не может принимать отрицательные значения (хотя во вкладке Transform пишется отрицательное значение) В итоге при получении данных об rotX и rotY мы получаем числа от 0 до 360. Вот собственно в чем была причина.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2019, 20:13
Ответы с готовыми решениями:

Передвижение Unity 3D 5.0
Помогите разобраться с ошибкой, все ни как ни могу понять почему выдает ошибку, смотрел на разных...

C# Передвижение игрока unity
Доброго времени суток! Ребятки помогайте: Решил написать передвижение игрока по нажатию клавиш...

Проблема передвижение персонажа в Unity
Привет) Написал код для передвижения персонажа от первого лица. Создал два скрипта отвечающие за...

Как сделать передвижение куба в unity?
Суть:Есть игра в 2D на Unity,надо сделать такое же передвижение у куба как вот здесь ...

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Скрипт: Передвижение игрока клавишами WSAD, на JS(UnityScript) Unity 2D
Создаю игру на Unity 2D и столкнулся с тем, что плохо знаю JS и не могу написать на нём код для...

Передвижение объекта
Моя проблема заключается в том что мне нужно чтобы платформа двигалась по оси x , но юнити меня не...

Передвижение объекта в матрице
Здравствуйте, не получается создать скрипт, который бы позволял объекту/персонажу передвигаться на...

Передвижение объекта по плоскости
Доброго времени суток, не могу найти нормального ответа по счет следующего: Почему функция...


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

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

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