From 1416ded803c279bdae8140d3f726e3139f6bd246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E5=8D=B4?= <479813005@qq.com> Date: Fri, 8 Dec 2023 12:56:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BC=A0=E6=A0=87=E5=B0=84?= =?UTF-8?q?=E7=BA=BF=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Megumin.Explosion/Megumin/Class/Pool.cs | 13 +- .../Plugins/Megumin.Explosion.dll | Bin 115200 -> 115200 bytes .../Plugins/Megumin.Explosion.pdb | Bin 49244 -> 49240 bytes .../Plugins/Megumin.Explosion.xml | 212 +++++++++--------- .../Scripts/NewClass/MouseRayPicker.cs | 76 +++++++ .../Scripts/NewClass/MouseRayPicker.cs.meta | 2 + .../RuntimeRenderer/NavMeshAreaPick.cs | 4 +- .../CameraExtension.cs | 19 ++ .../GameObjectExtension.cs | 4 +- .../RayExtension.cs | 144 ++++++++++++ .../RayExtension.cs.meta | 2 + 11 files changed, 362 insertions(+), 114 deletions(-) create mode 100644 Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs create mode 100644 Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs.meta create mode 100644 Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs create mode 100644 Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs.meta diff --git a/Megumin.Explosion/Megumin/Class/Pool.cs b/Megumin.Explosion/Megumin/Class/Pool.cs index 77adca5..952c410 100644 --- a/Megumin.Explosion/Megumin/Class/Pool.cs +++ b/Megumin.Explosion/Megumin/Class/Pool.cs @@ -1,11 +1,12 @@ -using System; +#if !MEGUMIN_EXPLOSION_EXTERNAL_DLL //引用外部dll时忽略编译,用于Unity工程和外部工程共享代码 + +using System; +using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Text; using System.Linq; -using System.Collections; -namespace System +namespace Megumin { /// /// 对象池核心容器 @@ -414,4 +415,8 @@ public class ConcurrentHashSetPool : ConcurrentStackPoolCore> } } +#endif + + + diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.dll b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.dll index 86c83eb1140c977e516a679c9d23c8858adff816..d70e3d4bcc86d2d31882f1b3f7d77d1fa05b4090 100644 GIT binary patch delta 28639 zcmb8Y31CxI_CJ2_eaTDGjV5W+QVJAkOWLLdN-0|lEjtJbipr+43l0*XAVR5W*xYbL z0|XF+0^)`XR;>sqjL4wkf-r6%QxtK-1;qsg{D01QFKKa{`G0>hIrn_dIrp5q-}~-M zI@OD9)r)P*@31)fTzBNYWrJ10+U+0pSKUg4Xts<%IfVxS(Uek5PHfxrJ=pf4u2`X&ebfG z;mZ9hUF~(Q3kohrC*L4TYIi1otvkrG&u&>(TKiObxgEMQnTup;Xiio>=;o}P3@RCi zb_s8p6fxdDD8@r1jdkf4lS^t(XLXYB*1GMpNJ8&>n}ZI^ac6UNQP`N25goIeNVEQB z5Ge07IErxz$U+4a-}A=Di0E@6T7E_U+0LerCI8 zE=#*@6=bIc5KiR}b5BWKS-h*kYI=~`!Hsw7`on1CsHy6%4zAm3(Ms!9rwm9J%!>M`(oE;W)SQW2mKjpR)cA`c~{ z3dJg0$_Vc^wj!Hd0T^MePL>Yr;+SQ!z@Ds=NgvU zOdgO=kt=(HimK0rj5Q6Yq^fdjfaO%Nh=OVtqx;;KxO*DHyu|+&`Es+6+sUVg3zZw~ z!Dk@k9;^l9e-?y#@HwPakOUfaVMJz%{&yFmiIo_@eMntM&RxR)JQ81vzv{0<<*$P> zCJ!CQjL~s{OMCAB+;4x?ZP5yHw?)za?6v^)8<`s2;>DoJ`@i%Xav0c>?EnCIdyP`+9&*-+ zoV^aorOy7VFLsi4+Z(2@gAKkg|BA`kn-OQts2FbpRlNg31xqK%yCgYGl4|yncH0pE zD%ig$jTEdi`Fal$&iViE>jHd!?-+P+>I8se9)C^NHqWMSJd~rsqv4PUOZCWhs9>5^5q|+fjuRgsGCuK=6qSn37LO#e2&*)C$7`wW4eu z&HE`-iBj`)7@}0gNdWI>Aj*3xN{#4^1yl}|;{BWw!%|Bbi30_%l)Co|$gxTzUO*FL zz;s1G4b|Wl^u*=m8Ij^0E{l=JY2n)F4vyt8n$;0wPZ<$sw-g@wj}}MNFA>Btg3FLw zY|;E*0sB-+t|!_gShYjvI>h(<8k!hStnQND1$6$YJPiT%BF*~^nB&FD`z=yWhuB$l zO3bME4q(1v6sMA^PKO3|YBy*&YSE3Ft@6*_%*OKYpN%B@c#JJ{W5-tQDWCHG2Aa#UvJk7_FJl=E6&hNY8hWQ=V*BoYX=JuT zYqK3xCB=-V*rCLtPS^epRB;}}djTYyh6h#f3Z&Rk(XM~4;Gf&o+Z+o;{P8wsyOMXr z2(2s13;aR8e*mGakA`&>Is1?H70PH|N$H=OS3!13^J)-q^U~f-%}a-)KaUYIic^-P zDouq3b?V~zvlq=vxg!nN!DzTY8=0QbaC91qQxAu06SLgtl!1p!mBvJt`loJfEOPCqjxtg9VX&0W6%~>i(zEIeDj)7l&P4dDk!vGhGLoTWn;~{8r?N zIK=r*;6cVo>&pu`QoDqz#L?PP^(6>SgS1v-D=>qSCK9w!%+Q+7v4NgktjUIjPQ{AR zJ$@UQ?7Ytrjyxs76WLWHX+n?DRVA7GT>v_tYw2uW#(r)z{Mi4>k0!8HiE{GefIdd| z$0%$D6|n$uE*u8pz{FzFjZvEJeE@aOL&uXx-5(E?&8QXzjOYa?c=)SA&sBZLAyw5G zPPMARt4E{taOPAHKvH6|g z{mH1UuZaO7?Q^vO7kq;pUKgx3{3$?=SX;O8fBf->*+p0g1RjH(6=~c>+D-mcFh&O5 zpNb6GdhTzkqA9p48iXbrps}GU(nw6bsw$chORcUd(ut+!XxLAiLqvy%7L>l!L|V*; z=$62q4o&dzLl)R?*#Id+ivejYjYmOguWcfEZybsxPdDx)?EDykBen8oz(-@pg@va1 zUs|_nY#s72}TvA!Mx0*F>Ln1{<@@%Q`(*`Mogm zHPvVR4zXeD&4I`}8_NqG5S2fd4C3@zv6`4+NHrJAj)M4-3~%;XZAq6$;qqX~XtoGt zmn4<9hMnmPo3j@O!3Z?gBr9!MqCe_6>un)s#I)=Z+XTagV%ovr0l%`OY3IyF+1%}| z0^Q#zk5O!2S<9k7=Y69jOJ;`7l(++U{&H$b!;EMBuD>IH^l_hBuVs)f7h8|`VjFOd_c?r$Di(ql++S6IX#_uG`4dfKUb zw}(FO(Yn|&f9~7;>HfLyPM_HcAR-sd6xeCQ{mA7ez zr9#Hpee>=9QYw+2Hx%{GKqViV7#doh>gz#OG;S}O&U%HbnC7y1dp3xhHPmxOd9TK8 zl4iC^vuK;7H`rb%zc!GK5rPGQp9pZCK-8*f#?-F7nNoVDU(EIGXZ43zVCUV|g#+$|la^ z?G2XB#C<3&hORFde?LM9+6+rh0n)(;t}6RO+V~7-W#c%zX7LXQ75B~!42ha){(&&| z#T%J4{~&T$aTz(liC{2NUGop2#8YuO68{w-rm^lHN(#iM1MKw(e>wbW{$XTyB}leb zc@^=)L1OY+qB*Vx7i;TWc@0wIn#fjpEt!k}fqo>C{11*NVA1sKgm=2 zr$qnsLqYy_6THrAX$!p_LSV_M9R4<%Rh`kvkTX`PxtK|<~O6=ePo*WQ`z)jKP+uwV8Ns&_%`EX{() z*$VLU=@>H`47V3EJb2ro)WiO=)S7n=%+*DA<@C@`{W=u?IkdGw54-#%#nr@<>@9%) zxgf_AD{c*q>F>?QP4HhdixB|NqCQ>s257h&!M68r(UqHtM>m>y9(?60?|dVvMB=k4 zFQxM10%B*#KYR@V~4WH5p>(r=jfJqbZS|_Ady1HJ~u>e`j;6rj6|T5A5)N z2*V>LwNbXm2Il8gp%B#F-rIk_`LKxR!HPwYdyGjF zxm$|yFNK-r@f{5?@<~|6ZhXFzzKitN1*)c%rbr_yABM z(9pa7jK6)f$2)% z{DUZ)?V{(+(22`>1y(^)MdeTxVPeU<+2+PpO+AB4C8t)g8hTpM*C5rghADdN6{EP< z){-tS9sTwIxLBJ@`PYH*#b`d8X6M&1(5;6k|ERHR;T()zE3|2Fi@<2=)Cb9fu2pS7 zs`QKcMx+%rAl^+N*)$S1gQ0b43#GJfz*nP2fRFz!DeLE?YZ;2$IY zagf}={EBUcjP*|#{F9`Aiu92&2)|DgrpU}dustGRW`4ypzz9@}#Q&_pKS%uYAdMZ> z5hh1q0$iyVA`)hzo_0`f)6gXlPOvOO)UM4>3Xbep- z^d#*{$B+U$RldyC=;P0ZZH#W^2ZvZ&oF~4^GqABc*3xv~V?DpI?3;vRyj9^`kHKg= z?#;INS}SA@4H=%=%@hip^JAP=4G;BuVTSB{{MVhj583TbUHLmxc6+1j8-}N<&Z>6D z@b{!F4=umO6ITwCWhjHh6I|^x*R-&VpdxB5OZ?vg50tsftjeY~f`C;&ZwB;xtQjBat-ho$5?=KL+>9eq;aK_y|#FqNlj$BlX3hBVZ4 z;?t_F3cWG097%1$q}5hAvi9Mdp4OB{g+@*vE^iM#Io&7E*B+f-D+B0}`!zK1D0DV4 zxCFqH5xoIjL1MHeJqDK{rTxcm}5S)$(m_ZJ_J(60OzDx9t8P7D`*y;bG+;JoX&^6Nq4@#6hKr1U(p z0cn1T@?^#EU7501{YZ|D8#8Q?Wq1-gK3-LlG)^s`rkW|T>C4kFCTm{36jc@Bz zC0)JomEG~CZi{Mp(eTR-ofhw%usrU*RP4PA!dxL~DHaK0!Cj&$ZnR{vQ3}m_H>nFM zYLHZKB0jP_6l#7Op1NZEM6cI23i>(m>GY~u+5io;y%k-?$ z_~1t8Z9eIeqT#rG0Tty?%)F&4v(Ho2d0)*^yjvL?6yBicqvIl?(A5=r&3N~~A(6I& z#;=4uxhbJ0v)5p%)jl?Ryvp`KpKtTxf*{5>RaG{X!s78$CsOB8C*nIh-VLF`xt*QS zUP*xwq#Hx?=f3M|Z0putI*hNswfIlQx_4vkL$~&$FU*{t*HoUZ)#vw%0T{A4#aqf_ zDu__gsxgS38}RZToBYzyvc)r$RfR4tZf1)?sc~%?%2<-3VpOQ>l59%GEyLA) z0ToF)nLQ7*6sP{)jJ7elQd}mhF(BW!k>yq5D%Kqax=RcfBN)8~^mm;0Ml;$8bU)5` z*E8A^5EQNBI7%lvajusKRPRwC+4&k=~&1JL@mQRWs#C%3m zS$Bh2!07Kl&x>(lv0(}HBG6J9M6thQpA*C~=mLr2dxjH5NIIbOpfEu(Rcv6>!hRI~ zZ{iU~Gh+!&6VI^I4>Al?%V=n`j|%n+zu3X3FIUMgb}_nv(G2lVMpIz@+eGy!454(^4QpYb z=8PtpmMs{4V_LRkbON15`7#)JOv`*mAH)O8rk(HKT0Cc2K%{id7i8C^8d4UFb> zFj{Raqp>C$$Ee&y;~9;^nt<`YTTEa$hv9B<6QhAtTKi4)>M@ug^@k!2FD;etSktotQKh?m4yc)X*0-^CL8S|n>4 zEU!Yop!ila(>6huf(SyK70orRRiYSYp?jdSqJ^f4q3oYd@MqDA-CV`!yvS!aU9iRs z6Bk7XT71MTd?(^&@rUSG`$~AU7O;v}I&Mp}inBeQ2YsfHXnNkZL@9=NTG*s0^n9Z` z#aqe5@66i_`OdtPiN)gm))x{xi0q_HC(!`YwM>6;O5tuAhvx92MQsh6dVQnB;6g7kcQXmdQ4ZR@q`e=9=ieoS%K=vM9jtl%x>7qT#79eWHj8(?^an zGK!-1eVqN|Em8EMv%kFGMBCd>a1M}qu^WjO(DkgR9rQu{ha-x$cu$lnbSOM!m(4U+9~0ghG^RM5-ias$Z+O9(w{>ZsV4 z%LPNZ)kJ=g6hq~5197~ea>Gz8P}HOpaH!m7C^_Iz`EnHf?i(t-63hBaESuwM6!BNVX)l;&666LZ zr#?oJ@KYI)tqV9OsRqE$_rfA$ss0s4Cs2fh|wy$>Tyl} z4e~xi$L%y$t}&2(a9O5ntgJCmz&@g^0PrzW`F&YH8z-M(6tw?VX2mIXm!X3js~9hR zxZ2kG!xG>Y@!;N$^K&GP@t`e<%-EwEi$tF6R z>(8GhE28L@{0bQ`QS;aZKzEy{*s&03wTVua-kCpJKE%ivz;ooYjP}dcK8a_I9~mtb zXLFAQTF#Lc+)+~5&gL%9zeRcp$;G0#SBhKYP!ri=3EgU1HjiBe%hjgNOPz&u%QKpr&nWwn9q^_`C5$>$Ce zwPv)u!O}io?lF*fx1i3kK(?n>kC@DP1<&PI$uTBM2MWlgCQ?22S6Q!Ft)j)V1pTYtn#x>PdOnMEyz!sHfy72I8VUEq^kQJ-4^;JS{IU3fepLP6X1YazOjof-KK= znZPJ$zo}q=+AdS3n)}~1zQ;Y!$SlK@ojxP4h@t`N8Ch*0(XUjBT4}k-s6|~nLL&&t zrD8Um*2?LI&Q1&Yv+@>3K|3wv&&p~>r*PHMqu@Dt5D4`@C8-ggm+k*XPK}0oQ66Em zPY%S4-6rGx22vYSQk7qYHM)I}F5?*e#bw(Eznut}&4P z8sE5rm*m5Q0^)?cAHDsO+-@kv!5;g?%ko7=L3Z=9{0AeW+%L;lO+>}sBM+E}`gfl^ z&S;fAtK`OlSLN4?3@@+BA5BZD{j2h4MggPt`{l2uk_O`I@;650W@f<~(mvg&Vb@-d zd)|;4jDo_3^V%D-#L#g;-;jL_WS^RTtmPZB+C;Yi9h8d=B<@a^;!SzP&prd3@lAQw zfTGYfx8O~gIKv2dDtA%ATXLF-O7a&Kye-!li1WQ8YZ#q!Jdk))ydxhqQBC4@>pSup z6Fm&wA^D<-o`CLxPk@^2<0ryt1K zCZb}0C>NNBiv6Kn!ib8!x8NhWg^}U&sN7~+QelqDXHE1(Vqm-VsN8Kra(Ya@Y9exa zOuog4oW5J|vHXUS;S|3yz<(Ma*;ZR3XurHWeY+Ju24LNOxitOLf)i16L;80GCmZJr zSn&OR(-Z^4{&^HFP5-$7->Nrtlo8*LXGGywTktJ;Q%Cu}k0Q$VLljZIpBdrsVLgh6 zpw2NBCznnib58wFa|Mml2n}=_&o9ICPnizbGJ)$eF$h#0l zuN7A{LPcF~&%1#0hhb_hbghYrnpy|*apLx+g&EAM@ImPTl8 zo*qRLnVgcZafm=m7HO5$x(E~H##mgg5rx^MR85>e$psSe1E{Ss4_dTXI!%=>I#$| zMIl$uxaLvxC{T+CvVNP3uRk_Ib&ggM6n{VVgVs^B5&Holj=w+Nn{!mOi7Jb8wp$y} z%lU6OGNZZ!`MVuiQM9|`V zA^v`=w?_m5#m{TL-&7J>+;?{pLsAY$1oh)?o*pv5D6bYs#id37e#@BQLP%#{mnYGiy|vMA2c9(KENAF{x7iK zO3x<|xZg^T3k`@K7a9;f0W~0c0_qS6k9?1N3ZsZD8_?Tr4&`=?>VC{Plv@-*fq2#X zsOS`d)^y*mdKASw(W6}=y7-#hM#y?)n{P83bVJJnTGyzhr7^M=m0LxFF1O85(Jg8j zC@W|T2N!I&HYjNW>K-+v4X6RpMp6>h(XQ5jXdfw!>S!NnK=(q|BdS|zfwD*K$NO%w z1?*WpkBZ;as=rgmEW#RpPvURtX-22yBN#vz)Okj<8C_m@L0Rr4OWF+vx-KfWf$ZmV zMiu^{nlV~zx8@FX{h>0WmRN4Jt%Pu1yt>oGLZQ`~`2uadHv#TsxWwMcI|pcA)HGNq zwS$H!@BLCcVrJZdZjstCGv9&S^|4a>%+y`q`4+d*zA<&TbiTb%X+IO<@XHD{?V@3s zx*>pvZB0vDPIWpVx8iW6X(vro-0C)|X{4b^nB4yULW}kT>x>6Xt9Fr*u`ydU{XVi> zg!e_mlB}AW(NcR|_snEnYi8)|hq})O$~1Lj3j$dlo8~i>bUwFfolNB&9fZfOm72O$ z9TI{1nY!&|o01*c<)&_bStZc5rfwo`$6~Y_Or5{Sc593_#X#cWcEgfmwFQPHwdmC% zUc1-K*d=X`CteGisCQbpFkaheW~Ad|f_9`KBhax+&`Hx$YBedftKa&{qIP;}7atyP z3-zggF|_YruG(Ke8f>k-SU=v9G%W|;ix4;FCnjp*mpt@~xU*$w%x5=+PJZU9{rSIPn6bukd1LEtY#IvD9t@gBZ` z`4K+H@%aRwQ}}#^&$qa+K84Rm_#DR%)4#&!BYZx=o6c|XIgZaKVj_O2IuXC|n<(DI zmG;wehWM?Em;rDv7K9bZumXlFk*VcG#Dlr92n9^Q*a_^6Pf;Ty2N1YxO{!q$~0`Nmt}?lCH?(a7BAm z9JJ81oTuoT$|8vd72RxFB+)oYcf&_4be(y`LRadu*=Dw+o1{3C(xrTyq)YiYNtg0* zk}lY}qky zyLC2)KgoelBJjz?(-tb+X%ttA)0U$hkLo8mz-bHFpSDnO&sylFpDLz1<0Rdl9%1MSuO&jjG853>E@^l`R6oUKUGyN4o4?;eUIy?ZE9(^-(k*9^r0dKgG^4~Db_!o4>DhO%mEKYew$fXQbCxc>Q*FcHb08#i|2Wu6my(06 zbl*7G+BPjP9Do|I#`1C3D%Th*z1A3GrPmsRC2gjIxnI8&8;TRfV0k@`RukcFyOroh z*I*7j4g7A$7`}cS!;;zTXEytp&71OU-hF3VX-l35o7I*YZC~N*0auN7dyf;Y*}NT3 zV;9rd#R7J*fL$!Mj`kka7qg>f%rB7ifWE@ysrCzGp|4Yu9cn{y5BCoBV`*Ra3bubu zsopc(uc;U;(Ce&2do6NrvC@sfHtQ?i{UWf<1XQOj))i3KXan5)#X9RNIqQ+(kMbwo zi%~x*mN8wybRE-Yt%)f+)U(!qdUmMA@{huA!P9NpvsSuA+hy(H*r9e=^I~^H4iENS zpt~J4Vr=UxEH#$Gl5gEjaVwUyU({H-mi**yDq~v{Us&?Hdmoo>9~Z8vtm&4QbkIsK zgAQ6_5(a?MdVd7&R$Go)XBKPLljzr@$oqQN$|R|M<6WHOV2W?Dbbca$${|( zFa3AbRBq|AJISd9W){~cwbIi2)Z?w&9B(}?q2K8JL()`9H(Ja1DruRdE2L%IDW|P; z@pRTo8_a2I|1Q12)B1j%A7jp2=>&b2+vcp5ww<$9+Fu508;aM*p0(1RaUM?&yJ17S z$yBQ)P`Y27wbJ`Bi$1e>t{$gTJ(6^4x+I;NE?uX!Ax_`gYrnAQG@EBy9j*3@d1e^e zvd&s*13GJ^jpwwLZo|%6Y4bXdPONjBXUj~T-p*y}^cF5tr%Ngt!hswBdR3RH)2lj* zPCcEeQ-LydD*IHNg!e;2FZD8YnqZka-FIc`bSIRl(>XZ^M~UERqGsxJIh6!IyB!w2 z(6!xqrx~8EZ8CKldYL-ipJnQ}aSDia+^|FksCAOcMPs(oRg zY&wlir?FxZS#3Ia_y^9tBTbvzRRx>-6q%u}&NEGDuciw#XyC zY5EqfjIo@g-!?1bvhk9SLk%$T&L4Pa|>&?m~uL7ZqezGxsDyJ zGaXTvtz!=>*m50vSYdjgkXv*LwuNoB=;UVw``M=FQdzdKdK+ik#_Fc>*QP(FNbP6u zg_NdpX+JI1q1}IOE4I#u&$Urf3mrUHtseJ;F8^&XCF_2B!Jd+`%SNpp8uR->9m@?C zo!Wx)w@Q`h2|aS5ec+&lUiBWtPP8K9poL!bo;Tj(S?T0D+=|z}86{{Y{K!wz8oh;Y zGPm&its3pe-n%kDOJB+OP+i^W^^6mW7O4~JA9#k^W~Ua|W~Y_mtd(9CpS98`KWn9z z#b>SbviPjkN^grpV=nfR_k}iGOaZOC*sl0K?EzeS?y?WeTbsJeenk=9kfY5L#XftF z!bHzL``egN`|NZo-K%wQ$7Jl)NFGZ6yVaStNlBzy{B!l@()_S3};^5Fqij9}3i&ODJ7Q&>KY@`WL z$!uM$Ru<58$_Bbo;Wt!bi;4$*L?wc5Q*O|w)m0uO&#I=NFR1ivyV%3w_i^|G9R47O zKf-1IfVIb1Td!Ke{v_Lcp)$drRym;Ghr4QWPB|J|%#~5VUWCcZowRIf1-(@fm11-71f$GqH6)Smkl$9&3#i zZ)Huez9JTuEU_LI6LTI4e`=TA^+kHEI8hRA?~pB0_vw$rs9wJt^n`v`)OJ6?e0Y{a zW{#R@BW<;fw2N%D;`@?~%x|_G7V)KCk*d>`}m%%5QTDO(CVd5}ysd#vnR z8ve>5+XoieVwqn{Qmb7Kemox3nlCjK>V>*E)LFN}RzmfUP z%U>hOv{;$Wjc;&HPekuYnbk3DiXNpOtl2^ zmce`()3Hp035Ui0?lsKsWm=zb_h^I^O(=6KrsYh>F%2@^$h3y(9;SPl)-yf9R3vhE zrmdKkfrg)tl|I)5d=&=+$VnD=IuDCax`)rk%H=H=c}S9(LZh+|(+MdgnaKR+@SAb6 zO}t2rm7f;NR8nYl7vf|G*?V95VNsPMo0F`Z={TlArh8kE`~*|klK56k%bAXA$!!px znILNd)!C%p$aD|WdZwZ+$upSl%{eS$N=|@&(p~0~T;vfQ%XAOZ3?E6VnQmmdhiN@i zkxyEgPku6(uV*R(1*FJeTE=usyT>8f$MhsqOM8-Jwm&Q$F6{%lt5g)$ijkemIuae* z(Ji0vT;Gvw>N}D*QAE5bV!jj645sy+V!@Xc6Rj>L`Nm=%dV3hu8?*~4L|392Ov?d8RZ;?=~$-K zOeglHHEA)^Ell?re80ouP-%TX$|d@9c&24c$1<&E8s3#CTf|Mg;;{I&bPLnE)=ueF zB^$?4wmnQU#&dY48=3B5TF+EWAZ_)82S86wpuP-0=$5%H>nD<2Od^`Ww2bLSrhCF~ zyXB#)=Oz9#@o-|k^A6``r*OGl<6U>TcDW9_es)>ivF~lf6K2Q?s^8`kB<$)P0VHZ11f{@=eLI7Z%18@TN!*`9k(=n@cr|C z_}2MAe7SrOe%W*xzB)b_KfxY~FO3fq<8h}m5mu8yr{Ldo+~dr`ja&t;ab}B|Vh+$P zKy&f$R{WbM7Kr)y#&czB{E}pWxKmV#dvMwGcf2CF7gu@9#S(EJ-ZI}0lTdiON49l7 zFV^5vXRUZqJb-Ujt`{%Yed&>p%7D!8-%*J3d8MEq)+EGz9&t#Nh8N|3Mt6zWuJo9_n`9hPy4bc{7#xYaK&kSzcf*N1FCRG=fs^} zPf)w)tXzH!$a_IAllOrRmLbp)awX_!83w&xt^pk<9{`;w*CX#F zP$eeI4d8DCRbq;)0Y4Q~;fD&F!OsXFQDUZi2w)bd!cPbu2Hhwh1${(54*8>?3SWA7 z0{nBJN<1&00$&HJ@biG};17T*@tUj!|2n9`JN)NB56L=6-UU^72fPFHQ@IoL3%MKg ztPH#i^-uC;fS=`F@V|g6@vD3V{5eo1F34BGUj$X+5BX2p94nf(xGD|Hx>*6Ls2+o<;gNHW!jpjqlDC=T$T9n`-;3)KnG zj_Om;p6WAXD+5)cTzw9{7bv<$eF?q~s1kkE*WmksD$!qk1AYLg5(CwDphMIdNG=D( z9|TiBf*%Ts^X+i;6TsD=N{m&%fR0n=K*y`!L8q$=pfl7Tpfm9s1|=$#20B|=L2pqu z(7DQiUq##ss_-4|Sn%^fm8ewl;1_@@QKg!IzYP>`N0k$NHK+<-l_Bqw_VCvkviay_ z4cE591FA%d))jmzDB4Wx4!$)g+DyY&c10#Anhamql_DEdiMCofcrU0DIa+VIq_KHH;F$b zraL=3uXf(#oa?;b`GoUL=O@nZoLybzu7$4EuE$-^y1sRtcRAf{-1FV{xL3JfbpONs zzPnS>h@`1WvyvRi>B*CmcP77?{O{z`$sW%V&t}hlPeMwoly)gyQp!`VNEx59Fl9~3 zwv-(ydsALZIh4{owNvV(ur*W8)wX7Q7!G90hdZ+qZ`k0w+<5Z$@V;AWOsHO5$||*%aln)Z zO?l9iU#l50N1EwqGri7CZ!ptwW;!XNw@|HxxXxl!&Sqsl;U9D5UNun*Kc6RCmtCvH zHhELTHd&%w=DZu9_1a$NW_&I{u4z}gM`(R5BeYMn>+u~O;vY1flo3x^xYP$L<^NtJ9NtQkrsC>tzFq+1}Z-fN`6 zp=LVVOh+Jvrz+{3Va*V(>O--~uHf?UviWj^+!+3BzRYmIL?%EwBAieu$H*Dszg5Z> z0do4GY#}M#2Pbhz4@i(26C7*|NE384(lDUBCyfGBeTa5(mrN704a4%nb9YGjATG~MwP5m z!MM8bs$`9lMdACZYk= zrqshQZIrMnVZ(Gp-A_SWluV_5HVh+4#88@sFu>nyU>mbH%pCs(HKF2BIj1W~X?Wvue096}V8nc&sWa2+cT5F4 zjL%SJz(fjz8Om%mG80JwC&ErIyf>Ywm#E}uLvL~xx4?u}v`}DSKsK8to%<;`jQu(}HT(vh5ZTQE%Dwe#IP-4VB@h%) zSZ&f(y&Gk%m?SYMGUamy=b-8a6K_*kvLZ+ik6I?v0&_BKRJwU6d=*M@AEo@i zV0wab1(&2JIB;5p1fHnB&SG_oF$OqmyN*9ZMFtR@Ag9Ez zcRL;?5)zyXx1$HsuTO7dYmxx}L41}_3NHxlnnM^o3gDV!6d{NrScObzZWd_?aH`Fb z;0l(zf_Gx)N_SQ7a0Tyi2Jdstp}j14Pk7ipGCP3nfCm|h`YRQc>Ol-_oWb?HNMdE6 znvfJDn9~HRWrH{d^A8QxRi>x&z-JrUm>NuI48Wl=6dr1cx!|mRR3-;#WihkzFf@5C z;zKS9gH5TCk@GJk?5UAWT;mLIK?RGW*~jHVDJ*D!IXr3tk=kN}QXgVFbPG*)%~86J z(Wl26HRH|FqPv0**^Jqw+w_*fN8!q5)6x}E2g#Ar#MF$sH7Zf0R%Fbpl`FWCnmTwj zZQ;~r#;nAOYI3{+1dB+EWx~+%;66{gbvn1t6EtpWFgMQkpn*zkFrSvi@W6Xz&am@P zKtM+LUUx9xA!xm!^^v+}A9~ElVR|7;YDrke^V-^=XYs=G;Y0Vz&P}+77t#8F3M>*~ z?{e94Xqf?n<{=?Cz{G=*Hnll0w=ia_=tDEX6%5koO?PBq9t0C;?4q4byo7L_<9_K; zfyOz~dCIwhPo!hGkted#GgNwd^Yk>XKg}hYD?CpU5}K#m(_KY+h9FU7@&y%Ep2j$V zCu1;yD*v&TkdV;CrZqSD@PjL4zT6%@xI%s$GYr|jqy=MGxOSz?NqrUF=QPG9*11>F ziWp~L!e>{?oeG_>eU;2_i}r3|Y#By-^LYsEPAN4jDbZtf*03y=a#FZtwJeb%>gKJM z>1xOxv>xwewEWXtI4SK3HY=JC5obDsH@oKO0>wIH=e6}_#j|#%Jq9CjCYD#4%(MVm zbd1dKCu?Pe`!zOsH5Px_Ie5rf{Tvl|$^&w6Yjzhrg!(llk4Td#g(KG-!(sTn2joX` zSa|z7*&4}_b+QPFW4-)Nz8XHaUcPb7tEkdBMXiDCISp;&nnOqAMvawlsoot!!@f}l z=b~GU^_qOurEQR%RAJCghX-RTif{{0#u+jwu-)+Kf;S7y)rH@OgEi7K;5^lS43V)! zCK8!KWEznfL}nAYmB<`El{G3UM>6{L-!-yb8nzo7g+w&6pGk|t6W|tE!uY>$xi&7S zqB}q^eD@}K%ME`TCmbNYp>4R#n7NAvP?;B#(^tVQ8bM(e4wMNbK1t*Y5)VNBOPVS? zcC#Gl8H0h882O(Q{|^HgZ3~BoU*0Tp+(V<~u> zXmcwaUT1qqwwD3(V3|%!^a!a`N`?jFk^y&hM3HPPlYcVDt z=I%j9s_Xb@#Lsxq&Zag@q^9828%f!XQ3!p8ttfa!ljSOf5_mf$K(_& zH&Y*zN=!iysk7@d^n0P@lRB3CB1 z6V{8on6IceG6eU6qWH|emWZ5}G-C`4jKy@$lX6%VwU;5})gy04#< zS+ec8apO97>fCu!(fEm7J5C$mDUeO~Q9bk*KYS6W^<+VzVcGA7mRYrgp(Ungfj8`$*Hs<)(#AjDv!vs$ zFNRFJV)Z+YLnmHc`qGGBlV;rCz4YK2o4os*CwkuKANJ(h6#&N z?QXyQsEnKDm_avoAMU8z8{YVW9Gdt*m+Ke&yn9CftqHyF7#))_d({qkV}>dG=VVg| z^YY_ATYs81a?tWyw+DOH-M&M{TZW7i^sh5s;dREpN%%h{8jpM0uA(Du&c=Zj;>F$s f$lF8O0cmHv;3Mq>d?rCMzEL{9?!<1{((?ZSjals{ delta 28704 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 diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.pdb b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.pdb index 6d4bc056c481aad2ab9c3f8e59546cde75c0ef9a..347b5f95301290e5a8e193acd73a661efba887d2 100644 GIT binary patch delta 10885 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 Nt)zI<{o~`M{|AsXwY~rV delta 10925 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 diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.xml b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.xml index f87b3ee..44201d7 100644 --- a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.xml +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Plugins/Megumin.Explosion.xml @@ -30,7 +30,7 @@ - 使用缓存key实现。 + 使用缓存key实现。 @@ -120,111 +120,6 @@ 为每个节点分配一个位置编号,位置不同,相同的函数成功失败后执行的逻辑可能不同. - - - 对象池核心容器 - 参考了UnityEngine.Rendering.ObjectPool,并做了优化. - - - - - - 从池中租用一个元素 - - - - - - 将一个元素返回池,调用者需要保证归还后不在使用当前list - 虽然调用后list被赋值为null,但不能保证没有其他引用指向当前list,尤其小心被保存在Linq语句中的引用。 - - 使用ref 来保证list被置为null,防止出现数据错误. - 安全检查,检测最大保留个数,数据结构检测重复元素,有性能开销 - - - - 自动归还句柄,推荐使用using语法 - - - - - Disposable pattern implementation. - - - - - 使用using自动归还 - - - - - - - - 在Pop后一刻调用,如果返回false,则构造新元素. - - - - - 在Push前一刻调用,如果返回false,则不Push. - - - - - 池中最大保留元素个数,默认为10 - - - - - 不要继承静态自动,父类和子类共有可能存在隐藏bug - - - - - - - - - - - - - - - - - - - - - - - 线程不安全List池 - - - 内部使用实现 - - - - 线程安全List池 - - - 内部使用实现 - - - - 线程不安全HashSet池 - - - 内部使用实现 - - - - 线程安全HashSet池 - - - 内部使用实现 - IPAddressExtension @@ -884,6 +779,111 @@ + + + 对象池核心容器 + 参考了UnityEngine.Rendering.ObjectPool,并做了优化. + + + + + + 从池中租用一个元素 + + + + + + 将一个元素返回池,调用者需要保证归还后不在使用当前list + 虽然调用后list被赋值为null,但不能保证没有其他引用指向当前list,尤其小心被保存在Linq语句中的引用。 + + 使用ref 来保证list被置为null,防止出现数据错误. + 安全检查,检测最大保留个数,数据结构检测重复元素,有性能开销 + + + + 自动归还句柄,推荐使用using语法 + + + + + Disposable pattern implementation. + + + + + 使用using自动归还 + + + + + + + + 在Pop后一刻调用,如果返回false,则构造新元素. + + + + + 在Push前一刻调用,如果返回false,则不Push. + + + + + 池中最大保留元素个数,默认为10 + + + + + 不要继承静态自动,父类和子类共有可能存在隐藏bug + + + + + + + + + + + + + + + + + + + + + + + 线程不安全List池 + + + 内部使用实现 + + + + 线程安全List池 + + + 内部使用实现 + + + + 线程不安全HashSet池 + + + 内部使用实现 + + + + 线程安全HashSet池 + + + 内部使用实现 + 从原位置摘出来并修复前后链接 diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs new file mode 100644 index 0000000..3c483b5 --- /dev/null +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Megumin +{ + public abstract class MouseRayPicker : MonoBehaviour + { + public float maxDistance = float.PositiveInfinity; + public GameObjectFilter filter; + public LayerMask LayerMask = -5; + public Camera Camera; + + public bool TryPick(out T result) + { + return TryPick(out result, out var _, out var _); + } + + public bool TryPick(out T result, out Ray ray, out RaycastHit hitInfo) + { + if (!Camera) + { + Camera = Camera.main; + } + + return TryPick(out result, Camera, out ray, out hitInfo); + } + + public bool TryPick(out T result, Camera camera, out Ray ray, out RaycastHit hitInfo) + { + if (!camera) + { + result = default; + ray = default; + hitInfo = default; + return false; + } + + ray = camera.MouseRay(); + return ray.TryPick(out result, out hitInfo, maxDistance, LayerMask, filter); + } + + + public bool TryPickAll(List results) + { + return TryPickAll(results, out var _); + } + + public bool TryPickAll(List results, out Ray ray) + { + if (!Camera) + { + Camera = Camera.main; + } + + return TryPickAll(results, Camera, out ray); + } + + public bool TryPickAll(List results, Camera camera, out Ray ray) + { + if (!camera) + { + ray = default; + return false; + } + + ray = camera.MouseRay(); + return ray.TryPickAll(results, maxDistance, LayerMask, filter); + } + } + + +} + + diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs.meta b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs.meta new file mode 100644 index 0000000..03cebb3 --- /dev/null +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/MouseRayPicker.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1594ac02f43f1954d925be683f68e0fc \ No newline at end of file diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/RuntimeRenderer/NavMeshAreaPick.cs b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/RuntimeRenderer/NavMeshAreaPick.cs index 940535b..4f49c92 100644 --- a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/RuntimeRenderer/NavMeshAreaPick.cs +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/NewClass/RuntimeRenderer/NavMeshAreaPick.cs @@ -16,7 +16,7 @@ public class NavMeshAreaPick : MonoBehaviour { [AreaMask] public int mask = -1; - public LayerMask rayMask = 0b0111_1111_1111_1111_1111_1111_1111_1111; + public LayerMask LayerMask = -5; [ProtectedInInspector] public Camera Camera; @@ -75,7 +75,7 @@ void Update() HitAreaName = ""; NavMeshPosition = null; - if (Physics.Raycast(ray, out RaycastHit hitInfo, rayMask)) + if (Physics.Raycast(ray, out RaycastHit hitInfo, LayerMask)) { if (DrawRayHitPoint) { diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/CameraExtension.cs b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/CameraExtension.cs index 4fa2f5b..30966b0 100644 --- a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/CameraExtension.cs +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/CameraExtension.cs @@ -3,9 +3,28 @@ using System.Linq; using System.Text; using UnityEngine; +using UnityEngine.InputSystem; public static class CameraExtension_BA2750CDA0DB4FDEA611922CCD6F7C3E { + + public static Ray MouseRay(this Camera camera) + { + if (camera == null) + { + camera = Camera.main; + } + +#if ENABLE_INPUT_SYSTEM + var mousePosition = Mouse.current.position.ReadValue(); +#else + var mousePosition = Input.mousePosition; +#endif + + var ray = camera.ScreenPointToRay(mousePosition); + return ray; + } + /// /// 世界中一个点是否在相机内 /// diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/GameObjectExtension.cs b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/GameObjectExtension.cs index b75f170..c6cf7e8 100644 --- a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/GameObjectExtension.cs +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/GameObjectExtension.cs @@ -103,7 +103,7 @@ public static void CallsInChildren(this GameObject gameObject, Action acti if (gameObject) { - using (ListPool.Rent(out var list)) + using (ListPool.Shared.Rent(out var list)) { gameObject.GetComponentsInChildren(true, list); foreach (var item in list) @@ -143,7 +143,7 @@ public static void CallsInParent(this GameObject gameObject, Action action if (gameObject) { - using (ListPool.Rent(out var list)) + using (ListPool.Shared.Rent(out var list)) { gameObject.GetComponentsInParent(true, list); foreach (var item in list) diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs new file mode 100644 index 0000000..33c5f6b --- /dev/null +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Megumin; +using UnityEngine; + +public static class RayExtension_6607D121FE9342B8AF0F13BE4B9FBCBE +{ + public static bool TryPick(this Ray ray, out RaycastHit hitInfo, float maxDistance = float.PositiveInfinity, int layerMask = -5) + { + var hit = Physics.Raycast(ray, out hitInfo, maxDistance, layerMask); + return hit; + } + + public static bool TryPick(this Ray ray, out T result, float maxDistance = float.PositiveInfinity, int layerMask = -5, GameObjectFilter filter = null) + { + return TryPick(ray, out result, out var _, maxDistance, layerMask, filter); + } + + public static bool TryPick(this Ray ray, out T result, out RaycastHit hitInfo, float maxDistance = float.PositiveInfinity, int layerMask = -5, GameObjectFilter filter = null) + { + if (TryPick(ray, out hitInfo, maxDistance, layerMask)) + { + var comp = hitInfo.transform.GetComponentInParent(); + if (comp is Component component && component) + { + if (filter != null) + { + if (filter.Check(component)) + { + result = comp; + return true; + } + } + else + { + result = comp; + return true; + } + } + } + + result = default; + return false; + } + + static readonly RaycastHit[] resultCache = new RaycastHit[256]; + /// + /// 使用完毕后需要results.Clear();防止内存泄露 + /// + /// + /// + /// + /// + public static bool TryPickAll(this Ray ray, out Span results, float maxDistance = float.PositiveInfinity, int layerMask = -5) + { + var count = Physics.RaycastNonAlloc(ray, resultCache, maxDistance, layerMask); + results = new Span(resultCache, 0, count); + return count > 0; + } + + + public static bool TryPickAll(this Ray ray, out Span results, float maxDistance = float.PositiveInfinity, int layerMask = -5, GameObjectFilter filter = null) + { + if (TryPickAll(ray, out var raycastHits, maxDistance, layerMask)) + { + using (HashSetPool.Shared.Rent(out var temp)) + { + foreach (var hit in raycastHits) + { + var comp = hit.transform.GetComponentInParent(); + if (comp is Component component && component) + { + if (filter != null) + { + if (filter.Check(component)) + { + temp.Add(comp); + } + } + else + { + temp.Add(comp); + } + } + } + + raycastHits.Clear(); + if (temp.Count > 0) + { + var array = temp.ToArray(); + results = array; + return true; + } + } + } + + results = default; + return false; + } + + public static bool TryPickAll(this Ray ray, List results, float maxDistance = float.PositiveInfinity, int layerMask = -5, GameObjectFilter filter = null) + { + if (TryPickAll(ray, out var raycastHits, maxDistance, layerMask)) + { + using (HashSetPool.Shared.Rent(out var temp)) + { + foreach (var hit in raycastHits) + { + var comp = hit.transform.GetComponentInParent(); + if (comp is Component component && component) + { + if (filter != null) + { + if (filter.Check(component)) + { + temp.Add(comp); + } + } + else + { + temp.Add(comp); + } + } + } + + raycastHits.Clear(); + if (temp.Count > 0) + { + results.AddRange(temp); + return true; + } + } + } + + results = default; + return false; + } +} + + + + + diff --git a/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs.meta b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs.meta new file mode 100644 index 0000000..7eb27fb --- /dev/null +++ b/Megumin.UnityPackage/Packages/megumin.explosion4unity/Runtime/Scripts/UnityEngineExtensionMethod/RayExtension.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6497a49f9873e3a47a3b578addcba95b \ No newline at end of file