2014-11-28 6 views
0

플레이어가 스프린트 (시프트) 할 때 온도에 추가하고 싶지 않을 때 빼기를 원합니다. 온도는 그것이 시작된 시점 (전속력으로 달리기 전)보다 낮거나 특정 지점을 초과해서는 안됩니다. 스프린트가 모든 영향을 미치지 않기 때문에 x보다 높거나 x보다 작 으면 사용할 수 없습니다.Unity를 사용하는 Unity의 온도계 C#

희망이 없습니다 ... 나는 그것이 효과가있을 것이라고 생각 했습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

float tempTime; 
public int temperature = 32; 

    if (Input.GetKeyDown(KeyCode.LeftShift) && temperature == originalTemp) 
     originalTemp = temperature; 

    if (Input.GetKeyUp(KeyCode.LeftShift) && Input.GetKeyUp(KeyCode.W) && temperature == originalTemp) 
     originalTemp = temperature; 

    if (Input.GetKey(KeyCode.LeftShift)) 
    { 
     if (tempTime >= 5f && temperature <= originalTemp * 1.25f && temperature >= originalTemp) 
     { 
      temperature++; 
      tempTime = 0; 
     } else { 
      tempTime += Time.deltaTime; 
     } 
    } else if (!Input.GetKey(KeyCode.W)) { 
     if (tempTime >= 5f && temperature <= originalTemp * 1.25f && temperature >= originalTemp) 
     { 
      temperature--; 
      tempTime = 0; 
     } else { 
      tempTime += Time.deltaTime; 
     } 
    } 

답변

0
대신 tempTime

당신이, 당신이 증가하거나 당신이 여부에 따라 Time.deltaTime에 비례하는 양으로 temperature을 감소해야 질주하고 시간을 추적 할 나 : 여기

코드입니다 전속력으로 달리고 있지 않다. 이 온도는 사용자가 정의하는 최소 및 최대 온도 범위 내에서 유지되어야합니다.

또한 originalTemp = temperature 줄/if 문은 값이 이미 동일한 경우에만 설정을 수행하기 때문에 그대로 쓸모가 없습니다. 어쨌든 원본을 알아야 할 필요는 없습니다. 최소 온도 (최대) 및 최대 온도 (과열)입니다.

이 바른 길에 당신을 얻을해야합니다

public float minTemperature = 32; 
public float temperature = 32; 
public float maxTemperature = 105; 
// this defines both heatup and cooldown speeds; this is 30 units per second 
// you could separate these speeds if you prefer 
public float temperatureFactor = 30; 
public bool overheating; 
void Update() 
{ 
    float tempChange = Time.deltaTime * temperatureFactor; 
    if (Input.GetKey(KeyCode.LeftShift) && !overheating) 
    { 
     temperature = Math.Min(maxTemperature, temperature + tempChange); 
     if (temperature == maxTemperature) 
     { 
      overheating = true; 
      // overheating, no sprinting allowed until you cool down 
      // you don't have to have this in your app, just an example 
     } 
    } else if (!Input.GetKey(KeyCode.W)) { 
     temperature = Math.Max(minTemperature, temperature - tempChange); 
     if (temperature == minTemperature) 
     { 
      overheating = false; 
     } 
    } 
}