簡體   English   中英

Unity3D 零件運動

[英]Unity3D Part Movement

在人們(以及 Unity 論壇)的幫助下,我幾乎對我正在制作的構建感到滿意。 這個版本展示了一個增壓泵,用於提高工業清潔的水壓。

到目前為止,我可以縮放、旋轉、平移和按 1-3 鍵來顯示/隱藏內部部件。

我想讓內部部件移動到按鍵上的位置,而不是僅僅出現在位置上(就像他們現在所做的 - 第一張圖像),所以我有這個移動腳本。 但是當我旋轉/移動增壓泵時,它看起來不正確(第二張圖)。 移動部分未跟隨增壓泵的主要部分。

據我所知,它與本地或世界空間有關,但我不知道哪個以及如何實現它?

在此處輸入圖片說明

在此處輸入圖片說明

{
Vector3 EndPos;
Vector3 StartPos;
private float distPos;
public float MovSpeed;
private float direction = 0f; // The direction of travel
public float maxDistance = 2f; // The maximum move distance


void Start()
{
    StartPos = transform.position;
    EndPos = StartPos + Vector3.back * maxDistance;
}


void Update()
{

    if (Input.GetKey(KeyCode.Space) && distPos == 1f)
        direction = -1f;
    
    if (Input.GetKey(KeyCode.Space) && distPos == 0f)
        direction = 1f;
    
    distPos = Mathf.Clamp01(distPos + (Time.deltaTime * MovSpeed * direction));

    if (distPos == 0f || distPos == 1f) direction = 0f;

    transform.position = Vector3.Lerp(StartPos, EndPos, distPos);
}

如果內部部件是父對象的子對象,並且您希望它們獨立移動,同時還繼續旋轉和與其父對象一起移動,則應該更改它們的 localPositions。 通過改變局部位置而不是世界,你告訴他們相對於他們的父母的中心從他們的初始位置移動那個距離 - 無論父母在哪里或當時它是如何旋轉的。

嘗試改變

StartPos = transform.position;

StartPos = transform.localPosition;

然后改變

transform.position = Vector3.Lerp(StartPos, EndPos, distPos);

transform.localPosition = Vector3.Lerp(StartPos, EndPos, distPos);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM