Jump to content
Unity Insider Forum

Jomnitech

Members
  • Gesamte Inhalte

    334
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    14

Beiträge erstellt von Jomnitech

  1. Danke für euer Feedback

    vor 12 Minuten schrieb KaBau:

    Irgendwie hast du verschiedene Pixelauflösungen.

    Ja, da habe ich noch deutliche Probleme die Skalierung vernünftig hin zu bekommen.

    vor 3 Minuten schrieb KaBau:

    das die Pixel kippen

    Mir persönlich gefällt der Effekt an und für sich, aber stimmt, es passt nicht zur retro Optik. Liegt daran dass es nicht gezeichnet ist, sondern mit Bones animiert ist.

  2. Ich denke mal, dass der State schon getriggert wird, nur du setzt ja deine Ente wiederum permanent in den Idle state wenn du "Space" nicht drückst.
    Ausserdem kann ich dir empfehlen beim Animator mit Triggers zu arbeiten, statt eine int zu setzen.
    Edit2: Ok hab das falsch verstanden, ist ja die Animation des Spielers.
    Dein Prblem wird darin liegen, dass du keine Referenz hast zum Animator des getroffenen Ziels. Hiermit müsste es gehen:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerControl : MonoBehaviour
    {
        public Animator ani;
        public Animator ent;
        public int EnteState1 = 0;
        public int EnteState2 = 1;
        public int EnteState3 = 2;
        public int IdleState = 0;
        public int ShootState = 1;
        public AudioClip MusicClip;
        public AudioSource MusicSource;
        GameObject target;
        Ray myRay;
        RaycastHit hit;
    
    
    
        // Use this for initialization
        void Start()
        {
            MusicSource.clip = MusicClip;
            target = GameObject.Find("Ziel");
        }
    
        // Update is called once per frame
        void Update()
        {
            // Ziel anvisieren ---------------------------
            Vector3 targetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z);
            transform.LookAt(targetPosition);
    
            //  Feuern -----------------------------------------
            if (Input.GetKeyDown(KeyCode.Space))
            {
    
                MusicSource.Play(); // Soundabspielen
    
                setAnimator(ShootState); // Animation Schuss
    
                myRay = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));  // Kontrollstrahl 
    
                if (Physics.Raycast(myRay, out hit))
                {
                    if (hit.collider.gameObject.tag == "Ente1") // Ins Ziel getroffen
                    {
                        ent = hit.collider.GetComponent<Animator>();
    
                        setAnimator2(EnteState2);
                        print("Getroffen");
                    }
                    if (hit.collider.gameObject.tag == "Ente2") // In den Schwanz, bzw. Kopf getroffen
                    {
                        ent = hit.collider.GetComponent<Animator>();
    
                        setAnimator2(EnteState2);
                        print("Getroffen" + EnteState2);
                    }
                }
    
            }
            else
            {
                setAnimator(IdleState);
    
            }
        }
    
        private void shoot()
        {
    
        }
        void setAnimator(int n)
        {
    
            ani.SetInteger("State", n);
        }
    
        void setAnimator2(int n)
        {
            // print ("State"+ n);
            ent.SetInteger("EntenState", n); //  <<<<<<<<<<<<<<<<<<   Hier geht scheinbar nicht !!!!!!
        }
    }

    Edit:

    Ich würde das sowieso unterteilen, einmal dein Gewehr, welches den Raycast schiesst, und ein separates script auf der Ente welches dann die Animation steuert.

  3. using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Coin : MonoBehaviour
    {
        private int coinCounter;
        public Text scoreText;
    
        public float randomX;
        public float randomY;
    
        // Start is called before the first frame update
        void Start()
        {
            coinCounter = 0;
    
    
            transform.position = new Vector2(Random.Range(-randomX, randomX),Random.Range(-randomY,randomY));
        }
    
        // Update is called once per frame
        void Update()
        {
           
        }
    
        void OnTriggerEnter2D(Collider2D other)
        {
            if (other.tag == "Coin")
            {
                coinCounter++;
                Destroy(other.gameObject);
                scoreText.text = "Score: " + coinCounter.ToString();
                Debug.Log("Score: " + coinCounter);
            }
        }
    }

    So vielleicht? Ist deine Frage überhaupt noch aktuell?🙃

  4. Hallo Zusammen

    Mir ist aufgefallen, dass ich die Anzahl der Materialen bei einem Objekt nicht mehr einstellen kann. Google meinte ich es sei ein bug in der 2018er Version, also habe ich jetzt die 2019.1 geladen, Spiel importiert, aber ich kann die Anzahl immer noch nicht auswählen. Ist das jetzt neu wo anders oder ist das ein Fehler?

    Edit:
    Super peinlich, grad gefunden, hat sich nur minimiert...

    • Like 1
  5. Am 3.3.2019 um 16:31 schrieb Hämmer:

    Wie habt ihr das gelöst?

    Ich habe meine Terrain mit Strasse komplett in Blender gemacht, da kann man sowas recht easy machen. Nachteil ist, dass es eben dann kein Unity Terrain ist und somit Funktionen wie Brushes nicht genutzt werden können.

    Aber sonst würd ich mal im Asset Store vorbei schauen, da gibt es recht viele Tools die genau das machen können.

  6. Habe eine Frage zum StateMachineBehaviour. Habe mit Google nichts gefunden, da ich nicht weiss wonach ich genau suchen soll.

    Ausgangslage ist wie folgt:
    Ich habe ein Script vom Typ StateMachineBehaviour. Ist recht simpel und regelt meine Spine Animationen. Es ist generell gehalten und lässt sich auf mehrer Charaktere anwenden, dies möchte ich auch so beibehalten.
    Nun möchte ich das sich das Script ein parameter aus dem Animator wo es drauf liegt holt, aber wie mache ich das? Ich möchte nicht jedes mal den Animator zuweisen müssen, und geht irgendwie sowieso nicht, da ich im StateMachineBehaviour kein GetComponent verwenden kann.

    Hoffe ist verständlich was ich meine.

     

    Edit:

    Ok bin schon ein Schritt weiter. Mit animator.GetFloat gehts irgendwie. Jetzt habe ich nur noch das Problem mit dem Update. Void Update funktioniert nicht und override public void OnStateEnter aktualisiert mir die Variable ja nicht.. hmm.

     

    animatorParameter.png

     

    Edit2:
    Ok, das heisst dann wohl OnStateUpdate. Scheint soweit zu funktionieren, manchmal postet man doch etwas vorschnell :rolleyes:

    -closed-

  7. Möchte das Thema nochmals aufgreifen, da ich nur

     public void OnDeselect(BaseEventData data)

    und

      public void OnSelect(BaseEventData eventData)

    gefunden habe. Gibt es eine möglichkeit, wie z.B. bei den Colliders "OnTriggerStay" ? Nur eben auf die Buttons bezogen?
    Mein Problem liegt darin, dass ich beim schliessen des Inventars kein "OnDeselect" bekomme, was zu Problemen führt.

     

  8. bin zwar auch Anfänger aber würde jetzt mal sagen:

    if (Input.GetKeyDown(KeyCode.W))
    	{ 
    		wheelSpeed = wheelSpeed + stepSpeed;
            anim.speed = wheelSpeed/4.5f;
        }
    	else
    	{
    		if(wheelSpeed > 0)
    		{
    		wheelSpeed = wheelSpeed - stepSpeed;
            anim.speed = wheelSpeed/4.5f;
    		}
    	}
    
    oder alternativ eine dritte Abfrage:
    
    if ((!Input.GetKey (KeyCode.S)) && (!Input.GetKey(KeyCode.W))&&(wheelSpeed > 0))
    	{
    		wheelSpeed = wheelSpeed - stepSpeed;
            anim.speed = wheelSpeed/4.5f;
    	}

    Edit: keine Ahnung warum das jetzt so komisch formatiert wird, aber hoffe es ist leserlich.

  9. Ich möchte gerne das mein erster Button in Inventar beim aufrufen gehighlited wird. Habe es mit :

    var eventSystem = EventSystem.current;
    eventSystem.SetSelectedGameObject(FirstButton, new BaseEventData(eventSystem));

    und mit
     

    FirstButton.Select();

    versucht. Beides macht irgendwie das selbe.
    Beim ersten Spielstart und beim ersten mal aufrufen des Inventars funktionert alles einwandfrei. Nun aber wenn ich das Inventar schliesse und erneut aufrufe, bin ich zwar technisch an der richtigen Position, sprich ich kann normal navigieren und bin auch an der gewünschten Position und ich kann den Button auch mit Enter triggern, aber der Knopf wird nicht mehr gehighlightet. Ich bekome auch kein Feedback über den ISelectHandler.

    Irgendwie scheint Button.Select() nicht das gleiche zu machen, als wie wenn man den Button mit den Pfeiltasten anwählt.

    Was mich eben verwirrt ist, dass es beim ersten mal geht und danach nicht mehr.

     

    Edit:
    Oder gibt es eine andere Möglichkeit einen Default Button zu bestimmen? Der Grund liegt lediglich darin damit ich mit dem Gamepad/Pfeiltasten navigieren kann.

    Edit2:

    Hab das jetzt mal so gelöst:
     

                var eventSystem = EventSystem.current;
                var selectedButton = eventSystem.currentSelectedGameObject;
                if (selectedButton == null)
                {
                    eventSystem.SetSelectedGameObject(FirstButton, new BaseEventData(eventSystem));
                    currentButton = FirstButton.GetComponent<Button>();
                    currentButton.OnSelect(null);
                }
                else
                {
                    eventSystem.SetSelectedGameObject(selectedButton, new BaseEventData(eventSystem));
                    currentButton = selectedButton.GetComponent<Button>();
                    currentButton.OnSelect(null);
                    
                }

    bin für Verbesserungen gerne offen.

  10. Hallo @Offisir

    Also Bücher kann ich dir jetzt keine empfehlen. Also nicht das ich dir Bücher generell nicht empfehle, sonder dass ich jetzt keins kenne/gelesen habe. Ich beziehe mein Wissen eher aus Youtube Tutorials und schaue wie die es machen, und versuche es soweit zu verstehen das ich es für meine Zwecke missbrauchen kann. Alternativ tuns auch Forenbeiträge.

    z.B. sowas hier:

     

     

×
×
  • Neu erstellen...