Jump to content
Unity Insider Forum

[C#] Objekte einsammeln?


olaf

Recommended Posts

Hallo!

 

Ich bin gerade dabei einen kleinen Minecraft Clon zu schreiben.

Nicht um Notch zu schlagen, sondern weil mich die World Generation interessiert. :)

 

Jetzt habe ich das Problem, dass ich die Objekte, die aus Zerhackten Blöcken fallen aufsammeln muss, wenn sie in meiner Nähe sind.

Wenn jetzt jedes Objekt einen Raycast zum Player senden würde, währe das wohl zu Performancelastig.

über die Kollision bekomme ich das ganze nach viel rumprobieren nicht hin :(

 

Gruß

Olaf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, so habe ich das Problem gelöst. Füge den JavaScript einfach deinem Objekt, das du aufheben möchtest, hinzu und schreibe in die "if (distanceToPlayer < pickupDistanceToObject)" noch was passieren soll, wenn du das Objekt aufgenommen hast (z.B. "Destroy(gameObject);" // GameObjekt loeschen).

 

Du musst im Unity Editor unter "Edit -> Project Settings -> Input" dann noch eine Taste mit dem Namen "Use" definieren und deine Spielfigur muss den Tag "Player" haben. ;)

 

 

// Variablen
// ---------
var player : GameObject;
var distanceToPlayer : float = 0.0;
var pickupDistanceToObject : float = 2.0;


//------------------------------------------------------------------------------


function Awake()
{
player = GameObject.FindWithTag("Player"); // Das GameObjekt "Player" automatisch suchen lassen
}


//------------------------------------------------------------------------------


function FixedUpdate()
{
if (Input.GetButton("Use"))
{
	distanceToPlayer = Vector3.Distance(player.transform.position, transform.position);

	if (distanceToPlayer < pickupDistanceToObject)
	{
   	 // Hier kommt hin, was das Objekt bewirken soll
	}
}
}


//------------------------------------------------------------------------------

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo nochmal!

 

Da es sich nicht lohnen würde einen neuen Thread zu eröffnen frage ich einfach hier.

 

Also, ich habe angefangen ein Inventar zu machen, ja, es sieht nicht besonders schön aus :)

 

Jedenfalls ist es eigentlich 600x400 Pixel breit.

Aber wenn ich es in Unity darstelle ist es abgeschnitten und verzerrt (siehe Bilder);

 

Also ich lasse es per Script darstellen:

 

GUILayout.BeginArea(new Rect(Screen.width/2 - InventoryWidth/2,
                                                  Screen.height/2 - InventoryHeiht/2,
                                                  InventoryWidth, InventoryHeiht));
 GUILayout.Label(inventory);
 GUILayout.EndArea();

 

InventoryWidth ist 600 un Height ist 400

 

Die Textureinstellungen sind:

 

TextureType = Texture

Alpha from Grayscale = false

Wrap Mode = repeat

Filter Mode = Bilinear

Aniso Level = 1

 

Max Size = 1024

Format = Compressed

 

Für Hilfe währe ich sehr dankbar.

 

Gruß

Olaf

 

post-1714-0-20195300-1347204896_thumb.png

post-1714-0-25688000-1347205345_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

GUILayout.Label(inventory); ist bei dir die Textur?

 

Oder wie kann ich das verstehen?

Also dein Script passt eigentlich hast es so geschrieben das es sich in die Mitte positionierst, sehe jetzt da eigentlich nicht das Problem, vielleicht ist ja dein Inventory Texture bild nicht 600x400 oder das andere nicht richtig.

 

Hmm sollte mir was einfallen schreib ichs einfach dazu.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antwort!

 

Jup, das Label zeigt die Textur an.

Ich sehe aber gerade, dass im Unity Editor die Textur als 512x512 RGB... angezeigt wird.

Also, wenn man sie in er project folder anklickt.

 

Aber im Ordner, da ist sie 600x400 groß.

Kann es sein, dass PNG ein ungünstiges Format für Unity ist?

 

Gruß

Olaf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...