Механика рисования платформ.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Механика рисования платформ.

Сообщение Ankarin 03 дек 2018, 14:40

Всем привет, я овощ и не могу разобраться как это сделать, в игре должны создаваться прямые физические линии от точки до точки. Для наглядности вот пример https://play.google.com/store/apps/deta ... morebounce. Не кидайтесь помидорами только, спасибо
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

Re: Механика рисования платформ.

Сообщение 1max1 03 дек 2018, 15:06

Дешевый нативный вариант https://docs.unity3d.com/ScriptReferenc ... derer.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 1616
Зарегистрирован: 28 июн 2017, 10:51

Re: Механика рисования платформ.

Сообщение DimaJoke 03 дек 2018, 18:20

Вопрос довольно интересный.
Попробуй из одного к другому пускать RaycastHit, добавлять к нему LineRenderer и колайдер
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Механика рисования платформ.

Сообщение Anonymyx 03 дек 2018, 18:33

Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1934
Зарегистрирован: 05 апр 2015, 15:55

Re: Механика рисования платформ.

Сообщение Ankarin 04 дек 2018, 16:13

Anonymyx писал(а):Linerenderer + http://www.theappguruz.com/blog/add-col ... erer-unity

спасибо, а нет идей, почему так получается ? https://www.youtube.com/watch?v=fFjrnrXfCbY вот эти краткосрочные отрисовки из центра к курсору.
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

Re: Механика рисования платформ.

Сообщение 1max1 04 дек 2018, 16:31

Начальная позиция префаба в 0,0,0 видимо.
Аватара пользователя
1max1
Адепт
 
Сообщения: 1616
Зарегистрирован: 28 июн 2017, 10:51

Re: Механика рисования платформ.

Сообщение DimaJoke 04 дек 2018, 19:21

А ты не поехали делай, а создавайте empty, или хотя бы пустой префаб.. а потом AddComponent<LineRenderer>();
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Механика рисования платформ.

Сообщение Ankarin 05 дек 2018, 11:30

DimaJoke писал(а):А ты не поехали делай, а создавайте empty, или хотя бы пустой префаб.. а потом AddComponent<LineRenderer>();

я вообще ничего не понял, куда поехали ? у меня скрипт и так висит на обьекте. Или о чем ты говоришь ?
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

Re: Механика рисования платформ.

Сообщение DimaJoke 05 дек 2018, 13:06

Ты под каждый лайнер рендер делай отдельный объект(пустой) и потом скриптованно давай ему рендер
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Механика рисования платформ.

Сообщение DimaJoke 05 дек 2018, 15:33

Могу дать скрипт, я сейчас примерно тем же занимаюсь. Только там будет много ещё не нужной ерунды для тебя.
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Механика рисования платформ.

Сообщение Ankarin 05 дек 2018, 17:44

DimaJoke писал(а):Могу дать скрипт, я сейчас примерно тем же занимаюсь. Только там будет много ещё не нужной ерунды для тебя.
.
Хорошо, буду очень благодарен, убрать лишнее в случае чего будет проще )
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

Re: Механика рисования платформ.

Сообщение Saltant 05 дек 2018, 18:24

Ankarin писал(а):
DimaJoke писал(а):Могу дать скрипт, я сейчас примерно тем же занимаюсь. Только там будет много ещё не нужной ерунды для тебя.
.
...убрать лишнее в случае чего будет проще )

Не факт, к тому же если не разбираешься :)
Аватара пользователя
Saltant
UNIт
 
Сообщения: 58
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Механика рисования платформ.

Сообщение DimaJoke 05 дек 2018, 18:53

