キャストしているレイが特定のオブジェクトに当たるかどうかに基づいて、実行時にオブジェクトのマテリアルの色を変更しようとしています。プログラムを終了したら、元のマテリアルの色に戻したいと思っています。
切り替えたい素材を含むメニューには、ユーザーが選択しようとしている素材を知らせるハイライト機能があります。ここ数日、これを機能させようとしてきましたが、次の問題がありました。
目的のマテリアル カラーのインスタンスがゲーム オブジェクトにアタッチされていますが、レンダリングされたマテリアルは変更されません
必要な実際のマテリアルではなく、ハイライト マテリアルの色がゲーム オブジェクトに配置される
私はこれを修正する方法についてのアイデアを使い果たしました.これについては、これまでに持っているものを見るために新鮮な目が必要なトンネルビジョンを得ました.
誰もこれをやったことがありますか?私が間違っていることを教えてください。
これは、私が取り組んできたコードの現在の状態です。
プログラムが終了したら元の素材に戻ることができるように、元の素材を保存する私のクラス。
public GameObject targetMaterial;
public Color orignalMaterial;
//store GO original colour
void Awake()
{
orignalMaterial = targetMaterial.renderer.material.color;
}
//highlight code
public void ChangeObjectMaterialColour(Color materialColour)
{
targetMaterial.renderer.material.color = materialColour;
}
//
void OnApplicationQuit()
{
targetMaterial.renderer.material.color = orignalMaterial;
}
マテリアルの色を変更しようとしている方法には、切り替えたい 3 つの異なるオプションがあります。
ChangeObjectColour new_colour1;
ChangeObjectColour new_colour2;
ChangeObjectColour new_colour3;
void Start ()
{
new_colour1 = GameObject.Find("Colour 1").GetComponent<ChangeObjectColour>();
new_colour2 = GameObject.Find("Colour 2").GetComponent<ChangeObjectColour>();
new_colour3 = GameObject.Find("Colour 3").GetComponent<ChangeObjectColour>();
}
void CastRay()
{
if (Physics.Raycast(transform.position, fwd, out hit))
{
foreach(string t in _tags)
{
if(hit.collider.gameObject.tag == t)
{
HighLight(hit.collider.gameObject);
hitTaggedObject = true;
}
}
if(hit.collider.gameObject.tag == "Colour1")
{ new_colour1.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
if(hit.collider.gameObject.tag == "Colour2")
{ new_colour2.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
if(hit.collider.gameObject.tag == "Colour3")
{
new_colour3.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
}
誰かが私が間違っていることを見ることができますか?