Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Unity 3d: guitext aanpassen via javascript op een andere obj

Pagina: 1
Acties:

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Wat doe ik hier fout? Doel is wanneer de speler met gold object collide, de guitext + 1 optelt

Javascript is gevestigd op een andere object (de speler namelijk) dan de guitext. Dit is wat ik nu heb:
JavaScript:
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
33
34
35
36
var speed : float = 3.0;
var rotateSpeed : float = 3.0;
 
function Update () {
 
var controller : CharacterController = GetComponen (CharacterController);
 
// Rotate around y - axis
transform.Rotate(0, Input.GetAxis ("Mouse X") * rotateSpeed, 0);
 
// Move forward / backward
var forward : Vector3 = transform.TransformDirection(Vector3.forward);
var right : Vector3 = transform.TransformDirection(Vector3.right);
var curSpeed : float = speed * Input.GetAxis ("Vertical");
var curSpeed1 : float = speed * Input.GetAxis ("Horizontal");
controller.SimpleMove(forward * curSpeed);
controller.SimpleMove(right * curSpeed1);

Screen.showCursor = false;
 
}
 
var goldtext : GUIText;
var goldcounter : int = 0;
 
function OnCollisionEnter (geraakt : Collision) {
 
var goldtext = guiText.text;
if (geraakt.gameObject.tag == "gold");
goldcounter++;
 
guiText.text = "Gold: " + goldcounter;

}
 
@script RequireComponent(CharacterController)

Heb van alles geprobeerd, maar de guitext blijft nix doen.
Op unityanswers duurt het zolang voordat je een antwoord krijgt dus dan maar hier porberen :P

Hou aub rekening mee dat ik veel te weinig skills heb in javascript.

[ Voor 0% gewijzigd door Creepy op 26-09-2013 16:36 ]


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Zeer vreemd JavaScript met die types zo... Unity gebruikt inderdaad JavaScript, maar weet je zeker dat je geen ActionScript aan schrijven bent?

En heb je al gedebugged? Wordt die methode überhaupt aangeroepen? Bevatten de variabelen de waarden die je verwacht?

[ Voor 20% gewijzigd door Herko_ter_Horst op 26-09-2013 16:46 ]

"Any sufficiently advanced technology is indistinguishable from magic."


  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Unity 3d geeft zelf geen foutmeldingen. Ik kan het spel starten, alleen verandert er nix aan de guitext.

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Herko_ter_Horst schreef op donderdag 26 september 2013 @ 16:45:
Zeer vreemd JavaScript met die types zo... Unity gebruikt inderdaad JavaScript, maar weet je zeker dat je geen ActionScript aan schrijven bent?

En heb je al gedebugged? Wordt die methode überhaupt aangeroepen? Bevatten de variabelen de waarden die je verwacht?
heb even actionscript opgezocht lijkt er inderdaad op maarja unity geeft aan dat het javascript is.

  • simon
  • Registratie: Maart 2002
  • Laatst online: 13:08
Maar heb je bijv al breakpoints in je code geplaatst in unity3d, om te kijken wat er gebeurt?

|>


  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Ik weet weinig af van unity breakpoint debug. Ben aan het googlen heb een tutorial gevonden ik ga zo eerst kijken hoe het werkt dan zelf proberen.

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Zo ik ben al wat verder gekomen de collision probleem was. de player heeft geen collider maar een charactercontroller, daarom moet ik in plaats van OnCollisionEnter, OnControllerColliderHit gebruiken.
zo zit het er nu uit:
var goldcounter : int = 0;

function OnControllerColliderHit (collision : ControllerColliderHit) {

if(collision.gameObject.tag == "gold"){
Destroy(GameObject.FindWithTag ("gold"));
goldcounter ++;
Debug.Log(goldcounter);
}

}

