Jump to content
Unity Insider Forum
superkerni

2D Shooting - Projektil an Slot/Gun binden ?

Recommended Posts

Hallo,

schießen kann mein Player schon, aber zur Zeit nur in Richtung der x-Achse. Mein Player (SPINE Character) ist aber im  Körper, Kopf und Armen (mit Gun) beweglich und richtet sich beim Schießen nach dem MouseCursor.

Leider Macht das mein Projektil nicht. Muss ich das Spawn-Objekt oder nur das Projektil-Prefab an die Waffe binden ? Wenn ja wo muss ich lesen ? Regelt man das mit "Attachments" , oder geht das ganz anders ?

Danke

 

Share this post


Link to post
Share on other sites

Danke Jog,

der empfohlenen Beitrag stärkt erst einmal das Wissen zum Vectorverhalten.

Habe in der Zwischenzeit eine andere Lösung gefunden. Bei SPINE-Characters gibt es eine Funktion:   "BoneFollower" ! Siehe Anhang. Man kann den bone direkt ansprechen !

Eine Skriptlösung scheint mir aber universeller !

BulletSpawn.jpg

Share this post


Link to post
Share on other sites

Im prinzip brauchst du ja nur bein instanzieren die Position und Rotation von deinem Bone "Gun"?  Wieso das du den BoneFollower verwenden willst verstehe ich nicht ganz.

Ich mache mir hier zusätzlich in Spine noch einen Bone "firePoint" der an der Position ist wo mein Projektil gespawnt werden soll.

Am 25.12.2020 um 16:06 schrieb superkerni:

Eine Skriptlösung scheint mir aber universeller

BoneFollower ist ja eigentlich schon ein Script. Du wirst ja aber ein eigenes haben, wo du schiesst. Aber den Bone kannst du dort genau so einbinden wie es der BoneFollower macht. Dazu brauchst du einfach eine Referenz zu deiner SpineAnimation und holst dir dann den entsprechenden Bone.

using UnityEngine;
using Spine.Unity;
//using System.Diagnostics;

public class WeaponBullets : MonoBehaviour
{

    public Spine.Bone BfirePoint;
    public SkeletonAnimation skeletonAnim;

    private void Start()
    {

        BfirePoint = skeletonAnim.skeleton.FindBone("firePoint");
       
    }

    void spawnBullets()
    {

        if (cController.m_FacingRight)
        {
            firePointPos = new Vector3(this.transform.position.x + BfirePoint.WorldX, this.transform.position.y + BfirePoint.WorldY, 0);
			firePointRot = BfirePoint.WorldRotationX;
        }
        else
        {
            firePointPos = new Vector3(this.transform.position.x - BfirePoint.WorldX, this.transform.position.y + BfirePoint.WorldY, 0);
			firePointRot = BfirePoint.WorldRotationX * -1;
        }

			GameObject bullet = Instantiate(bulletPrefab, firePointPos, firePointRot);
	}
}

So in etwa mach ich das z.B. Wichtig ist das du using Spine.Unity; verwendest

 

----------------------------------------------------------------------------------

 

Alternativ kannst du die Bones auch alle spawnen und dir den Bone Gun einfach als Referenzposition dann normal über dessen Transform verwenden.

 

Unbenannt-2.png

Share this post


Link to post
Share on other sites

Vielen Dank Jomnitech,

einen Spawn-Point (Firepoint) habe ich ja, ich bin (war ?) nur zu doof diesem eine Richtung zu geben. Als totaler Anfänger verwende ich die vorhandenen Beispiele von Esoteric (Spine Examples) und baue diese für meine Ansprüche um. Da ist die Shoot-Richtung schon programmiert , aber ohne Bullet, nur mit Particle (Mündungsfeuer).

Dein Vorschlag ist eigentlich recht einfach und klar. "BoneFollower" kann es ja kaum anders machen. Wieder ein Wissensbaustein, danke.

 

 

 

Share this post


Link to post
Share on other sites

Hab mir das mal angeschaut. Im Prinzip kannst du ja das einfach erweitern. Der Spineboy hat einChild "VIEW Spineboy", dort ist ein Skript names SpineboyBeginnerView drauf. Das Script kannst du ja einfach erweitern, indem du einmal dein Bullet Prefab als Referenz deklarierst:
 

[Header("Effects")]
public ParticleSystem gunParticles;
[Header("Bullet")]
public GameObject bulletPrefab;  //<<------------------
#endregion

und es und es dann beim void PlayShoot instanzierst.

gunSource.pitch = GetRandomPitch(gunsoundPitchOffset);
gunSource.Play();
//gunParticles.randomSeed = (uint)Random.Range(0, 100);
gunParticles.Play();
GameObject go = Instantiate(bulletPrefab, gunParticles.transform.position, gunParticles.transform.rotation);  //<<------------------

Damit es richtig klappt, musst du noch beim Child "PARTICLE Gun" beim BoneFollower das Häkchen bei Follow Bone Rotation setzen.

--------------------------------------------------------------------------------

Als Bullet verwende ich ein Sprite mit einem Capsule Collider 2d und einem Rigidbody 2d, dazu noch ein kleines Skript welches das ganze steuert.
 

public class Bullet : MonoBehaviour
{

    public float speed = 20f;
    public float lifetime = 1.5f;
    public int damage = 10;
    private Rigidbody2D rb;
    
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();

        rb.velocity = transform.right * speed;

        Destroy(gameObject, lifetime);
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        //Destroy(gameObject);
    }

}

Das ganze kannst du dann als Prefab speichern und als referenz in das SpineboyBeginnerView Skript reinziehen.

Share this post


Link to post
Share on other sites

Super, genau dieses Spine-Skript (SpineboyBeginnerView) verwende ich !!  Das hast Du aber fix zusammen gebastelt.

War mir eigentlich klar, daß man das  im PlayShoot irgendwie integrieren kann. Zur Zeit werde ich diese Lösung erst mal nicht verbessern, da ich für meinen Enkel unbedingt noch das kleine Jump&Run fertig stellen muss. Die Aufgabe soll sein, Highscore ständig zu verbessern. Eine Szene, in der nach gewisser Zeit Monster und Money wieder zum Leben erweckt werden. Der Weihnachtsmann schmeißt Geschenk-Würfel von der Wolke, die den Player behindern.  (Ich habe erst vor zwei Monaten angefangen mich mit Unity sporastisch zu beschäftigen).

Nur eine kleine Sache, aber ich übe, nichts ist perfekt  und ich hoffe, mein Enkel hat Spaß !!! 😊

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...