Поворот объекта за мышкой в X и Z в 3д игре
Всем привет! Может кто подсказать как в 3д организовать слежение объекта за курсором? Трабл в том, что мышь в 3д, поэтому объект вращается по 3осям. А у меня вид сверху, то есть поворачиваться должен объект только в X и Z.
Отслеживать
задан 8 окт 2017 в 3:55
3 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если у тебя вид сверху, а значит камера является Ортографической, то у тебя никак не может поворачиваться объект в сторону Z. Он должен поворачиваться вокруг оси Z. Разве что ты чего-то не менял.
В целом один из вариантов скрипта может выглядеть так:
using UnityEngine; public class MouseFollow2D : MonoBehaviour < private Vector3 mousePosition; public float moveSpeed = 2f; void Update () < mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); transform.position = Vector2.MoveTowards(transform.position, mousePosition, moveSpeed * Time.deltaTime); // Тот самый поворот // вычисляем разницу между текущим положением и положением мыши Vector3 difference = mousePosition - transform.position; difference.Normalize(); // вычисляемый необходимый угол поворота float rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg; // Применяем поворот вокруг оси Z transform.rotation = Quaternion.Euler(0f, 0f, rotation_z); >>
Если создать сцену 2D игры, расположить на ней просто куб и накинуть скрипт, то куб будет двигаться и поворачиваться в сторону мыши.
В целом тут использован Camera.ScreenToWorldPoint, который преобразует position (позицию) из экранного пространства в мировое пространство.
Если нужно вращение по другой оси — просто поменяй в коде
Как сделать управление wasd в юнити 3д на новой версии
Для управления WASD в Unity 3D на новой версии, вам необходимо выполнить следующие шаги:
1. Создайте новый проект Unity 3D и добавьте объект игрока или используйте существующий.
2. Добавьте компонент «Character Controller» к объекту игрока. Это позволит управлять движением персонажа с помощью WASD.
3. Откройте скрипт, который будет управлять движением игрока.
4. В методе «Update» добавьте следующий код:
«`
float horizontal = Input.GetAxis(«Horizontal»);
float vertical = Input.GetAxis(«Vertical»);
Vector3 movement = new Vector3(horizontal, 0f, vertical);
GetComponent().Move(movement * Time.deltaTime * speed);
«`
Где «speed» — это скорость перемещения персонажа.
5. Сохраните скрипт и запустите игру. Теперь вы можете управлять персонажем с помощью WASD.
Надеюсь, это поможет вам реализовать управление WASD в Unity 3D на новой версии.
Юрий ГришинУченик (112) 1 год назад
ошибка : error CS0103: The name ‘speed’ does not exist in the current context
Юлий ЩавельПрофи (871) 1 год назад
юрий попробуйте мой код
Для того чтобы добавить управление WASD в Unity 3D на новой версии, вам необходимо выполнить несколько шагов:
1. Создайте новый проект в Unity и выберите 3D шаблон.
2. Создайте новый GameObject. Вы можете сделать это, выбрав GameObject > Create Empty из верхнего меню.
3. Добавьте компонент Character Controller к вашему GameObject. Для этого выберите ваш GameObject и перейдите в окно Inspector. Нажмите на Add Component и найдите Character Controller. Нажмите на него, чтобы добавить компонент.
4. Создайте новый скрипт для вашего GameObject. Вы можете сделать это, выбрав ваш GameObject и щелкнув правой кнопкой мыши. Выберите Create > C# Script. Назовите его, например, «PlayerController».
5. Откройте скрипт PlayerController и добавьте следующий код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
<
public float speed = 6.0f;
private CharacterController controller;
// Start is called before the first frame update
void Start()
<
controller = GetComponent();
>
// Update is called once per frame
void Update()
<
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
controller.Move(movement * speed * Time.deltaTime);
>
>
1. Сохраните скрипт и вернитесь в Unity. Найдите ваш GameObject в иерархии, выберите его и перетащите скрипт PlayerController в окно Inspector вашего GameObject.
2. Теперь вы можете управлять своим персонажем с помощью клавиш WASD.
Убедитесь, что скрипт PlayerController находится на том же GameObject, что и компонент Character Controller, чтобы обеспечить правильную работу управления.
а что если я поворачиваю камеру хочу пойти вперед.а идет в бок.Тоесть только в одну сторону работает правильно.А в другие нет
Как создать инвентарь в 3D проекте UNITY?
В этой статье мы рассмотрим процесс создания простого инвентаря в 3D проекте и настройки его графического отображения. В качестве примера мы будем использовать бесплатные ассеты Unity.
Для Вашего удобства мы будем описывать последовательность шагов текстом и демонстрировать эти шаги в кратком видео. И так, приступим.
Нам понадобятся такие ассеты:
- RPG inventory icon
- Third Person Controller – Basic Locomotion FREE
Подготовка проекта
- Импортируйте ассеты, перечисленные выше.
- Создайте куб (в окне иерархии нажмите “+” ->3D object ->Cube):
- Переименуйте его в “Ground”, и увеличьте Scale по x и y:
- Создайте персонажа (Invector -> Basic Locomotion -> Create Basic Controller)
- Откроется окно создание персонажа, выберите в нем VBOT2.0_Custom и Invecor@BasicLocomotion и нажмите “Create”
- Поместите полученного персонажа над землей, запустите игру и убедитесь, что всё работает
Логика создания инвентаря
- Создайте скрипт “Inventory” в Папке “MonoBehaviour”
2. Создайте скрипт “Item” в папке “Scriptable objects”
3. Открываем скрипт “Item”, все предметы, которые мы будем создавать будут наследоваться от этого класса. Он будет наследоваться от ScriptableObject и содержать несколько полей (вы можете добавить какие-то поля по своему желанию):
4. Открываем скрипт “Inventory”, он будет прикрепляться к игроку и содержать список предметов. Создаем класс InventorySlot, он будет содержать предмет и количество экземпляров этого предмета в инвентаре. Определяем функцию добавления предмета в инвентарь, она сначала будет проверять, есть ли уже предмет с таким ID в инвентаре, в случае, если есть увеличивать их количество, а если нет – добавлять новый.
Собирание предметов
- Создадим кубик, а так же для наглядности сделаем его зеленым. Для этого создадим папку “Materials”, там создадим новый материал и поменяем его цвет (Alberdo)
- На кубике создадим коллайдер, сделаем его триггером, он будет определять, достаточно ли близко игрок подошёл к предмету, чтобы его поднять
- Создадим и добавим на него скрипт “CollectableItem”



