Unity3d ako správne odpočítavať timer vo WayPoint – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Unity3d ako správne odpočítavať timer vo WayPoint – JavaScript, AJAX, jQuery – Fórum – Programujte.comUnity3d ako správne odpočítavať timer vo WayPoint – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
juraj1750
Newbie
15. 5. 2018   #1
-
0
-

Ako upraviť kód kde sa postava  zastaví pri bode 3 napr na 9 sekúnd a po uplinutí času by sa mala pohnúť.
Hodnotu načíta 9s Ale nechce správne odpočitávať timer -= Time.deltaTime; tu je kód

 Problematická časť kódu je vyznačená tučným písmom. Ďakujem za rady

#pragma strict

 public var wayPoints : Transform[];
 var enemy:  GameObject;
var player:  GameObject;
public var vehicleSpeed : float;
public var curWayPoint : int;
public var turningSpeed : float;
public var doPatrol : boolean = true;
public var target : Vector3;
public var moveDirection : Vector3;
public var Velocity : Vector3;
 var minvzdialenostsledovania :float=3;
 var moveSpeed :float=3;
 
private var animator:Animator;
var idleAnimation:AnimationClip;
var walkAnimation:AnimationClip;
var attackAnimation:AnimationClip;
var diem:AnimationClip;
var rb: Rigidbody;
private var nav:NavMeshAgent;

var stop:boolean= true;
public var timer:float;
function Start()
{
var animation : Animation;
animator=GetComponent(Animator);
rb = GetComponent.<Rigidbody>();

}
function Update()
{ 
var distance = Vector3.Distance(enemy.transform.position, player.transform.position);
Debug.Log(distance);

	if(distance>=3 && distance<=4  ){
	Debug.Log("pozoruje"+distance);
 lookAtPlayer();
rb.velocity=Vector3.zero;
GetComponent.<Animation>().Play("Idle_02");  
GetComponent.<Animation>().Stop("Walk");
}else if(distance>4){
Debug.Log("strazi objekt"+distance +"bod"+curWayPoint);

	/*tu sa otoci*/
	rigidbody.rotation = Quaternion.Slerp(enemy.transform.rotation,Quaternion.LookRotation(-moveDirection),turningSpeed * Time.deltaTime);	

Waipointss();

}
	 if(distance<=3){    
GetComponent.<Animation>().Play("Walk");
GetComponent.<Animation>().Stop("Idle_02");  
  
Debug.Log("prenasleduje"+distance);
 enemy.transform.position += enemy.transform.forward * 1 * Time.deltaTime;
  lookAtPlayer();
}else{
	//Waipointss();
	}
	}

function Waipointss(){

if(curWayPoint < wayPoints.Length)
	{
		target = wayPoints[curWayPoint].position;
		moveDirection = target - enemy.transform.position;
		Velocity = rigidbody.velocity;
		
		if(moveDirection.magnitude < 1)
		{
			curWayPoint++;
		}
		else
		{
	Velocity = moveDirection.normalized * vehicleSpeed;
	}		
	}
	else
	{
		if(doPatrol)
		{
			curWayPoint = 0;			
		}
		else
		{
			Velocity = Vector3.zero;
		}
	}
	rigidbody.velocity = Velocity;

	/*tu sa otoci*/
	rigidbody.rotation = Quaternion.Slerp(enemy.transform.rotation,Quaternion.LookRotation(moveDirection),turningSpeed * Time.deltaTime);	

if(curWayPoint==3){ 

timer = 9.0;
    if (timer <= 0) {
timer -= Time.deltaTime;
        //We only need to update the text if the score changed.
GetComponent.<Animation>().Play("Walk");
        //Reset the timer to 0.
      timer = 0.0;      
    }else{

Debug.Log("timer"+timer);

GetComponent.<Animation>().Stop("Walk");
GetComponent.<Animation>().Play("Idle_02"); 
rb.velocity=Vector3.zero; 
Debug.Log("cas"+timer);
}

}

GetComponent.<Animation>().Play("Walk");
}
	function lookAtPlayer(){
	   var relativePos =   player.transform.position-enemy.transform.position ;
        var rotation = Quaternion.LookRotation(relativePos);
           enemy.transform.rotation = rotation;
  	}



Nahlásit jako SPAM
IP: 88.212.36.–
MilanL+1
Věrný člen
15. 5. 2018   #2
-
0
-

ahoj,

jako obvykle máš nastavení hodnoty na špatným místě, v podstatě pokud jsi na WP 3, tak se tam zastavíš natrvalo - bo pokaždé ten čas nejdřív nastavíš a pak porovnáváš, takže  máš pokaždé stejnou situaci. Navíc jestli dobře čtu program ta by ses měl zastavit na WP2 a ne 3, bo když dojdeš do bodu, tak v té funkci nejdřív posuneš na další WP a až pak kontroluješ Timer.

zkus nastavení timeru dát do podmínky

if (moveDirection.magnitude < 1) {
. . if(curWayPoint==3) timer = 9.0;
. . curWayPoint++;
}
 

v tý další části tu vnější podmínku WP==3 a nastavení timeru na 9s zruš a nech jen tu část s if(timer<=0)

 

Nahlásit jako SPAM
IP: 91.139.9.–
juraj1750
Newbie
15. 5. 2018   #3
-
0
-

