• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

skrypt w unity

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
173 wizyt
pytanie zadane 15 maja 2016 w C# przez Jan1233 Użytkownik (590 p.)

witam, ostatnio z nudów zacząłem robienie gier2d w unity i napisałem skrypt powodujący poruszanie się platformy tam i z powrotem, jednak chciałbym aby po naciśnięciu ekranu(klawisza) platforma spadała w dół w tym miejscu gdzie aktualnie  się znajdowała ale nie wiem jak po mimo szukania w sieci. Skrypt to:

using UnityEngine;
using System.Collections;

public class MovingPlatform : MonoBehaviour {

	[SerializeField]
	Transform platform;

	[SerializeField]
	Transform startTransform;

	[SerializeField]
	Transform endTransform;

	[SerializeField]
	float platformSpeed;

	Vector3 direction;
	Transform destination;
		
	void Start (){
		SetDestination(startTransform);
	}

	void FixedUpdate(){
		platform.GetComponent<Rigidbody>().MovePosition(platform.position + direction * platformSpeed * Time.fixedDeltaTime);

		if(Vector3.Distance (platform.position, destination.position) < platformSpeed * Time.fixedDeltaTime){
			SetDestination(destination == startTransform ? endTransform : startTransform);
		}
	}


	void OnDrawGizmos(){
		Gizmos.color = Color.green;
		Gizmos.DrawWireCube(startTransform.position, platform.localScale);

		Gizmos.color = Color.red;
		Gizmos.DrawWireCube(endTransform.position, platform.localScale);
	}

	void SetDestination(Transform dest){
		destination = dest;
		direction = (destination.position - platform.position).normalized;
	}

}

 

1 odpowiedź

+1 głos
odpowiedź 15 maja 2016 przez niezalogowany

MovePosition nie jest zalecanym sposobem przesuwania obiektów jeżeli chcesz używać wbudowanej fizyki, bo mogą dziać się nieprzewidywalne rzeczy.

Zamiast tego albo użyj AddForce(), albo zmień wartość parametru .velocity, dzięki temu uzyskasz stałą prędkość, np

rb.velocity = new Vector2(dir*speed, rb.velocity.y);

Samo klikanie spacji powinno zmieniać np .gravityScale na 1 (na starcie ta wartość powinna wynosić 0) oraz resetować prędkość w osi X, czyli coś w stylu:

if (Input.isKeyDown("Space"))
{
  rb.gravityScale = 1.0f;
  rb.velocity = new Vector2(0, rb.velocity.y);
}

 

Podobne pytania

0 głosów
2 odpowiedzi 409 wizyt
pytanie zadane 2 maja 2016 w C# przez Youshimoto Nowicjusz (240 p.)
+1 głos
1 odpowiedź 464 wizyt
pytanie zadane 11 stycznia 2021 w C# przez kubaa322 Użytkownik (710 p.)
0 głosów
1 odpowiedź 419 wizyt
pytanie zadane 11 stycznia 2021 w C# przez Feeleq Nowicjusz (120 p.)

93,439 zapytań

142,431 odpowiedzi

322,674 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...