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

Метание копья от первого лица

19.08.2019, 17:06. Показов 3417. Ответов 4

Author24 — интернет-сервис помощи студентам
подскажите, если кто знает. как в unity3d сымитировать полет копья/стрелы от первого лица, чтоб игрок мог метать эти самые копья?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2019, 17:06
Ответы с готовыми решениями:

Управление камерой от первого лица под Андроид
как сделать управления как у шутерах на андроид где только не искал не где не на шол помогите умею делать много но управления на андроид...

Мобильная низкополигональная "GTA" от первого лица
Приглашаю разработчиков низко-среднего уровня на создание этой игры, т.к. для меня одного слишком много работы По поводу пишите сюда:...

Камера от первого лица
В который раз, вечер добрый, очередная проблема, хотя не решились еще предыдущие) Необходимо сотворить вид с камеры, от локомотива, в...

4
29 / 22 / 7
Регистрация: 23.10.2017
Сообщений: 156
19.08.2019, 17:16
Создаешь копье на сцене и добавляешь ему силу add.Force в нужном направлении, движок сам сымитирует
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 48
19.08.2019, 17:22  [ТС]
не выходит. оно куда-то в бок летит.. копье - дочерний объект камеры. скрипт висит на игроке
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class weapon : MonoBehaviour
{ 
    public GameObject spearPrefab; //ссылка на префаб для создания его клонов
    public Rigidbody spearRig; // ссылка на физику копья
    public Transform def;   // положение по умолчанию
    public GameObject cam; //ссылка для камеры
   
    void Start()
    {
        //убираем столкновения с игроком
        Physics.IgnoreCollision(spearRig.GetComponent<Collider>(),GetComponent<Collider>());
        spearRig.centerOfMass = new Vector3(0,0,0.7f);//
    }
 
    void FixedUpdate()
    {
        if(Input.GetMouseButtonDown(0)){ //если нажали ЛКМ (один раз)
            Shot(); //выстреливаем
        }
    }
    void Shot(){
        //вектор из центра экрана ???
        Vector3 end = new Vector3(cam.GetComponent<Camera>().pixelWidth / 2,
            cam.GetComponent<Camera>().pixelHeight / 2, 0); 
        float distance = Vector3.Distance(def.position, end);//расстояние между начальной позицией и 
        //концом вектора ???
        Vector3 direction = (end - def.position).normalized; 
       direction.y = 0.5f;
        Vector3 v = Mathf.Sqrt(distance * 10f) * direction * spearRig.mass;
        //создаем копию копья
        GameObject spInst = (GameObject)Instantiate(spearPrefab,def.position, transform.rotation);
        Rigidbody rig = spInst.GetComponent<Rigidbody>(); //получаем физику клона
        rig.AddForce(v, ForceMode.Impulse);//придаем силу 
    }
}
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10421 / 5151 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.08.2019, 22:17
Лучший ответ Сообщение было отмечено blackzero90 как решение

Решение

blackzero90,
У вас в скрипте бред какой-то понаписан.
Во-первых нельзя вызывать Input.GetMouseButtonDown в FixedUpdate. Ввод игрока нужно обрабатывать только в Update.
Во-вторых, зачем вы берете экранные координаты центра? Они бесполезны для вас. Вам же нужно копье кидать в 3д пространстве, а не в экранном.

Нужно делать так:
1) Создаем пустой GameObject, называем его LanceAnchor. Делаем его дочерним к камере, и размещаем немного правее камеры, и так, что бы его ось Z смотрела в туда же, куда смотрит камера:
Метание копья от первого лица


2) На объект LanceAnchor вешаем компонент LanceController:
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
using System;
using UnityEngine;
 
public class LanceController : MonoBehaviour
{
    public Rigidbody LancePrefab;
    public float ThrowForce = 1000;
    Rigidbody lance;
 
    private void Start()
    {
        //ctrate first lance
        CreateLance();
    }
 
    private void CreateLance()
    {
        lance = Instantiate(LancePrefab, transform);
        //up of prefab look along forward axes
        lance.transform.up = transform.forward;
        lance.transform.localPosition = Vector3.zero;
        //freeze rigidbody
        lance.constraints = RigidbodyConstraints.FreezeAll;
    }
 
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
            Shot();
    }
 
    private void Shot()
    {
        if (lance == null)
            return;
 
        //direction
        var dir = transform.forward;
        //throw
        lance.constraints = RigidbodyConstraints.None;//enable rigidbody
        lance.transform.SetParent(null);
        lance.AddForce(dir * ThrowForce);//add force along direction
        //create new labce after 1 sec
        Invoke("CreateLance", 1);
    }
}
3) Создаем префаб копья, острие копья должно смотреть вдоль оси Y. На копье вешаем Rigidbody.
4) Перетягиваем префаб в поле LancePrefab скрипта.

Получаем результат:
Метание копья от первого лица
1
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 48
20.08.2019, 13:01  [ТС]
Спасибо вам огромное! Прям выручили!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2019, 13:01
Помогаю со студенческими работами здесь

Создать шутер от первого лица или змейку
Создать шутер от первого лица или змейку. помогите

Сделать передвижение персонажа с видом от первого лица в graph3d
Сделать передвижение персонажа с видом от первого лица в graph3d. Добавлено через 2 минуты Ну например : передвижение персонажа с...

Фильм "Без лица" становится реальностью - впервые выполнена операция по полной трансплантации лица пациента.
Фильм &quot;Без лица&quot; становится реальностью - впервые выполнена операция по полной трансплантации лица пациента. В прошедшую пятницу было...

Получить мультфильм показывающий метание диска
Получить мультфильм показывающий метание диска. Построение отдельных кадров выполнить на основе олимптйской символики.

От 3 лица
Мне нужна камера которая на 360 град х,у, крутилась во круг объекта. На сколько я понял можно использовать систему &quot;камеру от 3...


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

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

Новые блоги и статьи
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
Verilog и интеллектуальная собственность - "глазами" обученной LM модели.
Hrethgir 17.04.2025
В сети встречаются участники, заявляющие что код на Verilog ни о чём не говорит. Но вот патентная практика на самом деле показывает обратное ими утверждаемому. То-есть код на Verilog включают в. . .
Свап-файл дополнительно к разделу (если вдруг не хватает или не создан)
jigi33 17.04.2025
ПОДКЛЮЧЕНИЕ ДОПОЛНИТЕЛЬНОГО SWAP ПРОСТРАНСТВА, Т. О. , РАСШИРЕНИЕ ЕГО РАЗМЕРА В Linux можно использовать как раздел подкачки (swap), так и файл подкачки (swap-файл). Чтобы создать swap-файл вместо. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru