[英]Draw line between two points at runtime using Line Renderer
我不熟悉編碼並嘗試制作一個物體出現在牆上的游戲,玩家將通過一條線連接 2 個匹配項(這個游戲感覺是 2D 但實際上是 3D)。
我的第一步只是能夠在兩點之間畫一條線。 稍后我會嘗試弄清楚是否使用布爾值、觸發器或碰撞器或什么來確定玩家是否連接了正確的對象。
我在這方面遇到了很多麻煩。 我想單擊屏幕一次以確定起點,然后第二次確定直線渲染器的終點。 然后用新的一行重復這一切。
這個腳本幾乎可以正常工作,但出於某種原因,我的第一個點總是設置為 (0, 0, 0),我不知道為什么。 這是我當前的腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine_2PT : MonoBehaviour
{
// Apply these values in the editor
public LineRenderer Line;
public GameObject newLine;
public float minimumVertexDistance = 0.1f;
public Vector3 GetWorldCoordinate(Vector3 mousePosition)
{
Vector3 mousePos = new Vector3(mousePosition.x, mousePosition.y, 1);
return Camera.main.ScreenToWorldPoint(mousePos);
}
void Start()
{
// set the color of the line
Line.startColor = Color.red;
Line.endColor = Color.red;
// set width of the renderer
Line.startWidth = 0.3f;
Line.endWidth = 0.3f;
Line.positionCount = 0;
}
void Update()
{
if ((Input.GetMouseButtonDown(0)) && Line.positionCount == 0)
{
Vector3 mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(0, mousePos);
Line.positionCount = Line.positionCount + 2;
}
if (Input.GetMouseButtonDown(0) && Line.positionCount == 2)
{
Vector3 mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(1, mousePos);
Instantiate(newLine, transform.position, Quaternion.Euler(0, 0, 0));
GetComponent<DrawLine_2PT>().enabled = false;
}
}
}
最后一位在第二個點生成后生成一條新線,並關閉初始線渲染器。 同樣,除了第一個點總是在 (0, 0, 0) 而不是鼠標 position 處生成外,似乎一切正常。
非常感謝任何/所有建議。
謝謝
你在做
Line.positionCount = Line.positionCount + 2;
在你打電話之后
Line.SetPosition(0, mousePos);
所以這還沒有效果,因為當你嘗試設置它時還沒有點。
然后你添加的兩個位置都保持默認 position 0,0,0
直到你稍后覆蓋第二個。
您應該先增加計數,然后設置 position。
另請注意,實際上您的兩個代碼塊將在同一幀中執行,因為在增加計數后第二個條件也匹配。 這是故意的嗎?
我寧願期待像這樣的東西
void Update()
{
if ((Input.GetMouseButtonDown(0))
{
if(Line.positionCount == 0))
{
Line.positionCount = 1;
var mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(0, mousePos);
}
else
{
Line.positionCount = 2;
var mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(1, mousePos);
Instantiate(newLine, transform.position, Quaternion.Euler(0, 0, 0));
GetComponent<DrawLine_2PT>().enabled = false;
}
}
}
而且,如果您願意,甚至可以在用戶繪制線條時直觀地更新線條,例如
void Update()
{
if ((Input.GetMouseButtonDown(0))
{
if(Line.positionCount == 0))
{
Line.positionCount = 1;
Vector3 mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(0, mousePos);
}
else
{
Line.positionCount = 2;
var mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(1, mousePos);
Instantiate(newLine, transform.position, Quaternion.Euler(0, 0, 0));
GetComponent<DrawLine_2PT>().enabled = false;
}
}
else if(Line.positionCount == 1)
{
var mousePos = GetWorldCoordinate(Input.mousePosition);
Line.SetPosition(1, mousePos);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.