#2 MilanL
a ako to mám opraviť aby to správne fungovalo?

Nahlásit jako SPAM
IP: 88.212.36.–
MilanL+1
Věrný člen
15. 5. 2018   #4
-
0
-

#3 juraj175
EDIT původního

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Věrný člen
15. 5. 2018   #5
-
0
-

#3 juraj175
Ty stavy pro daný WP musíš nastavovat tam, kde zjišťuješ, že jsi na něj došel.

Nahlásit jako SPAM
IP: 91.139.9.–
juraj1750
Newbie
15. 5. 2018   #6
-
0
-

#5 MilanL
Vdaka funguje,nevšimol som si kod

if (moveDirection.magnitude < 1) {
 if(curWayPoint==3) timer = 9.0;
 curWayPoint++;
}
 

Nahlásit jako SPAM
IP: 88.212.36.–
peter
~ Anonymní uživatel
3286 příspěvků
15. 5. 2018   #7
-
0
-

 Ja bych si to napsal nejak takto, kdyby slo o javascript. Prijde mi, ze celkem michas dokupy samotny pohyb, animace s questy, jako je hlidkovani a pod.

postava = {};
postava.name = "juraj175"
postava.speed = 1
postava.pozice = {x:0, y:0};
postava.quest = [];
postava.quest[0] = false; // mysleno tak, ze quest jeste nemam splneny
postava.questOpened = null
postava.questTime = null;

function nextStep()
{
// questy
if (postava.questTime>0)
  {
  postava.questTime--;
  if (postava.questTime==0)
     {questClose(postava, postava.questOpened);}
  return;
}
// pohyb
presunXY();
// koize s objekty na mape
if (postava.pozice.x=objekt[0].pozice.x && postava.pozice.y=objekt[0].pozice.y && postava.quest[0]=false)
  {questOpen(postava,0);}
}

function questOpen(postava,id)
{
if (id == 0)
  {
  postava.questOpened = id;
  postava.questTime = 5;
  }
}

function questClose(postava,id)
{
postava.questOpened = null;
postava.questTime = 0;
if (id == 0)
  {
  postava.odmena++
  }
}


setTimeout(nextStep,300);	// nastaveni casovace v js, opakuje kazdych 300ms funkci nextStep
Nahlásit jako SPAM
IP: 2001:718:2601:258:8cd1:96...–
MilanL+1
Věrný člen
15. 5. 2018   #8
-
0
-

#7 peter
taky bych to osobně řešil jinak, ale už jsem si zvykl, že každej si to dělá po svým.

Juraj obvykle jen špatně umisťuje, jako by mu chyběla představivost co ten kod, kdy vlastně dělá, jaké jsou v daných okamžicích stavy proměnných.

Nahlásit jako SPAM
IP: 91.139.9.–
juraj1750
Newbie
15. 5. 2018   #9
-
0
-

#8 MilanL

Asi,tak nejako keď som v programovaní samouk, a nemá mi kto to poriadne vysvetliť,ale pomaly na to prídem aj s vašou pomocou

Nahlásit jako SPAM
IP: 88.212.36.–
peter
~ Anonymní uživatel
3286 příspěvků
15. 5. 2018   #10
-
0
-

Tak, muj kod vypada nekdy podobne :) Taky si zacinam zvykat na jakysi poradek, strukturu. Hodne k tomu pomahaji class, ktere si obcas vygoogluji, kdyz hledam nejaky problem. V ramci class resi jeden ukol. Ono to pak zvysuje prehlednost a logiku.
Cili, nemichat misto, kde resim eventy, polohu a questy fo jedne funkce. Proto jsem ten kod napsal.  Neni to mysleno jako kritika. Tam pak vim, ze veci tykajici se postavy se resi pres promennou postava. Ze timer, ktery resi quest, bude u questu a ne jako jakysi globalni time. mozna bych tam udelal jeste jednu zmenu :)

postava.quest = [];
postava.quest[0] = false; // mysleno tak, ze quest jeste nemam splneny
postava.questOpened = null
postava.questTime = null;
---
postava.questy = [];
postava.questy[0] = false; // false nebo null, typeof 'undefined' (v js)
postava.quest = null; // nebo {id:123, time: 456};

Cili, sleduji, ktere questy ma hotove posle toho, zda tam ma true. A pokud ma guest!=null. U hry jako Wow pak muzes mit nekolik questu najednou s ruznymi parametry (neprijemne ve Wow jsou s omezenym casem). Daily questy, ktere je mozne udelat jednou za den, treba.

Nahlásit jako SPAM
IP: 2001:718:2601:258:8cd1:96...–
juraj1750
Newbie
15. 5. 2018   #11
-
0
-

Ešte mám otázku. Ako prehrať animačný klip len raz, aby sa stále neopakoval?

GetComponent.<Animation>().Play("Die");

Animačná klip

Add Loop Frame je odškrtnuté

Wrap Mode je once

a typ animácie je Legacy.

A dá sa klip prekopírovať do prefab?

Nahlásit jako SPAM
IP: 88.212.36.–
e
~ Anonymní uživatel
140 příspěvků
před 16 hodinami   #12
-
0
-

Nahlásit jako SPAM
IP: 42.49.180.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Ako správne programovať — založil Anonym

Zkušenosti v Unity3D — založil Michal Krlín

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý