這真的很容易。
。找出你認爲這兩個物體可以分開的最大距離。
您需要做的第一件事是確定這兩個GameObjects將分開的最大距離值。您需要將該值傳入mapValue
函數的inValueMax
參數#2。
您可以確定最大值與此代碼:
public GameObject obj1;
public GameObject obj2;
void Update()
{
UnityEngine.Debug.Log(getSqrDistance(obj1.transform.position, obj2.transform.position));
}
public float getSqrDistance(Vector3 v1, Vector3 v2)
{
return (v1 - v2).sqrMagnitude;
}
運行它,再用手將每個對象/立方,然後同時獲得對象可以相互旅行與Debug.Log
消息的最高值。
看着你發佈的視頻我估計200
的距離值很好,但如果你想要一個完美的結果,你仍然必須用上面的腳本做實驗。
。使用的map
轉換0
和MAX_DISTANCE
距離範圍0f
和1f
範圍
float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax)
{
return (mainValue - inValueMin) * (outValueMax - outValueMin)/(inValueMax - inValueMin) + outValueMin;
}
它倍一些特定點之間的值到另一個。
例如,您需要使用Lerp
函數來執行此操作,並且Lerp函數將採用0
至1
值。 mapValue
函數可以將任何數字縮放到函數所需的0
和1
之間的範圍。
對於我來說,我會擴展到0
範圍200
值0f
和1f
範圍與mapValue
功能。
。最後,在顏色之間使用Color.Lerp(near, far, lerp);
來識別。 lerp值是#2的結果值。
代碼:
一旦你找到#1,該值插頭從腳本MAX_DISTANCE
變量下面應該工作:
public GameObject obj1;
public GameObject obj2;
Color near = Color.green;
Color far = Color.red;
const float MAX_DISTANCE = 200;
void Update()
{
//Get distance between those two Objects
float distanceApart = getSqrDistance(obj1.transform.position, obj2.transform.position);
UnityEngine.Debug.Log(getSqrDistance(obj1.transform.position, obj2.transform.position));
//Convert 0 and 200 distance range to 0f and 1f range
float lerp = mapValue(distanceApart, 0, MAX_DISTANCE, 0f, 1f);
//Lerp Color between near and far color
Color lerpColor = Color.Lerp(near, far, lerp);
obj1.GetComponent<Renderer>().material.color = lerpColor;
}
public float getSqrDistance(Vector3 v1, Vector3 v2)
{
return (v1 - v2).sqrMagnitude;
}
float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax)
{
return (mainValue - inValueMin) * (outValueMax - outValueMin)/(inValueMax - inValueMin) + outValueMin;
}
結果:
酷酷的尋找遊戲BTW –
@K Scandrett,非常感謝!每個級別都有他自己的主題。 – Jip1912