тут у меня много публичных переменных, которые я в этотт фрагмент не занёс. разберёшься
Синтаксис:
Используется csharp

        MousePos = camera.ScreenPointToRay(Input.mousePosition).origin;//ищим положение мыши
        Quaternion Qua = new Quaternion(0, 0 , 0, 0);//Кватернион, вообще не нужная(почти) штука(для тебя)
        bool Once = true;//Что бы один раз проигрывалось
        if(Input.GetKeyUp(Key))// я создал переменную KeyCodе для этого
        {
               
                if(Steps == 0 && Once)
                {
                        Instantiate(Circle, MousePos, Qua);//тут я делаю кружочек на месте клика
                        firstPos = MousePos;//заносим позицию
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }
                if(Steps == 1 && Once)//второй шаг
                {

                        secPos = MousePos;//вторая позиция
                        Instantiate(Circle, MousePos, Qua);//кружочек
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }

                Once = true;
        }
       
        if(Steps == 2)//Если у нас 2 шага))
        {
                var line = Instantiate(Clear, firstPos, Qua);//создаём объект
                line.AddComponent<LineRenderer>();//доьавляем рендерер
                LineRenderer LineRender = line.GetComponent<LineRenderer>();// заносим рендерер как переменную
                LineRender.materials[0] = LineMat;// ставим ему материал, который я сделал публичным(!)
                LineRender.SetPosition(0, firstPos);//первая позиция
                LineRender.SetPosition(1, secPos);//вторая
               
                LineRender.startWidth = 0.200f;// ширина
                line.transform.SetParent(Parent);//кидаем под Родителя( переменная Transform)
               
               
                WallsNum = WallsNum + 1;//Тебе вряд ли пригодится, мне-для сериализации


                var col = Instantiate(colid);//делаем колайдер
        col.transform.parent = line.transform;//заносим колайдер как дочерний к линии
        float lineLength = Vector3.Distance (firstPos, secPos); //ищем дистанцию между точками
        col.size = new Vector3 (lineLength, 0.1f, 1f);//размер колайдера
        Vector3 midPoint = (firstPos + secPos)/2;// средняя точка на линии
        col.transform.position = midPoint; //где находится коллизия? на срередине линии!
        float angle = (Mathf.Abs (firstPos.y - secPos.y) / Mathf.Abs (firstPos.x - secPos.x));//поворот коллизии
        if((firstPos.y<secPos.y && firstPos.x>secPos.x) || (secPos.y<firstPos.y && secPos.x>firstPos.x))//и опять поворт
        {
            angle*=-1;
        }
        angle = Mathf.Rad2Deg * Mathf.Atan(angle);// взято из тутора, я не понял)))
        col.transform.Rotate (0, 0, angle);// изменяем вращение коллизии

        Walls[WallsNum] = new  MyWall(WallsNum, firstPos, secPos, col);//заношу в массив моего класса(для сериализации, тебе не надо)
        Steps = 0;//И СНОВА \0/
        }
 
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Механика рисования платформ.

Сообщение Ankarin 05 дек 2018, 19:03

DimaJoke писал(а):тут у меня много публичных переменных, которые я в этотт фрагмент не занёс. разберёшься
Синтаксис:
Используется csharp

        MousePos = camera.ScreenPointToRay(Input.mousePosition).origin;//ищим положение мыши
        Quaternion Qua = new Quaternion(0, 0 , 0, 0);//Кватернион, вообще не нужная(почти) штука(для тебя)
        bool Once = true;//Что бы один раз проигрывалось
        if(Input.GetKeyUp(Key))// я создал переменную KeyCodе для этого
        {
               
                if(Steps == 0 && Once)
                {
                        Instantiate(Circle, MousePos, Qua);//тут я делаю кружочек на месте клика
                        firstPos = MousePos;//заносим позицию
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }
                if(Steps == 1 && Once)//второй шаг
                {

                        secPos = MousePos;//вторая позиция
                        Instantiate(Circle, MousePos, Qua);//кружочек
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }

                Once = true;
        }
       
        if(Steps == 2)//Если у нас 2 шага))
        {
                var line = Instantiate(Clear, firstPos, Qua);//создаём объект
                line.AddComponent<LineRenderer>();//доьавляем рендерер
                LineRenderer LineRender = line.GetComponent<LineRenderer>();// заносим рендерер как переменную
                LineRender.materials[0] = LineMat;// ставим ему материал, который я сделал публичным(!)
                LineRender.SetPosition(0, firstPos);//первая позиция
                LineRender.SetPosition(1, secPos);//вторая
               
                LineRender.startWidth = 0.200f;// ширина
                line.transform.SetParent(Parent);//кидаем под Родителя( переменная Transform)
               
               
                WallsNum = WallsNum + 1;//Тебе вряд ли пригодится, мне-для сериализации


                var col = Instantiate(colid);//делаем колайдер
        col.transform.parent = line.transform;//заносим колайдер как дочерний к линии
        float lineLength = Vector3.Distance (firstPos, secPos); //ищем дистанцию между точками
        col.size = new Vector3 (lineLength, 0.1f, 1f);//размер колайдера
        Vector3 midPoint = (firstPos + secPos)/2;// средняя точка на линии
        col.transform.position = midPoint; //где находится коллизия? на срередине линии!
        float angle = (Mathf.Abs (firstPos.y - secPos.y) / Mathf.Abs (firstPos.x - secPos.x));//поворот коллизии
        if((firstPos.y<secPos.y && firstPos.x>secPos.x) || (secPos.y<firstPos.y && secPos.x>firstPos.x))//и опять поворт
        {
            angle*=-1;
        }
        angle = Mathf.Rad2Deg * Mathf.Atan(angle);// взято из тутора, я не понял)))
        col.transform.Rotate (0, 0, angle);// изменяем вращение коллизии

        Walls[WallsNum] = new  MyWall(WallsNum, firstPos, secPos, col);//заношу в массив моего класса(для сериализации, тебе не надо)
        Steps = 0;//И СНОВА \0/
        }
 

