[Unity/Javascript] Hoe doe ik een muis op rigidbody check?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RoofTurkey
  • Registratie: Mei 2011
  • Laatst online: 15:35

RoofTurkey

PredatorKalkoen

Topicstarter
Dag medetweaker,

Momenteel ben ik druk bezig met oefenen voor een praktijk examen unity. Nu ben ik dan ook bezig met een oefenexamen, alleen krijg ik net een klein dingetje niet voor elkaar (net een dingetje dat tot de vereisten hoort voor een 6 of hoger :-( ).

Probleem is namelijk dat ik alles werkend krijg, alleen ik nog een check nodig heb of mijn muispointer wel op de rigidbody staat, zo niet dan gebeurt er niets en zowel dan wordt de actie gewoon uitgevoerd.

Dit (java)script heb ik op mijn sphere geplakt:
JavaScript: ClickScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma strict

function Awake()
{
    Screen.showCursor = true;
}

function Start () {

}

public var pushForceMultiplier:float=100.0; 
var ray : Ray = Camera.main.ScreenPointToRay( Input.mousePosition );
var hit : RaycastHit;

function Update(){

    if(Input.GetMouseButtonDown(0)){

      var camDist=rigidbody.position.z-Camera.main.transform.position.z;

      var clickPoint=Camera.main.ScreenToWorldPoint(Vector3(Input.mousePosition.x,Input.mousePosition.y,camDist)); 

      var vec=rigidbody.position-clickPoint; 
      vec=vec.normalized;
      
      rigidbody.AddForce(vec*pushForceMultiplier);
    
    }


}


Momenteel wordt er (ook als de muis niet op de sphere staat) altijd force gezet op de rigidbody en dat moet dus eigenlijk alleen maar gebeuren wanneer de muis op de rigidbody staat (vanuit de camera gezien).

En na eeuwen googlen, toch maar besloten hier mijn vraag te stellen: Heeft iemand een oplossing voor mijn probleem(pje)?

Alvast bedankt voor de moeite :)

RoofTurkey

Grillmeister


Acties:
  • 0 Henk 'm!

Verwijderd

/me kent geen unity noch js.

JavaScript:
1
      var camDist=rigidbody.position.z-Camera.main.transform.position.z; 

Weet je zeker dat dat correct is? Ik zou iets als
JavaScript:
1
rigidbody.position-Camera.main.transform.position)

verwachten. Zonder die .z-jes. Met eventueel een length functie er op losgelaten.

Acties:
  • 0 Henk 'm!

  • RoofTurkey
  • Registratie: Mei 2011
  • Laatst online: 15:35

RoofTurkey

PredatorKalkoen

Topicstarter
Ik snap er zelf ook weinig van, maar dit bleek te werken :? . Gelukkig heb ik ondertussen van een klasgenoot al meer duidelijkheid gekregen, ik zal het correcte script zsm hier plaatsen :) .

Grillmeister


Acties:
  • 0 Henk 'm!

Verwijderd

Los daarvan kan de bewerking foo.z - bar.z met een afstand over de z as van exact 10 zowel 10 als -10 als resultaat geven.

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik snap sowieso niet helemaal wat je doet/wilt. Waarom doe je niet gewoon een ray-sphere intersection oid? Ik heb geen ervaring met Unity, maar volgens mij zoiets na een snelle google:

code:
1
2
3
4
var hit:RaycastHit;
if(Physics.Raycast(ray.origin,ray.direction, out hit)){
    print("world point on terrain: "+hit.point+", distance to point: "+hit.distance);
}


offtopic:
Vind het overigens wel een beetje triest dat mensen blijkbaar tegenwoordig unity leren en dan game developer zijn oid zonder echt het concept van vector lengte of lineaire algebra te kennen? :S

[ Voor 21% gewijzigd door Zoijar op 03-11-2012 14:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou inderdaad verwachten dat je een raycast klasse hebt met deze functionaliteit. Al heb je dan waarschijnlijk het probleem dat je wel weet waar je iets hebt geraakt, maar niet precies wat. Ik heb toevallig een vergelijkbaar schoolproject achter de rug met GameKit (http://code.google.com/p/gamekit/).

[ Voor 22% gewijzigd door Verwijderd op 03-11-2012 14:29 ]


Acties:
  • 0 Henk 'm!

  • RoofTurkey
  • Registratie: Mei 2011
  • Laatst online: 15:35

RoofTurkey

PredatorKalkoen

Topicstarter
Zoijar schreef op zaterdag 03 november 2012 @ 14:13:
Ik snap sowieso niet helemaal wat je doet/wilt. Waarom doe je niet gewoon een ray-sphere intersection oid? Ik heb geen ervaring met Unity, maar volgens mij zoiets na een snelle google:

code:
1
2
3
4
var hit:RaycastHit;
if(Physics.Raycast(ray.origin,ray.direction, out hit)){
    print("world point on terrain: "+hit.point+", distance to point: "+hit.distance);
}


offtopic:
Vind het overigens wel een beetje triest dat mensen blijkbaar tegenwoordig unity leren en dan game developer zijn oid zonder echt het concept van vector lengte of lineaire algebra te kennen? :S
Aha, die zocht ik inderdaad :) .

offtopic:
We zijn momenteel trouwens bezig met vectoren en lineaire algebra, dus daar hebben ze gelukkig wel aan gedacht ;) . Zou inderdaad anders echt een grote ramp worden, nog groter dan nu :9 .

Grillmeister


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

RoofTurkey schreef op zaterdag 03 november 2012 @ 14:28:
offtopic:
We zijn momenteel trouwens bezig met vectoren en lineaire algebra, dus daar hebben ze gelukkig wel aan gedacht ;) . Zou inderdaad anders echt een grote ramp worden, nog groter dan nu :9 .
Ja, dat is de nieuwe leermethode geloof ik, heh? Mensen meteen in het diepe gooien en praktijk problemen laten oplossen en dat aanvullen met langzame theorie. Maakt het wel leuker denk ik. Tip: werk hard aan die lineaire algebra basis, dat blijf je nodig hebben en als je dat goed snapt maakt het alles zo'n een stuk makkelijker... echt half gamedev etc staat vol met vragen die zo op te lossen zijn als je dat een beetje snapt.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Overigens heeft een Monobehaviour ook een OnMouseOver method, deze wordt elk frame aangeroepen wanneer hij onder je muis zit.
Zoijar schreef op zaterdag 03 november 2012 @ 14:13:
offtopic:
Vind het overigens wel een beetje triest dat mensen blijkbaar tegenwoordig unity leren en dan game developer zijn oid zonder echt het concept van vector lengte of lineaire algebra te kennen? :S
Pertinent niet mee eens. Ik ben mobile game developer en gebruik vrijwel exclusief Unity3D. Qua opleiding ben ik niet hoger gestrand dan VMBO, en heb dus alleen basale kennis van wat voor wiskunde dan ook. Als ik wat nodig heb google ik het wel, maar de meeste concepten zijn vrij abstract voor mij. Dat heeft mij in geen enkele manier weerhouden om 2 bovengemiddelde games in de appstore te zetten, alsmede vele andere 3d-projecten te doen. (Casual)-Game development is veel meer dan wiskunde alleen, en met goede middleware en support kom je wel uit de voeten.
"Mensen meteen in het diepe gooien en praktijk problemen laten oplossen en dat aanvullen met langzame theorie." Zo heb ik het idd geleerd ;)

[ Voor 73% gewijzigd door TJHeuvel op 05-11-2012 11:30 ]

Freelance Unity3D developer

Pagina: 1