Trajectory target Position C# Unity.

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Trajectory target Position C# Unity.

Har ett problem, håller på med lite simplare AI och försöker få en "fiende" att hoppa över hål och hoppa upp och ner för klippor men får det inte att fungera.

void shouldBeJumpingDrawAndDefine() { RaycastHit2D hit = Physics2D.Raycast(throwRayCast, Vector2.right); Debug.DrawRay(throwRayCast, Vector2.right, Color.blue); if (hit.collider != null) { distanceJump = Mathf.Abs(hit.point.x - transform.position.x); Debug.Log("Distance Jump " + distanceJump); if (distanceJump <= 15 && distanceDown >= 5) { float a = hit.collider.bounds.extents.y; float topY = hit.collider.transform.position.y + a; float jumpOffsetY = transform.position.y - topY; Vector2 jumpPoint = new Vector2(hit.point.x, topY); jumpMovementArc(jumpPoint); } } }

void jumpMovementArc(Vector2 jump) { float gravity = Physics.gravity.magnitude; float angle = initialAngle * Mathf.Deg2Rad; Vector2 planarTarget = new Vector2(jump.x + 4, 0); Vector2 planarPostion = new Vector2(transform.position.x, 0); float distance = Vector2.Distance(planarTarget, planarPostion); float yOffset = transform.position.y - jump.y; float maxheight = yOffset * 2; // maxhöjd för angle float initialVelocity = (1 / Mathf.Cos(angle)) * Mathf.Sqrt((0.5f * gravity * Mathf.Pow(distance, 2)) / (distance * Mathf.Tan(angle) + yOffset)); Vector2 velocity = new Vector2(initialVelocity * Mathf.Sin(angle), initialVelocity * Mathf.Cos(angle)); Vector2 anglePlanarPos = new Vector2(planarPostion.x + 4, planarPostion.y); float angleBetweenObjects = Vector2.Angle(Vector2.right, anglePlanarPos); Vector2 finalVelocity = Quaternion.AngleAxis(angleBetweenObjects, Vector2.right) * velocity; RigidbodyEnemy.velocity = finalVelocity; }

Problemet är att gubben alltid hoppar för högt eller för lågt osv. han hamnar aldrig på den punkten jag vill att han skall hamna på.

dator: Intel Core i5 3570K | Noctua NH-D14 | MSI Z77A-GD65 ATX | Corsair 16GB 1600MHz VENGEANCE LP | XFX Core Edition 850W 80+ Bronze | Corsair Carbide 500R | Sapphire Radeon HD 7970 GHz 3GB | Samsung SSD 840 Series 250GB | 2st. 2TB Seagate Barracuda 7200rpm SATA 6Gbit/s | DVD±RW Samsung 24X DL
Kringutrustning: ASUS MX279H 27" | Microsoft sidewinder x4 | Func MS-3 v2

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004

Använder du en dynamisk rigidbody? I så fall kanske du kan använda AddForce() i stället och räkna ut kraften utifrån avståndet.

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

@Roffe: Ja, använder en dynamisk rigidbody, dock lite osäker på hur beräkningen skulle ske.

dator: Intel Core i5 3570K | Noctua NH-D14 | MSI Z77A-GD65 ATX | Corsair 16GB 1600MHz VENGEANCE LP | XFX Core Edition 850W 80+ Bronze | Corsair Carbide 500R | Sapphire Radeon HD 7970 GHz 3GB | Samsung SSD 840 Series 250GB | 2st. 2TB Seagate Barracuda 7200rpm SATA 6Gbit/s | DVD±RW Samsung 24X DL
Kringutrustning: ASUS MX279H 27" | Microsoft sidewinder x4 | Func MS-3 v2

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004

@vallentiin: Svårt att svara utan att veta hur ditt spel ser ut men gissningsvis borde det funka att multiplicera vektorn med distansen och lämpig konstant för att få rätt längd på hoppen.

Idioter förbokar datorspel.