2016-01-21 20 views
1

我目前正在研究一個可以拾取項目的腳本,並通過單擊鼠標左鍵來放置它。我也計劃添加旋轉項目和一些圖標來顯示每當我做這些行動之一。當我從地面上選擇一個對象時,我的腳本會做一些意想不到的事情

我目前對這個很新,所以我可能會在深度上自嘲。但我想嘗試。

這裏是我的代碼:

public class PickUp : MonoBehaviour { 

public Transform onHand; 

// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() { 
    if(Input.GetMouseButton(1)){ 
     this.transform.position = onHand.position; 
    } 
} 

void OnMouseDown() { 



    GetComponent<Rigidbody>().useGravity = false; 
    this.transform.position = onHand.position; 
    this.transform.parent = GameObject.Find("Player").transform; 
} 

void OnMouseUp() { 
    this.transform.parent = null; 
    GetComponent<Rigidbody>().useGravity = true; 
} 

}

到目前爲止,這樣的工作。我已經有些麻煩拿起我的對象,它並不總是讓着我。在它真正獲得對象之前,我必須點擊幾次。當它發生時,物體開始向上飛,出現一些我不明白的奇怪原因。我仍然堅持下去,我仍然可以隨身攜帶,只要我放開它就會掉下來。

回答

1

根據您顯示的數據量有限,我可以建議一些常見的事情來檢查/嘗試。如果你更新了更多的細節,我會盡力幫助你。

將什麼值分配給您的公共Transform onHand變量?

你有兩個地方做點擊檢測的原因嗎?嘗試刪除「Update」方法中的行。

OnMouseDown方法應該足夠了。但是,爲了使OnMouseDown正常工作,您的對象需要設置物理對撞器。檢查是否有碰撞器,它的尺寸與您所期望的相符。

爲了進行調試,嘗試在拾取器的剛體(從檢測器永久性地)設置「isKinematic」爲true,這應該禁用重力和其他力來移動拾取對象,以便可以測試其餘代碼。

此外,當您選取它時,將其轉換位置設置爲0,0,0 這應該使對象在玩家對象的確切中心位置跟隨玩家。

一旦你確認這個工作正常,把功能放回去看看他們中的任何一個是否破壞了設置。

首先將位置從0,0,0設置回onHand,然後檢查皮卡是否實際出現在玩家手上。 如果沒有,請檢查onHand變量的值。

然後,你可以關閉isKinematic,看看是否一切還好。

附註: 您可能想要繼續使用isKinematic而不是禁用重力。您可以將其設置爲運動學,以防止任何力量影響拾音器的位置,拾音器本身仍會對其他剛體產生影響。 然後,當你將鼠標放在鼠標上時,只需關閉isKinematic即可

+0

onHand變量包含一個gameObject,即放置對象的位置。是的,當我使用Kinematic時,它會停止向上流動,但問題在於,當我放棄它時:它會穿過地面一半。 – Athax

+0

您是否嘗試了我描述的所有選項?用這種有限的信息很難調試你的項目。事實發生在中途可能是由於多種原因造成的。我需要查看當你「丟棄」它時對象的位置,對撞機的設置方式,地板對撞機的設置方式,是否有任何處理其位置或對撞機設置的額外代碼,如果你移動它通過編輯備份在地板上,當它釋放時它是否仍然存在。等。 – irreal

+0

這可能會幫助你,幫助我:https://join.me/302-917-789這是一個屏幕共享。 – Athax

相關問題