[TUTORIAL] Como desenhar no Unity.
+2
JohnRambo
ismarspn
6 participantes
Página 1 de 1
[TUTORIAL] Como desenhar no Unity.
Primeiramente, tive que juntar dois scripts(pegados da net) pra poder funcionar do jeito que eu queria(ou quase), então vamos lá:
Primeiramente crie um objeto vazio, adicione o script "DrawLine", lá vai ter uma variável pra colocar um material, você adiciona o material com a cor que você quer que o desenho fique, depois adicione o componente "Line Renderer" nesse objeto vazio:
Agora é só dar Play e divirta-se:
Script:
Pra quem ainda não viu, está aí o meu jogo(caso tenha algum problema eu fazer a propaganda do meu jogo, algum moderador avise que eu edito o post):
https://play.google.com/store/apps/details?id=br.com.sammyplaygames.bingboing
Primeiramente crie um objeto vazio, adicione o script "DrawLine", lá vai ter uma variável pra colocar um material, você adiciona o material com a cor que você quer que o desenho fique, depois adicione o componente "Line Renderer" nesse objeto vazio:
Agora é só dar Play e divirta-se:
Script:
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine : MonoBehaviour
{
private LineRenderer line;
private bool isMousePressed;
public List<Vector3> pointsList;
private Vector3 mousePos;
public Material material;
// Structure for line points
struct myLine
{
public Vector3 StartPoint;
public Vector3 EndPoint;
};
// -----------------------------------
void Awake ()
{
// Create line renderer component and set its property
line = GetComponent<LineRenderer>();
//line = gameObject.AddComponent<LineRenderer> ();
line.material = new Material (Shader.Find ("Particles/Additive"));
line.SetVertexCount (0);
line.SetWidth (0.1f, 0.1f);
line.SetColors (Color.green, Color.green);
line.useWorldSpace = true;
isMousePressed = false;
pointsList = new List<Vector3> ();
// renderer.material.SetTextureOffset(
}
// -----------------------------------
void Update ()
{
// If mouse button down, remove old line and set its color to green
if (Input.GetMouseButtonDown (0)) {
createLine ();
isMousePressed = true;
line.SetVertexCount (0);
pointsList.RemoveRange (0, pointsList.Count);
line.SetColors (Color.green, Color.green);
}
if (Input.GetMouseButtonUp (0)) {
isMousePressed = false;
}
// Drawing line when mouse is moving(presses)
if (isMousePressed) {
mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos.z = 0;
if (!pointsList.Contains (mousePos)) {
pointsList.Add (mousePos);
line.SetVertexCount (pointsList.Count);
line.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
if (isLineCollide ()) {
// isMousePressed = false;
line.SetColors (Color.red, Color.red);
}
}
}
}
// -----------------------------------
// Following method checks is currentLine(line drawn by last two points) collided with line
// -----------------------------------
private bool isLineCollide ()
{
if (pointsList.Count < 2)
return false;
int TotalLines = pointsList.Count - 1;
myLine[] lines = new myLine[TotalLines];
if (TotalLines > 1) {
for (int i=0; i<TotalLines; i++) {
lines [i].StartPoint = (Vector3)pointsList [i];
lines [i].EndPoint = (Vector3)pointsList [i + 1];
}
}
for (int i=0; i<TotalLines-1; i++) {
myLine currentLine;
currentLine.StartPoint = (Vector3)pointsList [pointsList.Count - 2];
currentLine.EndPoint = (Vector3)pointsList [pointsList.Count - 1];
if (isLinesIntersect (lines [i], currentLine))
return true;
}
return false;
}
// -----------------------------------
// Following method checks whether given two points are same or not
// -----------------------------------
private bool checkPoints (Vector3 pointA, Vector3 pointB)
{
return (pointA.x == pointB.x && pointA.y == pointB.y);
}
// -----------------------------------
// Following method checks whether given two line intersect or not
// -----------------------------------
private bool isLinesIntersect (myLine L1, myLine L2)
{
if (checkPoints (L1.StartPoint, L2.StartPoint) ||
checkPoints (L1.StartPoint, L2.EndPoint) ||
checkPoints (L1.EndPoint, L2.StartPoint) ||
checkPoints (L1.EndPoint, L2.EndPoint))
return false;
return((Mathf.Max (L1.StartPoint.x, L1.EndPoint.x) >= Mathf.Min (L2.StartPoint.x, L2.EndPoint.x)) &&
(Mathf.Max (L2.StartPoint.x, L2.EndPoint.x) >= Mathf.Min (L1.StartPoint.x, L1.EndPoint.x)) &&
(Mathf.Max (L1.StartPoint.y, L1.EndPoint.y) >= Mathf.Min (L2.StartPoint.y, L2.EndPoint.y)) &&
(Mathf.Max (L2.StartPoint.y, L2.EndPoint.y) >= Mathf.Min (L1.StartPoint.y, L1.EndPoint.y))
);
}
private void createLine()
{
//create a new empty gameobject and line renderer component
line = new GameObject("Line"+line).AddComponent<LineRenderer>();
//assign the material to the line
line.material = material;
//set the number of points to the line
line.SetVertexCount(2);
//set the width
line.SetWidth(0.15f,0.15f);
//render line to the world origin and not to the object's position
line.useWorldSpace = true;
}
}
Pra quem ainda não viu, está aí o meu jogo(caso tenha algum problema eu fazer a propaganda do meu jogo, algum moderador avise que eu edito o post):
https://play.google.com/store/apps/details?id=br.com.sammyplaygames.bingboing
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Muito bom! Tem como colocar colisão nesses desenhos?
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Sim, porém terá que usar colisores normais em vez de colisores 2DJohn Rambo escreveu:Muito bom! Tem como colocar colisão nesses desenhos?
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine : MonoBehaviour
{
public bool invibleLine;
private LineRenderer line;
private bool isMousePressed;
public List<Vector3> pointsList;
private Vector3 mousePos;
public Material material;
Vector3 lastDotPosition;
bool lastPointExists;
public GameObject[] linesInScene;
void Awake ()
{
lastPointExists = false;
line = GetComponent<LineRenderer>();
isMousePressed = false;
pointsList = new List<Vector3> ();
}
void Update ()
{
if (Input.GetMouseButtonUp (0)) {
isMousePressed = false;
lastPointExists = false;
}
if (Input.GetMouseButtonDown (0)) {
linesInScene = GameObject.FindGameObjectsWithTag ("Line");
if (linesInScene.Length >= 1) {
Destroy (linesInScene [0]);
}
createLine ();
isMousePressed = true;
line.SetVertexCount (0);
pointsList.RemoveRange (0, pointsList.Count);
line.SetColors (Color.green, Color.green);
}
if (isMousePressed) {
mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos.z = 0;
CreateCollider (mousePos);
if (!pointsList.Contains (mousePos)) {
pointsList.Add (mousePos);
line.SetVertexCount (pointsList.Count);
line.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
}
}
}
private void createLine()
{
line = new GameObject("Line").AddComponent<LineRenderer>();
line.tag = "Line";
line.material = material;
line.SetVertexCount(2);
line.SetWidth(0.2f,0.2f);
line.useWorldSpace = true;
}
void CreateCollider(Vector3 newDotPosition)
{
if (lastPointExists) {
GameObject colliderKeeper = new GameObject ("collider");
BoxCollider bc = colliderKeeper.AddComponent<BoxCollider> ();
bc.transform.parent = line.transform;
colliderKeeper.transform.position = Vector3.Lerp (newDotPosition, lastDotPosition, 0.5f);
colliderKeeper.transform.LookAt (newDotPosition);
bc.size = new Vector3(0.15f, 0.15f, Vector3.Distance(newDotPosition, lastDotPosition));
}
lastDotPosition = newDotPosition;
lastPointExists = true;
}
}
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Teria como desenhar sem fundo branco, e definir o desenho como uma var q eu decidir, por ex, pra fazer o jogador msm criar um objeto coisas do tipo
Maigirh- Iniciante
- PONTOS : 3104
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Maigirh escreveu:Teria como desenhar sem fundo branco, e definir o desenho como uma var q eu decidir, por ex, pra fazer o jogador msm criar um objeto coisas do tipo
essa do fundo branco é so vc definir um background de sua preferencia. clicando em GameObject>2DObject>Sprite. coloque a imagem (deve ser um sprite 2d) e posicionando atras do cenario de modo que a camera pegue
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Tá mais e pra definir o desenho que o jogador desenhou como uma imagem emcima de uma coisa do jogo e definir como o desenho pra ter como tipo; desenhar objetos, etc
Maigirh- Iniciante
- PONTOS : 3104
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Não entendi muito bem, tem algum jogo referencia para explicar?Maigirh escreveu:Tá mais e pra definir o desenho que o jogador desenhou como uma imagem emcima de uma coisa do jogo e definir como o desenho pra ter como tipo; desenhar objetos, etc
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Muito legal, nele tem como usar colisores 2D ou apenas 3D?
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Eu não consegui colocar 2D, mas eu fiz um jogo 2D usando colisores 3D neles e funcionou numa boa com esse scriptrafaelllsd escreveu:Muito legal, nele tem como usar colisores 2D ou apenas 3D?
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Estou dando uma estudada no script e me deparei com uma coisa, como posso destroir os objetos que foram criados, por exemplo ativando uma bool?
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Como assim?
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Quando vai desenha cria os colisores certo, e eles ficam dentro do chamado objeto Line, então como posso destroir a Line que foi criada com os objetos dentro?
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Destruir as linhas e deixar só os colisores?
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Destroir as linhas e os colisores juntos.
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Tipo, se desenhar outra linha, destruir a linha anterior?
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Por exemplo, quando eu aperta "F" destruir as linhas que foram criadas.
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
bom, aí é só criar um for pra setar todas as lines dentro da array, aí quando apertar "F", destruir todos os objetos que estão dentro da array.
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine : MonoBehaviour
{
public bool invibleLine;
private LineRenderer line;
private bool isMousePressed;
public List<Vector3> pointsList;
private Vector3 mousePos;
public Material material;
Vector3 lastDotPosition;
bool lastPointExists;
public GameObject[] linesInScene;
void Awake ()
{
lastPointExists = false;
line = GetComponent<LineRenderer>();
isMousePressed = false;
pointsList = new List<Vector3> ();
}
void Update ()
{
linesInScene = GameObject.FindGameObjectsWithTag ("Line");
for (int x = linesInScene.Length - 1; x >= 0; x--) {
if (Input.GetKeyDown (KeyCode.F)) {
Destroy (linesInScene [x].gameObject);
}
}
if (Input.GetMouseButtonUp (0)) {
isMousePressed = false;
lastPointExists = false;
}
if (Input.GetMouseButtonDown (0)) {
createLine ();
isMousePressed = true;
line.SetVertexCount (0);
pointsList.RemoveRange (0, pointsList.Count);
line.SetColors (Color.green, Color.green);
}
if (isMousePressed) {
mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos.z = 0;
CreateCollider (mousePos);
if (!pointsList.Contains (mousePos)) {
pointsList.Add (mousePos);
line.SetVertexCount (pointsList.Count);
line.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
}
}
}
private void createLine()
{
line = new GameObject("Line").AddComponent<LineRenderer>();
line.tag = "Line";
line.material = material;
line.SetVertexCount(2);
line.SetWidth(0.2f,0.2f);
line.useWorldSpace = true;
}
void CreateCollider(Vector3 newDotPosition)
{
if (lastPointExists) {
GameObject colliderKeeper = new GameObject ("collider");
BoxCollider bc = colliderKeeper.AddComponent<BoxCollider> ();
bc.transform.parent = line.transform;
colliderKeeper.transform.position = Vector3.Lerp (newDotPosition, lastDotPosition, 0.5f);
colliderKeeper.transform.LookAt (newDotPosition);
bc.size = new Vector3(0.15f, 0.15f, Vector3.Distance(newDotPosition, lastDotPosition));
}
lastDotPosition = newDotPosition;
lastPointExists = true;
}
}
ismarspn- Programador
- PONTOS : 3998
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
Como eu faço pra desenhar apenas em uma área pré determinada( no caso, encima de um outro objeto)
Samuel l- Iniciante
- PONTOS : 3073
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Como desenhar no Unity.
valeu cara,funciona certinho aqui pra mimismarspn escreveu:Primeiramente, tive que juntar dois scripts(pegados da net) pra poder funcionar do jeito que eu queria(ou quase), então vamos lá:
Primeiramente crie um objeto vazio, adicione o script "DrawLine", lá vai ter uma variável pra colocar um material, você adiciona o material com a cor que você quer que o desenho fique, depois adicione o componente "Line Renderer" nesse objeto vazio:
Agora é só dar Play e divirta-se:
Script:
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine : MonoBehaviour
{
private LineRenderer line;
private bool isMousePressed;
public List<Vector3> pointsList;
private Vector3 mousePos;
public Material material;
// Structure for line points
struct myLine
{
public Vector3 StartPoint;
public Vector3 EndPoint;
};
// -----------------------------------
void Awake ()
{
// Create line renderer component and set its property
line = GetComponent<LineRenderer>();
//line = gameObject.AddComponent<LineRenderer> ();
line.material = new Material (Shader.Find ("Particles/Additive"));
line.SetVertexCount (0);
line.SetWidth (0.1f, 0.1f);
line.SetColors (Color.green, Color.green);
line.useWorldSpace = true;
isMousePressed = false;
pointsList = new List<Vector3> ();
// renderer.material.SetTextureOffset(
}
// -----------------------------------
void Update ()
{
// If mouse button down, remove old line and set its color to green
if (Input.GetMouseButtonDown (0)) {
createLine ();
isMousePressed = true;
line.SetVertexCount (0);
pointsList.RemoveRange (0, pointsList.Count);
line.SetColors (Color.green, Color.green);
}
if (Input.GetMouseButtonUp (0)) {
isMousePressed = false;
}
// Drawing line when mouse is moving(presses)
if (isMousePressed) {
mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos.z = 0;
if (!pointsList.Contains (mousePos)) {
pointsList.Add (mousePos);
line.SetVertexCount (pointsList.Count);
line.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
if (isLineCollide ()) {
// isMousePressed = false;
line.SetColors (Color.red, Color.red);
}
}
}
}
// -----------------------------------
// Following method checks is currentLine(line drawn by last two points) collided with line
// -----------------------------------
private bool isLineCollide ()
{
if (pointsList.Count < 2)
return false;
int TotalLines = pointsList.Count - 1;
myLine[] lines = new myLine[TotalLines];
if (TotalLines > 1) {
for (int i=0; i<TotalLines; i++) {
lines [i].StartPoint = (Vector3)pointsList [i];
lines [i].EndPoint = (Vector3)pointsList [i + 1];
}
}
for (int i=0; i<TotalLines-1; i++) {
myLine currentLine;
currentLine.StartPoint = (Vector3)pointsList [pointsList.Count - 2];
currentLine.EndPoint = (Vector3)pointsList [pointsList.Count - 1];
if (isLinesIntersect (lines [i], currentLine))
return true;
}
return false;
}
// -----------------------------------
// Following method checks whether given two points are same or not
// -----------------------------------
private bool checkPoints (Vector3 pointA, Vector3 pointB)
{
return (pointA.x == pointB.x && pointA.y == pointB.y);
}
// -----------------------------------
// Following method checks whether given two line intersect or not
// -----------------------------------
private bool isLinesIntersect (myLine L1, myLine L2)
{
if (checkPoints (L1.StartPoint, L2.StartPoint) ||
checkPoints (L1.StartPoint, L2.EndPoint) ||
checkPoints (L1.EndPoint, L2.StartPoint) ||
checkPoints (L1.EndPoint, L2.EndPoint))
return false;
return((Mathf.Max (L1.StartPoint.x, L1.EndPoint.x) >= Mathf.Min (L2.StartPoint.x, L2.EndPoint.x)) &&
(Mathf.Max (L2.StartPoint.x, L2.EndPoint.x) >= Mathf.Min (L1.StartPoint.x, L1.EndPoint.x)) &&
(Mathf.Max (L1.StartPoint.y, L1.EndPoint.y) >= Mathf.Min (L2.StartPoint.y, L2.EndPoint.y)) &&
(Mathf.Max (L2.StartPoint.y, L2.EndPoint.y) >= Mathf.Min (L1.StartPoint.y, L1.EndPoint.y))
);
}
private void createLine()
{
//create a new empty gameobject and line renderer component
line = new GameObject("Line"+line).AddComponent<LineRenderer>();
//assign the material to the line
line.material = material;
//set the number of points to the line
line.SetVertexCount(2);
//set the width
line.SetWidth(0.15f,0.15f);
//render line to the world origin and not to the object's position
line.useWorldSpace = true;
}
}
Pra quem ainda não viu, está aí o meu jogo(caso tenha algum problema eu fazer a propaganda do meu jogo, algum moderador avise que eu edito o post):
https://play.google.com/store/apps/details?id=br.com.sammyplaygames.bingboing
vitorhugo- Membro
- PONTOS : 2798
REPUTAÇÃO : 13
Idade : 23
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Desenhar na tela com o MOUSE
» [TUTORIAL] Tutorial Unity 3D Movimentação de Personagem com Botões UI
» [TUTORIAL] Como utilizar o aplicativo Unity Remote 4 com a UNITY 5
» [TUTORIAL] Como colocar videos na unity 3D [UNITY 5]
» [TUTORIAL] Unity + PHP + Mysql (com PDO)
» [TUTORIAL] Tutorial Unity 3D Movimentação de Personagem com Botões UI
» [TUTORIAL] Como utilizar o aplicativo Unity Remote 4 com a UNITY 5
» [TUTORIAL] Como colocar videos na unity 3D [UNITY 5]
» [TUTORIAL] Unity + PHP + Mysql (com PDO)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos