我使用了我在網上找到的一個專案腳本來獲取一個專案。它旨在用于第一人稱光線投射,但我對其進行了更改以檢測我的玩家是否觸發了該專案。我希望該專案在影片播放后 1 秒鎖定到我的玩家的手上。我嘗試呼叫,但我了解到我不能用引數來做到這一點。然后我嘗試了協程,但它們很復雜,我無法讓它作業。我創建了一個新的 void,在 1 秒后呼叫它,我想啟動我的 PickItem void。但是,我不知道該怎么做。我也不明白引數是如何作業的。
public int number = 1;
Animator animator;
private int i;
private GameObject[] Item;
private bool inrange;
// Reference to the character camera.
[SerializeField]
private Camera characterCamera;
// Reference to the slot for holding picked item.
[SerializeField]
private Transform slot;
// Reference to the currently held item.
private PickableItem pickedItem;
我的 OnTriggerStay 代碼。
private void OnTriggerStay(Collider other)
{
if (other.gameObject.tag == "Item")
{
inrange = true;
if (inrange == true && (number % 2) == 1)
{
// Check if object is pickable
var pickable = other.gameObject.GetComponent<PickableItem>();
// If object has PickableItem class
if (pickable)
{
//Invoke delay after 1 seconds
Invoke("delay", 1f);
}
}
}
}
我的延遲無效:
public void delay()
{
number = number 1;
PickItem();
}
我的 PickItem 無效:
// I don't under stand this line of code either
/// <param name="item">Item.</param>
public void PickItem(PickableItem item)
{
// Assign reference
pickedItem = item;
// Disable rigidbody and reset velocities
item.Rb.isKinematic = true;
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
// Set Slot as a parent
item.transform.SetParent(slot);
// Reset position and rotation
item.transform.localPosition = Vector3.zero;
item.transform.localEulerAngles = Vector3.zero;
item.GetComponent<MeshCollider>().enabled = false;
}
我知道在這種情況下協程可能更好,但我無法讓它們作業。
uj5u.com熱心網友回復:
協程使這變得簡單。使用WaitForSeconds創建延遲:
IEnumerator DelayPickup(PickableItem item)
{
yield return new WaitForSeconds(1f);
number ;
PickItem(item);
}
像這樣呼叫它:
private void OnTriggerStay(Collider other)
{
if (other.gameObject.CompareTag("Item"))
{
inrange = true;
// inrange is true here by assignment, don't need to check again
if (number % 2 == 1)
{
// Check if object is pickable
var pickable = other.gameObject.GetComponent<PickableItem>();
// If object has PickableItem class
if (pickable)
{
StartCoroutine(DelayPickup(pickable));
}
}
}
}
順便說一下,它們不被稱為“voids”,它們是回傳型別為void.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/365045.html
