Ich arbeite gerade an einem Spiel, in dem ich Click verwende, um mich in Unity zu bewegen. Wenn ich auf eine Stelle auf der Karte klicke, setze ich den Mausklick auf das Ziel und verwende dann rigidBody auf dem Spielobjekt, um es mit RigidBody.MovePosition() zu bewegen. Wenn ich das mache, bekomme ich viel Flickern, wenn das Spielobjekt sein Ziel erreicht. Jede Hilfe wird geschätzt. Vielen Dank.Unity3D RigidBody MovePosition Flicker
// COMPONENTS
Rigidbody rigidBody;
// MOVEMENT
Vector3 destination;
Vector3 direction;
// Use this for initialization
void Start()
{
rigidBody = GetComponent<Rigidbody>();
destination = transform.position;
}
// Update is called once per frame
void Update()
{
DetectInput();
}
void FixedUpdate()
{
MoveControlledPlayer();
}
void MoveControlledPlayer()
{
transform.LookAt(destination);
Vector3 direction = (destination - transform.position).normalized;
rigidBody.MovePosition(transform.position + direction * 5 * Time.deltaTime);
}
void DetectInput()
{
if (Input.GetMouseButton(0))
{
SetDestination();
}
}
void SetDestination()
{
if (!EventSystem.current.IsPointerOverGameObject())
{
Plane field = new Plane(Vector3.up, transform.position);
Ray ray;
float point = 0;
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (field.Raycast(ray, out point))
destination = ray.GetPoint(point);
}
}
Ihr Ziel ist ein Punkt. Es ist also schwer, die exakt gleiche Position zu erreichen. Sie sollten einen Code hinzufügen, der den Fall verwaltet, wenn Ihr Ziel wirklich, sehr nahe an Ihrem Objekt liegt. – Greg
Danke. Das hat für mich funktioniert. Einfache und einfache Lösung. Sehr geschätzt. – user3623692