我是編碼新手并嘗試制作一個物件出現在墻上的游戲,玩家將通過一條線連接匹配的 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) 而不是滑鼠位置產生。
非常感謝任何/所有建議。
謝謝
uj5u.com熱心網友回復:
你在做
Line.positionCount = Line.positionCount 2;
在你打電話后
Line.SetPosition(0, mousePos);
所以這還沒有效果,因為當你嘗試設定它時還沒有積分。
然后您添加的兩個位置都保持默認位置0,0,0,直到您稍后覆寫第二個位置。
您應該首先增加計數,然后設定位置。
另請注意,實際上您的兩個代碼塊都將在同一幀中執行,因為在增加計數后,第二個條件也匹配。這是故意的嗎?
我寧愿期待像例如
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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432330.html
