Страница 1 из 2

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

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

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

СообщениеДобавлено: 03 дек 2018, 15:06
1max1
Дешевый нативный вариант https://docs.unity3d.com/ScriptReferenc ... derer.html

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

СообщениеДобавлено: 03 дек 2018, 18:20
DimaJoke
Вопрос довольно интересный.
Попробуй из одного к другому пускать RaycastHit, добавлять к нему LineRenderer и колайдер

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

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

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

СообщениеДобавлено: 04 дек 2018, 16:13
Ankarin
Anonymyx писал(а):Linerenderer + http://www.theappguruz.com/blog/add-col ... erer-unity

спасибо, а нет идей, почему так получается ? https://www.youtube.com/watch?v=fFjrnrXfCbY вот эти краткосрочные отрисовки из центра к курсору.

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

СообщениеДобавлено: 04 дек 2018, 16:31
1max1
Начальная позиция префаба в 0,0,0 видимо.

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

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

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

СообщениеДобавлено: 05 дек 2018, 11:30
Ankarin
DimaJoke писал(а):А ты не поехали делай, а создавайте empty, или хотя бы пустой префаб.. а потом AddComponent<LineRenderer>();

я вообще ничего не понял, куда поехали ? у меня скрипт и так висит на обьекте. Или о чем ты говоришь ?

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

СообщениеДобавлено: 05 дек 2018, 13:06
DimaJoke
Ты под каждый лайнер рендер делай отдельный объект(пустой) и потом скриптованно давай ему рендер

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

СообщениеДобавлено: 05 дек 2018, 15:33
DimaJoke
Могу дать скрипт, я сейчас примерно тем же занимаюсь. Только там будет много ещё не нужной ерунды для тебя.

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

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

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

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

Не факт, к тому же если не разбираешься :)

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

СообщениеДобавлено: 05 дек 2018, 18:53
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/
        }
 

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

СообщениеДобавлено: 05 дек 2018, 19:03
Ankarin
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/
        }
 

постараюсь, спасибо

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

СообщениеДобавлено: 05 дек 2018, 20:35
Ankarin
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?