Ich habe ein Skript geschrieben, in dem ein Spielobjekt zu einem von der Player-Kamera geworfenen raycast.point verschoben werden soll. Zum größten Teil funktioniert das gut, jedoch gibt es Zeiten (ungefähr wenn die Kamera 45 Grad von dem Objekt entfernt ist), wenn sich das Objekt schnell in Richtung der Kamera bewegt (d. H. Eine Raycast-Quelle).Bewegliches Objekt mit Raycast-Problemen
Ich habe versucht eine Reihe von Ansätzen versuchen, dies zu lösen, aber ich kann nicht scheinen, die Wurzel dieses Problems zu graben. Wird verwaltet, um dies zu verhindern, indem der Collider deaktiviert wird, der an das verschobene Objekt angehängt ist. Allerdings brauche ich den Collider aus verschiedenen Gründen, daher ist dieser Ansatz nicht geeignet.
Wenn jemand irgendwelche Hinweise geben kann, wo ich falsch liege, wäre ich unglaublich dankbar.
NB: Codierung in UJS
Vielen Dank im Voraus, Ryan
function FixedUpdate() {
if (modObj != null && !guiMode) {
//Panel Control
if (!selectObjPanel.activeSelf && !modifySelectObjPanel.activeSelf) //if the selectpanel not open and modSelect not already activated
{
activateModSelectObjPanel(true); //activate it
} else if (selectObjPanel.activeSelf) {
activateModSelectObjPanel(false);
}
//Move
if (Input.GetKey(KeyCode.E)) {
if (Input.GetKeyDown(KeyCode.E)) {
// modObj.GetComponent(BoxCollider).enabled = false;
modObj.GetComponent(Rigidbody).isKinematic = true;
modObj.GetComponent(Rigidbody).useGravity = false;
//
initPos = modObj.transform.position;
var initRotation = modObj.transform.rotation;
}
moveObject(modObj, initPos, initRotation);
} else {
// modObj.GetComponent(BoxCollider).enabled = true;
modObj.GetComponent(Rigidbody).isKinematic = false;
modObj.GetComponent(Rigidbody).useGravity = true;
}
}
}
function moveObject(modObj: GameObject, initPos: Vector3, initRotation: Quaternion) {
//Debug.Log("Moving Object");
var hit: RaycastHit;
var foundHit: boolean = false;
foundHit = Physics.Raycast(transform.position, transform.forward, hit);
//Debug.DrawRay(transform.position, transform.forward, Color.blue);
if (foundHit && hit.transform.tag != "Player") {
//Debug.Log("Move to Hit Point: " + hit.point);
modifyObjGUIscript.activateMoveDisplay(initPos, hit.point);
var meshHalfHeight = modObj.GetComponent. <MeshRenderer>().bounds.size.y/2; //helps account for large and small objects
// Debug.Log("CurObj Mesh Min: " + meshHalfHeight);
// modObj.transform.position = hit.point; //***method 01***
// modObj.transform.position = Vector3.Lerp(initPos, hit.point, speed); //***method 02***
// modObj.transform.position = Vector3.SmoothDamp(initPos, hit.point, velocity, smoothTime); //***method 02***
var rb = modObj.GetComponent. <Rigidbody>();
rb.MovePosition(hit.point); //***method 03***
modObj.transform.position.y = modObj.transform.position.y + meshHalfHeight + hoverHeight;
modObj.transform.rotation = initRotation;
}
}
Ist die Kamera an etwas angeschlossen? Stellen Sie sicher, dass der Raycast nicht auf etwas trifft, das sich in der Nähe der Kamera befindet. –
Ja, die Kamera ist an den Player-Controller angeschlossen, nicht sicher, dass dies das Problem war –