-------------------------------------------------------------------------------- -- Copyright (c) 2015 - 2016 , 蒙占志(topameng) topameng@gmail.com -- All rights reserved. -- Use, modification and distribution are subject to the "MIT License" -------------------------------------------------------------------------------- local rawget = rawget local setmetatable = setmetatable local Vector3 = Vector3 local Ray = { direction = Vector3.zero, origin = Vector3.zero, } local get = tolua.initget(Ray) Ray.__index = function(t,k) local var = rawget(Ray, k) if var == nil then var = rawget(get, k) if var ~= nil then return var(t) end end return var end Ray.__call = function(t, direction, origin) return Ray.New(direction, origin) end function Ray.New(direction, origin) local ray = {} ray.direction = direction:Normalize() ray.origin = origin setmetatable(ray, Ray) return ray end function Ray:GetPoint(distance) local dir = self.direction * distance dir:Add(self.origin) return dir end function Ray:Get() local o = self.origin local d = self.direction return o.x, o.y, o.z, d.x, d.y, d.z end Ray.__tostring = function(self) return string.format("Origin:(%f,%f,%f),Dir:(%f,%f, %f)", self.origin.x, self.origin.y, self.origin.z, self.direction.x, self.direction.y, self.direction.z) end UnityEngine.Ray = Ray setmetatable(Ray, Ray) return Ray