Jump to content
Unity Insider Forum

Object Anvisieren


Jastreb

Recommended Posts

Hallo alle,

 

habe schon gegoogelt und selbst probier zu machen aber funktioniert trotzdem nicht.

 

mein Problem:

Ich will so machen, dass wenn ich im spiel auf einen Gegner/Spieler drücke das ich ihn anvisieren kann damit er als Target an Shooter Script angehängt wird und ihn dann ab schissen kann.

 

kann mir jemand da helfen, einen C# Script hier rein postet?

 

hier noch ein beispiel.

also wenn man einen Gegner anvisiert ist, soll man nicht automatisch hinter dem Gegner her fliegen, sonderst wenn man den Gegner anvisiert hat, dass mein Schiff/Spieler immer zu dem Gegner sich dreht und wenn man CTRL Taste drückt soll man nur die Drehung Verfolgung abschalten.

 

Beispiel Video:

 

Mein Game:

http://www.youtube.com/watch?v=nAnmIkrO4dQ

Link zu diesem Kommentar
Auf anderen Seiten teilen

du glaubst nicht ernsthaft das dir hier jemand nen fertiges Script postet oder?

 

Aber als Tip, schau dir mal Transform.LookAt an, damit kannst du ein Objekt durch übergeben einens Vector3 auf diesen Punkt blicken lassen... sollte dann genauso scheiße aussehen wie bei dark orbit :D damit mein ich das sich das schiff ohne eine Verzögerung in der Drehung direkt auf diesen Punkt ausrichtet und sich beispielsweise nicht erst umdrehen muss!

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, habe das mit Transform.LookAt hinbekommen, aber wenn ich einen anderen Player anvisieren wie kann ich es nur Manuel machen,

mein Problem ist das ich es nicht hinbekommen, dass wenn ich auf einen Player drauf drücke, damit der dann als targer für Transform.LookAt reinkommt.

bitte bitte hilft.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo genau kommst du nicht weiter?

Hast du bereits das Objekt welches du anklickst per Script? Wenn ja hast du alles was du benötigst:

 

- Komponente bei der das aktuell ausgewählte Objekt gesetzt werden soll suchen

- das neue ausgewählte Objekt bei der Komponente setzen

- wenn nötig alles Abhängige Updaten

 

Scheitert es allerdings schon daran im Spiel durch einen Klick ein Objekt zu bekommen welches ausgewählt wurde, dann solltest du dir die Unity Script Reference ansehen, explizit kannst du ja nach:

 

- OnMouseDown suchen, welches nur eine Methode ist die in ein Script gehört und welche aufgerufen wird sobald man mit der linken (!) Maustaste das zugehörige Objekt anklickt (benötigt ein Collider am Objekt und ein Script welches OnMouseDown implementiert).

- Physics.Raycast, hiermit kannst du einen Test in die Szene machen welches Objekt von einem Strahl getroffen wird, in der Unity Script Reference dürfte es sogar ein Beispiel geben wie man damit Objekte unter der Maus findet.

 

Bitte sage uns woran es hakt, je mehr Informationen desto besser, und lass dir ruhig Zeit beim schreiben der Antwort, ausformulierte Beiträge sind hilfreicher (auch für uns) als Beiträge die vor Panik strotzen. Unter anderem wirken Panikbeiträge wie Nasse Pudel, hässlicher als normale Pudel, sie schrecken ab ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich benutze dieses script aber habe bei den auch noch paar problemen und zwar ich kann damit mehrere Objecte anklicken die den tag: Selected und Unselected haben, dann habe ich noch ein problem, wenn der Object den tag "Selected" hat soll er mit "LookAt" auf den Selected Object schauen, bekomme aber es auch nicht hin :(

 


#pragma strict

var clicked : boolean = false;
var hit : RaycastHit;
var target : Transform; 
var SelectAttack : Transform; 

function Update() {

target.transform.LookAt(SelectAttack);

   if(Input.GetMouseButtonDown(0) &&
      collider.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit,
                       Mathf.Infinity)) {
       clicked = !clicked;
       if(tag == "Selected") tag = "Unselected";
       else tag = "Selected";
       Debug.Log("clicked" + (clicked? "" : " off"));
   }
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wieso gehst du überhaupt über die Tags? Ich würde mir die angeklickten Objekte (wenn es denn mehrere geben darf) in eine Liste sammeln und beim deselektieren diese aus der Liste wieder entfernen. Ich gehe aber erstmal davon aus, dass du nur 1 selektiertes zur gleichen zeit haben möchtest.

 

Daher würde ich das Script so aufpinseln:

 

#pragma strict

var target : Transform;
var SelectAttack : Transform;

function Update() {
   if(Input.GetMouseButtonDown(0)) {

       var hit : RaycastHit;

       if (collider.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit,
				    Mathf.Infinity)) {
           SelectAttack = hit.transform;
       }
       else {
           SelectAttack = null;
       }
   }

   if (SelectAttack) {
       target.transform.LookAt(SelectAttack);
   }
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

supper ^^ danke schon mal für den script.

aber ich kann dann ja nur mich selbst anklicken und tag war dafür da damit ich dann nur die objecte ancklicken darf die den tag .... haben und noch ne frage geht die .js code auch in C#? weil in .js kann ich die dann nicht mit dem Player.IO Server verbinden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst das natürlich auch so in C# machen. Du kannst mit dem Script alles anklicken was einen Collider hat, wieso du nur dich selbst anklicken kannst verstehe ich nicht ganz. Wenn du Objekte Filtern möchtest gibt es diverse überladungen von der Raycast Methode die das für dich übernehmen können.

 

Entweder über die LayerMask (letzter Parameter von Raycast) oder Manuell über das Ergebniss von RaycastAll:

http://unity3d.com/support/documentation/ScriptReference/Physics.RaycastAll.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...