public void FromState(RayState rs) { // Muzzel Flash muzzelFlash.Flash(); // Cast ray int masks = 0; masks |= (1 << LayerMask.NameToLayer("Player")); masks |= (1 << LayerMask.NameToLayer("Map")); var fireDir = new Vector2(Mathf.Cos(rs.zAngle), Mathf.Sin(rs.zAngle)); RaycastHit2D hitInfo = Physics2D.Raycast(rs.pos, fireDir, 1000, masks); if (hitInfo) { // Particle effect var effectPosition = new Vector3(hitInfo.point.x, hitInfo.point.y, -1); var effectRotation = Quaternion.Euler(0, 0, Random.Range(0.0f, 360.0f)); var effect = GameObject.Instantiate(impactEffect, effectPosition, effectRotation); GameObject.Destroy(effect, 1); //DrawRay.DrawLine(firePoint.transform.position, hitInfo.point, Color.red, 0.05f); DrawRay.DrawLine(rs.pos, hitInfo.point, Color.red, 1f); } else { //DrawRay.DrawLine(firePoint.transform.position, rs.zAngle, 100f, Color.red, 0.05f); DrawRay.DrawLine(rs.pos, rs.zAngle, 100f, Color.red, 1f); } }
public void Move(Vector3 moveAmount) { Vector3 p = transform.position; float deltaX = moveAmount.x; float deltaY = moveAmount.y; float deltaZ = moveAmount.z; float directionX = Mathf.Sign(lastXPos); float directionY = Mathf.Sign(deltaY); float directionZ = Mathf.Sign(deltaZ); if (deltaX != 0) { lastXPos = deltaX; } for (int i = 0; i < 3; i++) { float colliderCenterX = (p.x + initCenter.x - initSize.x / 2) + initSize.x / 2 * i; float colliderCenterY = (p.y + initCenter.y - initSize.y / 2) + initSize.y / 2 * i; float colliderCenterZ = (p.z + initCenter.z - initSize.z / 2); // + initSize.z/2 * i; float colliderBottom = p.y + initCenter.y + initSize.y / 2 * directionY; rayX = new Ray(new Vector3((p.x + initCenter.x), colliderCenterY, colliderCenterZ), new Vector3(directionX, 0, 0)); if (Physics.Raycast(rayX, out hitX, rayXDist)) { deltaX = DrawRay.calculateXPosition(rayX, hitX, skin, directionX, deltaX); } rayY = new Ray(new Vector3(colliderCenterX, colliderBottom, colliderCenterZ), new Vector3(0, directionY, 0)); if (Physics.Raycast(rayY, out hitY, rayYDist, collisionMask)) { deltaY = DrawRay.calculateYPosition(rayY, hitY, skin, directionY, Mathf.Abs(deltaY)); grounded = true; } if (directionZ == 1) { colliderCenterZ += initSize.z; } rayZLeft = new Ray(new Vector3((p.x + initCenter.x - initSize.x / 2), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ)); if (Physics.Raycast(rayZLeft, rayZDist, collisionMask)) { deltaZ = 0; } rayZCenter = new Ray(new Vector3((p.x + initCenter.x), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ)); if (Physics.Raycast(rayZCenter, rayZDist, collisionMask)) { deltaZ = 0; } rayZRight = new Ray(new Vector3((p.x + initCenter.x + initSize.x / 2), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ)); if (Physics.Raycast(rayZRight, rayZDist, collisionMask)) { deltaZ = 0; } Debug.DrawRay(rayZLeft.origin, rayZLeft.direction * rayZDist); Debug.DrawRay(rayZCenter.origin, rayZCenter.direction * rayZDist); Debug.DrawRay(rayZRight.origin, rayZRight.direction * rayZDist); } Vector3 finalTransform = new Vector3(deltaX, deltaY, deltaZ); transform.Translate(finalTransform); }