постараюсь, спасибо
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

Re: Механика рисования платформ.

Сообщение Ankarin 05 дек 2018, 20:35

DimaJoke писал(а):тут у меня много публичных переменных, которые я в этотт фрагмент не занёс. разберёшься
Синтаксис:
Используется csharp

        MousePos = camera.ScreenPointToRay(Input.mousePosition).origin;//ищим положение мыши
        Quaternion Qua = new Quaternion(0, 0 , 0, 0);//Кватернион, вообще не нужная(почти) штука(для тебя)
        bool Once = true;//Что бы один раз проигрывалось
        if(Input.GetKeyUp(Key))// я создал переменную KeyCodе для этого
        {
               
                if(Steps == 0 && Once)
                {
                        Instantiate(Circle, MousePos, Qua);//тут я делаю кружочек на месте клика
                        firstPos = MousePos;//заносим позицию
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }
                if(Steps == 1 && Once)//второй шаг
                {

                        secPos = MousePos;//вторая позиция
                        Instantiate(Circle, MousePos, Qua);//кружочек
                        Steps = Steps + 1;//+ 1 шаг
                        Once = false;
                }

                Once = true;
        }
       
        if(Steps == 2)//Если у нас 2 шага))
        {
                var line = Instantiate(Clear, firstPos, Qua);//создаём объект
                line.AddComponent<LineRenderer>();//доьавляем рендерер
                LineRenderer LineRender = line.GetComponent<LineRenderer>();// заносим рендерер как переменную
                LineRender.materials[0] = LineMat;// ставим ему материал, который я сделал публичным(!)
                LineRender.SetPosition(0, firstPos);//первая позиция
                LineRender.SetPosition(1, secPos);//вторая
               
                LineRender.startWidth = 0.200f;// ширина
                line.transform.SetParent(Parent);//кидаем под Родителя( переменная Transform)
               
               
                WallsNum = WallsNum + 1;//Тебе вряд ли пригодится, мне-для сериализации


                var col = Instantiate(colid);//делаем колайдер
        col.transform.parent = line.transform;//заносим колайдер как дочерний к линии
        float lineLength = Vector3.Distance (firstPos, secPos); //ищем дистанцию между точками
        col.size = new Vector3 (lineLength, 0.1f, 1f);//размер колайдера
        Vector3 midPoint = (firstPos + secPos)/2;// средняя точка на линии
        col.transform.position = midPoint; //где находится коллизия? на срередине линии!
        float angle = (Mathf.Abs (firstPos.y - secPos.y) / Mathf.Abs (firstPos.x - secPos.x));//поворот коллизии
        if((firstPos.y<secPos.y && firstPos.x>secPos.x) || (secPos.y<firstPos.y && secPos.x>firstPos.x))//и опять поворт
        {
            angle*=-1;
        }
        angle = Mathf.Rad2Deg * Mathf.Atan(angle);// взято из тутора, я не понял)))
        col.transform.Rotate (0, 0, angle);// изменяем вращение коллизии

        Walls[WallsNum] = new  MyWall(WallsNum, firstPos, secPos, col);//заношу в массив моего класса(для сериализации, тебе не надо)
        Steps = 0;//И СНОВА \0/
        }
 

