Stingray Forum (Read Only)
Welcome to Autodesk’s Stingray Forums. Share your knowledge, ask questions, and explore popular Stingray topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Mouse Picking Script

0 REPLIES 0
Reply
Message 1 of 1
dan.matlack
294 Views, 0 Replies

Mouse Picking Script

Some of you have asked how to use the mouse to click on objects in your world -- below is a good example of how to do that. Hopeful to have a vid tutorial soon to cover this as well.

 

local function MouseClick()

        local mouseXPos = Mouse.axis(Mouse.axis_id("cursor"), Mouse.RAW, 3).x
        local mouseYPos = Mouse.axis(Mouse.axis_id("cursor"), Mouse.RAW, 3).y
        local depth = 0
            
        local my_physics_world = stingray.World.physics_world(SimpleProject.world)
        
        local my_camera = stingray.Unit.camera(SimpleProject.camera_unit, 1)
        local my_camera_position = stingray.Unit.local_position(SimpleProject.camera_unit, 1)

        local mouse_click_position = stingray.Camera.screen_to_world(my_camera, Vector3(mouseXPos, mouseYPos, 0), depth)
        local camera_to_mouse_direction = stingray.Vector3.normalize(mouse_click_position - my_camera_position);

        local foundCollision, collisionPos, distance, normal, actor = stingray.PhysicsWorld.raycast(my_physics_world, my_camera_position, camera_to_mouse_direction, "closest")

        local actor_obj = stingray.Unit
        
        if(foundCollision) then actor_obj = stingray.Actor.unit(actor) end
            
        return collisionPos,actor_obj,foundCollision,actor
end

local function update(self,dt)
    
--Spawn some object with the right click
    if(Mouse.pressed(Mouse.button_id("right"))) then
        
        local pos, obj, isCollision, actor = MouseClick()
        if(isCollision) then
            objToSpawn= World.spawn_unit_with_fallback(SimpleProject.world, 'content/models/props/object')
            Unit.set_local_position(objToSpawn, 1, pos)
            Unit.set_local_rotation(objToSpawn, 1, Quaternion.axis_angle(Vector3(0,0,1), math.rad(0)))
        end
    end
    
-- Selects some object with the Left Click
    if (Mouse.pressed(Mouse.button_id("left"))) then
        
        local pos, obj, isCollision, actor = MouseClick()

        if isCollision then
            objSelected = obj
            is_holding_object = true
        else
           is_holding_object = false
           objSelected = nil
        end
    end
end
______________________________________
Dan Matlack
Senior Content Manager || Games Solutions
Autodesk, Inc.
0 REPLIES 0

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report