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.