如何将物体扔向玩家面对的方向?



我试图在它被持有后抛出一个对象。以下是拾取的工作原理:

public void PickupObject()
{
physicsObject = lookObject.GetComponentInChildren<PhysicsObjects>();
currentlyPickedUpObject = lookObject;
pickupRB = currentlyPickedUpObject.GetComponent<Rigidbody>();
priorConstraints = pickupRB.constraints;   
pickupRB.constraints = RigidbodyConstraints.FreezeAll;   
pickupRB.constraints = RigidbodyConstraints.FreezeRotation;
physicsObject.playerInteractions = this;
pickupRB.isKinematic = true;
pickupRB.transform.parent = PickupParent.transform;
//   pickupRB.isKinematic = true;
StartCoroutine(physicsObject.PickUp()); 
}

update()中的:

if (currentlyPickedUpObject != null)
{
currentDist = Vector3.Distance(PickupParent.position, pickupRB.position);
currentSpeed = Mathf.SmoothStep(minSpeed, maxSpeed, currentDist / maxDistance);
currentSpeed *= Time.fixedDeltaTime;
pickupRB.transform.position = PickupParent.position;
// pickupRB.transform.SetParent(PickupParent.transform);
Vector3 direction = PickupParent.position - pickupRB.position;
pickupRB.velocity = direction.normalized * currentSpeed;
Vector3 camerDirection = mainCamera.transform.forward;
// Throw object
if (Throw)
{
pickupRB.constraints = RigidbodyConstraints.None;
pickupRB.isKinematic = false;
Debug.Log("Object is being thrown"); 
pickupRB.AddForce(camerDirection * 100);
}
Throw = false;
}

如上图所示,我尝试着向玩家的方向添加力量,以便他们能够在这个方向上投掷道具:

Vector3 camerDirection = mainCamera.transform.forward;
if (Throw)
{
pickupRB.constraints = RigidbodyConstraints.None;
pickupRB.isKinematic = false;
Debug.Log("Object is being thrown"); 
pickupRB.AddForce(camerDirection * 100);
}
Throw = false;

当按下throw按钮但没有发生任何事情时,在控制台中打印该行。如何解决这个问题?

我认为你扔了这个对象,但你没有释放它,所以在下一帧中,currentlyPickedUpObject不是null,所以你再次用pickuparent移动它。试着在你的if (Throw)语句中设置它为null,这样你就不会一直移动它:

if (currentlyPickedUpObject != null)
{
currentDist = Vector3.Distance(PickupParent.position, pickupRB.position);
currentSpeed = Mathf.SmoothStep(minSpeed, maxSpeed, currentDist / maxDistance);
currentSpeed *= Time.fixedDeltaTime;
pickupRB.transform.position = PickupParent.position;
// pickupRB.transform.SetParent(PickupParent.transform);
Vector3 direction = PickupParent.position - pickupRB.position;
pickupRB.velocity = direction.normalized * currentSpeed;
Vector3 camerDirection = mainCamera.transform.forward;
// Throw object
if (Throw)
{
pickupRB.constraints = RigidbodyConstraints.None;
pickupRB.isKinematic = false;
Debug.Log("Object is being thrown"); 
pickupRB.AddForce(camerDirection * 100);
currentlyPickedUpObject = null; // <--- NEW
}
Throw = false;
}

问题是当你拿起对象时,你正在设置pickupRB运动学与线pickupRB.isKinematic = true为了解决这个问题,你应该加上pickupRB.isKinematic = false

最新更新