Скрытый текст:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawF : MonoBehaviour {
private Vector2 MousePos = camera.ScreenPointToRay(Input.mousePosition).origin;//ищим положение мыши
Quaternion Qua = new Quaternion(0, 0 , 0, 0);//Кватернион, вообще не нужная(почти) штука(для тебя)
bool Once = true;//Что бы один раз проигрывалось
public float Steps;
private Vector2 firstPos;
private Vector2 secPos;
public GameObject Circle;
public Material LineMat;
public GameObject Clear;

void Update (){
if(Input.GetMouseButtonDown(0))// я создал переменную KeyCodе для этого
{

if(Steps == 0 && Once)
{ Instantiate(Circle, MousePos, Qua);//тут я делаю кружочек на месте клика
firstPos = MousePos;//заносим позицию
Steps = Steps + 1;//+ 1 шаг
Once = false;
}
if(Steps == 1 && Once)//второй шаг
{
Instantiate(Circle, MousePos, Qua);//кружочек
secPos = MousePos;//вторая позиция
Steps = Steps + 1;//+ 1 шаг
Once = false;
}

Once = true;


if(Steps == 2)//Если у нас 2 шага))
{
var line = Instantiate(Clear, firstPos, Qua);//создаём объект
line.AddComponent<LineRenderer>();//доьавляем рендерер
LineRenderer LineRender = line.GetComponent<LineRenderer>();// заносим рендерер как переменную
LineRender.materials[0] = LineMat;// ставим ему материал, который я сделал публичным(!)
LineRender.SetPosition(0, firstPos);//первая позиция
LineRender.SetPosition(1, secPos);//вторая

LineRender.startWidth = 0.200f;// ширина
line.transform.SetParent(Parent);//кидаем под Родителя( переменная Transform)




BoxCollider2D col = new GameObject("Collider").AddComponent<BoxCollider2D> ();
col.transform.parent = line.transform;//заносим колайдер как дочерний к линии
float lineLength = Vector3.Distance (firstPos, secPos); //ищем дистанцию между точками
col.size = new Vector3 (lineLength, 0.1f, 1f);//размер колайдера
Vector3 midPoint = (firstPos + secPos)/2;// средняя точка на линии
col.transform.position = midPoint; //где находится коллизия? на срередине линии!
float angle = (Mathf.Abs (firstPos.y - secPos.y) / Mathf.Abs (firstPos.x - secPos.x));//поворот коллизии
if((firstPos.y<secPos.y && firstPos.x>secPos.x) || (secPos.y<firstPos.y && secPos.x>firstPos.x))//и опять поворт
{
angle*=-1;
}
angle = Mathf.Rad2Deg * Mathf.Atan(angle);// взято из тутора, я не понял)))
col.transform.Rotate (0, 0, angle);// изменяем вращение коллизии

Steps = 0;//И СНОВА \0/

}
}
}
}

сорян, что надоедаю, но я не могу понять, что ему еще нужно(. Вот консоль:
Скрытый текст:
Assets/Assets/Scripts/DrawF.cs(47,42): error CS0103: The name `Parent' does not exist in the current context
Assets/Assets/Scripts/DrawF.cs(6,37): error CS1061: Type `UnityEngine.Component' does not contain a definition for `ScreenPointToRay' and no extension method `ScreenPointToRay' of type `UnityEngine.Component' could be found. Are you missing an assembly reference?
Ankarin
UNец
 
Сообщения: 8
Зарегистрирован: 03 дек 2018, 14:32

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13