Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Unity C# Roll Cube


Rekomendowane odpowiedzi

Opublikowano

Znacie może jakiś prosty sposób na toczenie cuba? Chodzi mi o to żeby po kliknięciu się przewracał w danym kierunku. 

Opublikowano

Coś jak tutaj?

http://store.steampowered.com/app/38720/

 

Myślę, ze można to rozwiązać poprzez ruch nie związany z siłą. Zwyczajnie przemieścić klocek do miejsca X w czasie y, a przy okazji dodać rotację + ewentualnie mały podskok gdy stoi na krawędzi.

 

Ewentualnie, choć nie wiem, czy by to zadziałało. Dodać childs na brzegach sześcianu i działać na nie siłą jednocześnie zwiększając tarcie.

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

A możesz jeszcze powiedzieć coś więcej co ten cube ma robić? Czy chodzi tylko o uzyskanie toczenia się?

 

Zwykłe przetoczenie się uzyskałem z podstawowym kodem:

using System;
using UnityEngine;

public class Cube : MonoBehaviour 
{
	public float thrust;
	public Rigidbody rb;

	void Start() 
	{
		rb = GetComponent<Rigidbody>();
	}

	void FixedUpdate() 
	{
		rb.AddForce(transform.forward * thrust);
	}
}

Dokładnie to podał Ci @skprime

jak chcesz, to dorzucę Ci filmik. Oczywiście wiele się zmieni, jeśli cube ma robić coś jeszcze.

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

 

Dodaj komponent Rigidbody do Entity i zadziałaj na niego siłą (Rigidbody.AddForce).

 

http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

Wybacz, może nie sprecyzowałem o co mi chodzi. Chcesterowac tym cubem ale żeby się nie przesuwał tylko toczył

 

 

No to tak jak mówiłem. Dodajesz Rigidbody, nie blokujesz rotacji, blokujesz pozycje Y i działasz siłą w odpowiednim miejscu. Cube będzie się toczył.

Opublikowano

No właśnie tylko zależy dokładnie o co chodzi, bo jeśli chodzi mu o to aby gracz sterował cubem po kratkach, to dodawanie sił w takim wypadku doprowadzi do chaosu.

Jeśli chodzi o coś takiego, to można dać zwyczajnie transform position wraz z animacją toczenia i dawać możliwość kolejnego ruchu jedynie po zakończeniu poprzedniego.

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

No właśnie tylko zależy dokładnie o co chodzi, bo jeśli chodzi mu o to aby gracz sterował cubem po kratkach, to dodawanie sił w takim wypadku doprowadzi do chaosu.

Jeśli chodzi o coś takiego, to można dać zwyczajnie transform position wraz z animacją toczenia i dawać możliwość kolejnego ruchu jedynie po zakończeniu poprzedniego.

Właśnie chodzi mi o to co podałeś, żeby się tak obracał ale sterował nim gracz. 

Opublikowano

Opisz więc dokładnie co to ma być, to leiej będziemy mogli Ci pomóc :)

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano
 public var speed = 45.0; //Predkosc
 private var offset = 0.5; //Offset
 private var transform : Transform; //Transform naszego Entity
 
 private var rotating = false; //Aktualny stan rotacji
 
 function Start()
 {
     transform = transform;
 }
 
 function Update()
 {
     var position : Vector3;
     
     if (Input.GetKeyDown(KeyCode.UpArrow) && !rotating)
     {
         position = Vector3(transform.position.x, transform.position.y - offset, transform.position.z + offset);
         Roll(position, Vector3.right, 90.0);    
     }
     else if (Input.GetKeyDown(KeyCode.DownArrow) && !rotating)
     {
         position = Vector3(transform.position.x, transform.position.y - offset, transform.position.z - offset);
         Roll(position, -Vector3.right, 90.0);    
     }
     else if (Input.GetKeyDown(KeyCode.RightArrow) && !rotating)
     {
         position = Vector3(transform.position.x + offset, transform.position.y - offset, transform.position.z);
         Roll(position, -Vector3.forward, 90.0);    
     }
     else if (Input.GetKeyDown(KeyCode.LeftArrow) && !rotating)
     {
         position = Vector3(transform.position.x - offset, transform.position.y - offset, transform.position.z);
         Roll(position, Vector3.forward, 90.0);    
     }
 }
 
 function Roll(position : Vector3, axis : Vector3, degrees : float)
 {
     var current = 0.0;
     
     rotating = true;
     
     while (current != degrees)
     {
         current = Mathf.MoveTowards(current, degrees, Time.deltaTime * speed);
         transform.RotateAround(position, axis, Time.deltaTime * speed);
         yield;
     }
     
     rotating = false;
 }

Oczywiście jeżeli chcesz wersje C# to napisz. :)

Opublikowano

mi by się przydała wersja na c# z lepszym omówieniem co robi która linia, bo nie do końca rozumiem jak ten kod działa.

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...