--- --- Created by 谌建军. --- DateTime: 2017/12/18 15:19 --- local FlyCoin = {} local M = FlyCoin function FlyCoin.new(startPos,endPos,view,coinPre) local self = setmetatable({}, {__index = M}) self.class = "FlyCoin" --self.flyObj = UIPackage.CreateObjectFromURL("ui://Extend_Poker_MuShi/coin") self.flyObj= UnityEngine.GameObject.Instantiate(coinPre) --view:AddChild(self.flyObj) self.flyObj.gameObject.transform.parent = view.displayObject.gameObject.transform self.flyObj.gameObject.transform.position = startPos--Vector3(50,-50,0) self.flyObj.gameObject.transform.localScale = Vector3(50,50,50) self.isFly = false self.g = -5 self.hideTime = 1 self.flySpeed = Vector3.New(5,5,0) self.currentTime = 0 self.gravity = Vector3.New(0,0,0) self.SpeedRatio=3 self:SetParabola(startPos,endPos) UpdateBeat:Add(self.OnFlyCoinUpdate,self) return self end function M:SetParabola(startPos,endPos) self.startPos=startPos self.endPos=endPos self.distance=Vector3.Distance(endPos,startPos) self.totalTime=self.distance/self.SpeedRatio if self.totalTime>0.6 then self.totalTime=0.6 end self.flySpeed=Vector3((self.endPos.x-self.startPos.x)/self.totalTime,(self.endPos.y-self.startPos.y)/self.totalTime-0.5*self.g*self.totalTime,(self.endPos.z-self.startPos.z)/self.totalTime ) self.currentTime=0 self.flyObj.gameObject.transform.position=startPos self.isFly=true end function M:OnFlyCoinUpdate() if self.isFly then self.currentTime=self.currentTime+Time.deltaTime self.gravity.y=self.currentTime*self.g if self.currentTime>self.totalTime and self.currentTimeself.hideTime then self.isFly=false self.currentTime=0 self:OnDestroy() else self.flyObj.gameObject.transform.position =self.flyObj.gameObject.transform.position + (self.flySpeed+self.gravity)*Time.deltaTime end end end function M:OnDestroy() if self.flyObj~=nil then UnityEngine.GameObject.Destroy(self.flyObj.gameObject) end UpdateBeat:Remove(self.OnFlyCoinUpdate,self) end return M