UI инвентаря
- Создаём Canvas
- Переходим в 2D режим
- Создаем Panel
- Создадим 4 “Image” и сделаем так, чтоб каждый из них занимал четверть панели.
6. Создадим событие, которое будет вызываться при добавлении предмета в инвентарь
7. На панели создадим скрипт “Inventory UI”, он будет отвечать за графическое отображение инвентаря
8. Этот скрипт будет содержать метод UpdateUI, который будет принимать инвентарь и устанавливать изображения предметов. Так же необходимо добавить методы получения предмета в Inventory
9. Положим все Image в список
10. Теперь нам необходимо вызывать этот метод всякий раз, когда обновляется содержимое инвентаря, как раз для этого мы и создали событие OnInventoryChanged. Добавляем вызов нашего метода в это событие.
11. Делаем цвета всех Image прозрачными
12. Запускаем игру и убеждаемся, что подобранный предмет отображается в инвентаре
13. Осталось только сделать отображение количества предметов. Для этого к каждой картинке добавляем текстовое поле. Дополним скрипт UpdateUI, добавив туда отображение количества предметов, а так же делая пустые слоты прозрачными.
Заполняем список текстов
Создаем различные предметы (ВАЖНО: ID предметов должны быть различны) и тестируем
В данном уроке мы рассмотрели вариант создания инвентаря при помощи Scriptable Object. UI инвентаря – лишь тестовый вариант отображения, вы можете переделать его на свой вкус, так же можно сделать дополнительный класс для того, чтоб Image и Text не были отдельными списками, сделать инвентарь бесконечным, добавить возможность убирать предметы из инвентаря, сделать разные типы предметов наследуя их от Item и тд.
3D-персонажи и анимация
The following is intended for informational purposes only, and may not be incorporated into any contract. No purchasing decisions should be made based on the following materials. Unity is not committing to deliver any functionality, features or code. The development, timing and release of all products, functionality and features are at the sole discretion of Unity, and are subject to change.
How to share roadmap feedback
If you have accepted to use functional cookies and logged in using your Unity ID at the top right of the page, then sharing feedback is as simple as clicking a card below, selecting how important the topic is to you, adding your point of view and submitting! If you prefer not to accept functional cookies or log in, you will be prompted to enter an email address and validate it, so we know how to reach out when the topic evolves.
План выпуска
Анимация — это основной компонент любой игры. Поэтому мы стремимся создать богатый инструментарий разработки 3D-персонажей и анимации с функциональным API, чтобы помочь вам реализовать творческие идеи.
Подробнее об этой странице
As part of the dashboard below you will find a series of cards describing various topics of interest for this area. Those cards are organized in horizontal sections that represents the state of the development:
Released: highlighting some of the efforts that have already landed in recent versions of Unity.
In Progress: a team is at work developing solutions for this topic.
Planned: we plan to build solutions, but the work has not started, or the topic is being researched.
Under Consideration: we have noted this is an important topic for which some of you need solutions, but we are still collecting data and have not planned to build solutions for it yet.