x


restricting MouseOrbit input area

I am building an interactive app for ipad. I have a machine ( excavator ) on the screen that is being operated by touch ( dragging rigidbodies and colliders around ), but I want to use MouseOrbit as http://well.At the moment, when you drag elements of the excavator around it operates the mouseorbit as well, so it all gets a bit visually confusing. As the excavator is always in the middle of the scene, I want to be able to use mouseorbit everywhere on the screen except for the middle, so there is no overlap. Is there anyway to do this ?I figure there must be some way to script in to mouseorbit a boolean question asking is the mouse within such and such an area but do not know how to do this. I looked at this other comparable example efficient method to detect mouse events anywhere on screen but dont think it is applicable for ipad

more ▼

asked Jan 26 '11 at 04:11 PM

richardzzzarnold gravatar image

richardzzzarnold
72 16 20 28

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

If all you're wanting to do is detect whether the mouse position is in an area (e.g. circle or rectangle) in the middle of the screen, that's very easy to do. A point-in-circle test looks like this (untested pseudocode):

inside = squaredLength(point - circleCenter) <= square(circleRadius);

And the point-in-rectangle test looks like this (I think Unity may even have a function for this):

inside =
    point.x >= rect.min.x &&
    point.x <= rect.max.x &&
    point.y >= rect.min.y &&
    point.y <= rect.max.y;
more ▼

answered Jan 26 '11 at 08:50 PM

Jesse Anders gravatar image

Jesse Anders
7.3k 7 17 48

Oh I see it Rect.Contains .... thanks for the tip!

Jan 26 '11 at 08:56 PM richardzzzarnold

it works !...but it is a bit jerky for some reason....

Jan 26 '11 at 09:04 PM richardzzzarnold
(comments are locked)
10|3000 characters needed characters left

I have put Rect.Contains into MouseOrbit.js in order to create a central exclusion zone, but am unsure how to reverse it. At the moment there is no input from outside the rectangle, but i want there to be no input from inside the rectangle. I have so far...

var target : Transform;
var distance = 10.0;
var rect = Rect (200,200, 450, 450);

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

    // Make the rigid body not change rotation
    if (rigidbody)
        rigidbody.freezeRotation = true;
}
function LateUpdate () {
     if (rect.Contains(Input.mousePosition))
     if (target && Input.GetMouseButton(0)) {

        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

        y = ClampAngle(y, yMinLimit, yMaxLimit);

        var rotation = Quaternion.Euler(y, x, 0);
        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;

        transform.rotation = rotation;
        transform.position = position;
    }
}

static function ClampAngle (angle : float, min : float, max : float) {
    if (angle < -360)
        angle += 360;
    if (angle > 360)
        angle -= 360;
    return Mathf.Clamp (angle, min, max);
}
more ▼

answered Jan 26 '11 at 09:28 PM

richardzzzarnold gravatar image

richardzzzarnold
72 16 20 28

You can edit your post to add more info (generally better than adding follow-up questions as answers, I think). As for your question, are you familiar with the ! operator? That's what you're looking for here.

Jan 26 '11 at 10:45 PM Jesse Anders

oh thanks ! wasnt sure how to format script in comment form

Jan 26 '11 at 10:52 PM richardzzzarnold

brilliant ! works perfect now!

Jan 26 '11 at 11:01 PM richardzzzarnold
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x956
x61
x30
x25

asked: Jan 26 '11 at 04:11 PM

Seen: 694 times

Last Updated: Jan 26 '11 at 04:11 PM