An-Cadsolutions      Imgsystems

Kirjoittaja Aihe: maxscript, objektin nimen hakeminen  (Luettu 283 kertaa)

jazzaplot

  • Jr. Member
  • **
  • Viestejä: 67
    • Profiili
    • Sähköposti
maxscript, objektin nimen hakeminen
« : Helmikuu 10, 2010, 09:44:27 am »
Jos objektin rotation controllerissa on rotation script, pystynkö jollain käskyllä hakemaan objektin oman nimen?

esim kun normisti annetaan seuraava komento: obj =$pallo01

se pitäisi saada muotoon, joka toimii duplikaateissa: obj=$tämä pallo eikä tuo alkuperäinen pallo01, jotten joudu muuttamaan jokaista skriptiä.

tai vaihtoehtoisesti voisin viitata objektiin itseensä, eli
"$pallo01.rotation" lauseke olisi actionscriptin tapaan muodossa "this.rotation"...

Kyse on siitä, että kun kopioita on satoja kappaleita, niin scripti päivittyisi itsestään.


xcx

  • Administrator
  • *****
  • Viestejä: 2302
  • Sukupuoli: Mies
    • Profiili
    • Verajankorva.com
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #1 : Helmikuu 10, 2010, 10:01:49 am »
obj = getNodeByName "pallo01"

Tämä hakee scenestä obun nimeltä pallo01, jonka handle tallentuu variableen obj.
Senior Technical Artist - Remedy Games
http://www.verajankorva.com

xcx

  • Administrator
  • *****
  • Viestejä: 2302
  • Sukupuoli: Mies
    • Profiili
    • Verajankorva.com
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #2 : Helmikuu 10, 2010, 10:03:46 am »
Eiku häh? Et sä tota kysynytkään :). Pitääpä oikein hartaudella lukea tää postaus. :)
Senior Technical Artist - Remedy Games
http://www.verajankorva.com

xcx

  • Administrator
  • *****
  • Viestejä: 2302
  • Sukupuoli: Mies
    • Profiili
    • Verajankorva.com
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #3 : Helmikuu 10, 2010, 10:08:40 am »
Jos sulla on rotaatioscripti niin siihen voi kirjoittaa suoraan vaan sen rotaatioarvon ja se viittaa aina kulloisenkin obun rotaatio controlleriin. Eli lasket vain rotaation ja annat sen quaternioina scriptalle. Quaternioita ei ole pakko käyttää, mutta max käyttää niitä rotaatioihin. Voit kuitenkin käyttää Eulereita tai AngleAxis rotaatioitakin.

Rotaatioscriptan pitää aina loppua siihen, että scripti palauttaa rotaatioarvon.

Eli näin. Rotaatioscripta obuun.
Koodia: [Valitse]
rx = mod (sliderTime.frame) 360.0
ea = EulerAngles rx 0 0

Ja jos nyt kopioit obua niin kaikki obut pyörii yhden framen aikana yhden asteen x akselin ympäri.
« Viimeksi muokattu: Helmikuu 10, 2010, 10:21:08 am kirjoittanut xcx »
Senior Technical Artist - Remedy Games
http://www.verajankorva.com

jazzaplot

  • Jr. Member
  • **
  • Viestejä: 67
    • Profiili
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #4 : Helmikuu 10, 2010, 10:21:51 am »
Kiitos nopeasta vastauksesta  ;)

Kyseessä on tällainen netistä pöllitty scripti, joka laskee pallon pyörimistä sen liikkuessa skenessä.

-----

obj = $Sphere01       
timeres = 1f          

fn getrot t =
(
if t<=0f then return quat 0 0 0 1 
t0 = t-timeres         
t1 = t            

rot0 = getrot(t0)       

p0 = at time t0 obj.position    
p1 = at time t1 obj.position    
if(p0==p1) then return rot0    

dif = p1-p0                  
len = Length(dif)            
vec = dif / len              

r0 = at time t0 obj.radius    
r1 = at time t1 obj.radius    

rotax = cross vec [0, 0, 1]    
angle = 360*len/((r0+r1)*pi)   
rotdif = quat angle rotax   
rot1 = rot0 + rotdif      
)

getrot(currentTime)

-----

Eli nimiongelma on tuossa kun se hakee oman position ja säteen. Siinä se viittaa aina $Sphere01:seen, joten kopiot pyörivät samalla lailla, kuin Sphere01. Millään ei viitsisi muuttaa jokaisen kopion scriptiä.

xcx

  • Administrator
  • *****
  • Viestejä: 2302
  • Sukupuoli: Mies
    • Profiili
    • Verajankorva.com
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #5 : Helmikuu 10, 2010, 10:29:57 am »
Aaaaaaaaaaaaaaa :D. Enpä tiedä onko tuo suoraan rotaatio controllerista mahdollista pitääpä hetki tutkia asiaa.
Senior Technical Artist - Remedy Games
http://www.verajankorva.com

xcx

  • Administrator
  • *****
  • Viestejä: 2302
  • Sukupuoli: Mies
    • Profiili
    • Verajankorva.com
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #6 : Helmikuu 10, 2010, 10:55:31 am »
Ok. Eli näin.

Tee pallo "Sphere01". Assignaa sille rotaatioscripti. Scriptissä tee variable "obj" Create variable laatikon kautta ja Assignaa sille Sphere obu "Assign Node" napin kautta. Ja copypaste tämä scripti.

Koodia: [Valitse]
timeres = 1f         

fn getrot t =
(
if t<=0f then return quat 0 0 0 1
t0 = t-timeres         
t1 = t           

rot0 = getrot(t0)       

p0 = at time t0 obj.position   
p1 = at time t1 obj.position   
if(p0==p1) then return rot0   

dif = p1-p0                 
len = Length(dif)           
vec = dif / len             

r0 = at time t0 obj.radius   
r1 = at time t1 obj.radius   

rotax = cross vec [0, 0, 1]   
angle = 360*len/((r0+r1)*pi)   
rotdif = quat angle rotax   
rot1 = rot0 + rotdif     
)

getrot(currentTime)

Nyt pitäisi myös kopioitujen pallojen pyöriä.
Senior Technical Artist - Remedy Games
http://www.verajankorva.com

jazzaplot

  • Jr. Member
  • **
  • Viestejä: 67
    • Profiili
    • Sähköposti
Vs: maxscript, objektin nimen hakeminen
« Vastaus #7 : Helmikuu 10, 2010, 11:08:17 am »
Loistavaa! Toimii kuin pullo jallua. Kiitos vaivannäöstä :)