de Debug.log werkt het probleem nu is, als er 10 items in de scene liggen met de tag gold worden ze allemaal tegelijk destroyed bij het colliden met 1 ervan. Morgen nieuwe dag nieuwe kansen:p

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:18
Watchmano schreef op donderdag 26 september 2013 @ 17:02:
[...] heb even actionscript opgezocht lijkt er inderdaad op maarja unity geeft aan dat het javascript is.
Het is UnityScript.
[...]Programmers can use UnityScript (a custom language with ECMAScript-inspired syntax, referred to as JavaScript by the software)[...]
Eigenlijk is het een taal gebasseerd op Boo en gemodelleerd naar ESCMAScript. Meer info over de verschillen met Javascript: http://wiki.unity3d.com/i...yScript_versus_JavaScript

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
1 klein probeerseltje ook al ken ik unity3d / unityscript / weet ik veelwat...
Watchmano schreef op donderdag 26 september 2013 @ 20:32:
if(collision.gameObject.tag == "gold"){
Wat denk je zelf dat hier je collision.gameObject is?
Destroy(GameObject.FindWithTag ("gold"));
Waarom ga je opeens zoeken naar alle GameObjects met de tag gold? Zie mijn vorige vraag...

Optimalisatietip : Vergeet die .findwithtag zolang je binnen deze function zit, je functie aanroep bevat netjes een object waarmee je gecollide bent dus zolang je het hebt over acties te ondernemen op het object waarmee je collide hoef je nergens naar op zoek te gaan

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
omdat de script attached is op de player. als ik Destroy (gameObject); doe wordt de player destroyed.

zodra ik weer tijd heb zal ik de script van de player afhalen en op de gold obj plaatsen met wat aanpassingen, kijken wat die dan doet. dan zal ik Destroy(GameObject.FindWithTag ("gold")); inderdaad niet nodig hebben.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 15:03

Pizzalucht

Snotneus.

Dat klopt niet, in je functie OnControllerColliderHit krijg je een argument collision mee, de property gameObject hiervan is het object waarmee je een collission hebt.

code:
1
Destroy(collision.gameObject);


Zou genoeg moeten zijn.

[ Voor 4% gewijzigd door Pizzalucht op 27-09-2013 21:29 ]


  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Pizzalucht schreef op vrijdag 27 september 2013 @ 21:29:
Dat klopt niet, in je functie OnControllerColliderHit krijg je een argument collision mee, de property gameObject hiervan is het object waarmee je een collission hebt.

code:
1
Destroy(collision.gameObject);


Zou genoeg moeten zijn.
klopt helemaal. Heb het net even geprobeerd en het werkt. Dank hiervoor.
Nu nog de guitext kunnen aanspreken via hetzelfde script zodat die de gegevens van de goldcounter overneemt.

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Ik wil hier de gold in een andere kleur hebben dan de health. Heb gegoogled maar kom er niet uit kan iemand me hiermee helpen?

Heb het met var geprobeerd en mystyle.normal.color. maar nix wil werken

code:
1
2
3
4
5
6
7
8
9
10
var mystyle : GUIStyle;

function OnGUI () {

    GUI.Label (Rect (10, 50, 100, 20),"Gold: " + PlayerMove.goldcounter, mystyle);
    GUI.Label (Rect (10, 10, 100, 20), "Health: ", mystyle);

}

@script RequireComponent(PlayerMove)


Wel lukt het door een 2de guistyle aan te maken maar het moet toch ook met 1 guistyle kunnen?

[ Voor 10% gewijzigd door Watchmano op 29-09-2013 18:32 ]


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Watchmano schreef op zondag 29 september 2013 @ 18:28:
Ik wil hier de gold in een andere kleur hebben dan de health.
...
Wel lukt het door een 2de guistyle aan te maken maar het moet toch ook met 1 guistyle kunnen?
Of ik snap niet wat je bedoelt of je vraagt iets onlogisch... 2 kleuren is over het algemeen 2 stylen...

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Ik dacht bijvoorbeeld aan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var mystyle : GUIStyle;

function OnGUI () {

var green = mystyle.normal.Color = green;
var blue = mystyle.normal.Color = blue;

    GUI.Label (Rect (10, 50, 100, 20),"Gold: " + PlayerMove.goldcounter, mystyle, green);
    GUI.Label (Rect (10, 10, 100, 20), "Health: ", mystyle, blue);

}

@script RequireComponent(PlayerMove)


Zoiets, maar dit werkt helaas niet.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 15:03

Pizzalucht

Snotneus.

Watchmano schreef op zondag 29 september 2013 @ 19:16:
Ik dacht bijvoorbeeld aan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var mystyle : GUIStyle;

function OnGUI () {

var green = mystyle.normal.Color = green;
var blue = mystyle.normal.Color = blue;

    GUI.Label (Rect (10, 50, 100, 20),"Gold: " + PlayerMove.goldcounter, mystyle, green);
    GUI.Label (Rect (10, 10, 100, 20), "Health: ", mystyle, blue);

}

@script RequireComponent(PlayerMove)


Zoiets, maar dit werkt helaas niet.
Ik ben zelf niet echt into Unity, maar mogelijk werkt zoiets?
code:
1
2
3
4
5
6
7
8
9
10
11
var mystyle : GUIStyle;

function OnGUI () {
    mystyle.normal.Color = green;
    GUI.Label (Rect (10, 50, 100, 20),"Gold: " + PlayerMove.goldcounter, mystyle);
    mystyle.normal.Color = blue;
    GUI.Label (Rect (10, 10, 100, 20), "Health: ", mystyle);

}

@script RequireComponent(PlayerMove)

  • Watchmano
  • Registratie: Augustus 2011
  • Laatst online: 13-10 19:31
Pizzalucht schreef op zondag 29 september 2013 @ 20:12:
[...]


Ik ben zelf niet echt into Unity, maar mogelijk werkt zoiets?
code:
1
2
3
4
5
6
7
8
9
10
11
var mystyle : GUIStyle;

function OnGUI () {
    mystyle.normal.Color = green;
    GUI.Label (Rect (10, 50, 100, 20),"Gold: " + PlayerMove.goldcounter, mystyle);
    mystyle.normal.Color = blue;
    GUI.Label (Rect (10, 10, 100, 20), "Health: ", mystyle);

}

@script RequireComponent(PlayerMove)
Heb dat al geprobeerd lukt ook niet. Maar ja heb nu 2 GUIStyles gemaakt dit werkt in principe goed en zal vast niet veel meer van de performance vragen:p
Pagina: 1