Aktywne Wpisy
OldTimer11 +58
Moja różowa ogląda cały sezon od początku i przed chwilą zwróciła mi uwagę na rzecz, która CHYBA została tu przegapiona. W 4 odcinku gdy weszła Luśka to przy stole zapytała ona Szczocha skąd jest i on odpowiedzial że z Łodzi. Łucja na to, że mają wspólnych znajomych z kortów tenisowych. Na te słowa Szczoch dosłownie zamiera.
Może Lucy go kojarzy z reala. Może wie jaka jest prawda na temat szczochowego życiorysu, a
Może Lucy go kojarzy z reala. Może wie jaka jest prawda na temat szczochowego życiorysu, a
public Transform bullet;
private GameObject bulletrigid;
void Update()
{
if (Input.GetButton ("Fire2"))
{
if(canShoot)
{
Instantiate(bullet, transform.position, this.transform.rotation);
bulletrigid = GameObject.FindGameObjectWithTag("Bullet");
bulletrigid.rigidbody.AddForce(velocity1 * 500);
StartCoroutine(ShootWait());
}
}
}
IEnumerator ShootWait()
{
canShoot = false;
yield return new WaitForSeconds (0.1f);
canShoot = true;
}
}
To jest wycinek skryptu, velocity1 to aktualny obrót gracza.
No i sprawa jest taka że skrypt działa i strzela tylko 1 pocisk a następny już nie ma nadanej siły tylko spawnuje się w mojej pozycji i tam sobie tam siedzi do usranej śmierci. Ktoś pomoże?
#wexproductions #gamedev
bulletrigid = GameObject.FindGameObjectWithTag("Bullet");
zwraca ci tylko ten pierwszy pocisk.
Twój sposób jest bez sensu z tego powodu, że jak będziesz miał w scenie 1000 pocisków, to przy każdym nowym procesor będzie musiał przeszukać wszystkie obiekty żeby znaleźć ten z tagiem "Bullet". Raz mu nadaj siłę i koniec.
A najlepiej utwórz skrypt "BulletScript" i w metodzie "Start" nadaj mu prędkość za pomocą rigidbody.velocity (najlepiej transform.forward * prędkość
http://docs.unity3d.com/ScriptReference/Object.Instantiate.html
private GameObject bulletrigid;
przenieś do Update();
I zrób tak:
bulletrigid = Instantiate(bullet, transform.position, this.transform.rotation);
Coroutines
niepotrzebnie obciążają w tym przypadku procesor, zrób metodę która będzie ustawiać
canShoot
na true i wywołaj ją za pomocą
Invoke()
z odpowiednim opóźnieniem
http://wiki.unity3d.com/index.php?title=Which_Kind_Of_Array_Or_Collection_Should_I_Use?
Możesz sobię właśnie zrobić listę pocisków w tym pliku przy użyciu np. Generic List i przy jej pomocy usuwać pociski przy jakichś warunkach.
Lub dodać do pocisku skrypt który usunie go przy jakichś warunkach. To by było prostsze, po prostu w Update sprawdzasz jego pozycję, odległość od czegoś lub czas życia i ewentualnie go usuwasz.
http://unity3d.com/learn/tutorials/modules/beginner/scripting/destroy
Nawet nie widziałem kiedy Unity zrobiło takie ładne tutki ;]
Dobra, usuwa tak jak trzeba :D Dzięki wszystkim, jest tu lepsza pomoc niż na jakimkolwiek forum unity :D
Ja zawszę w
Start()
daję mu prędkość (rigidbody.velocity) i wywołuję destroy z odpowiednim opóźnieniem, żeby nie leciał w nieskończoność