#環境
Unity5.4
mono4.4.2
#やっていること
ゲームオブジェクトを適当にひとつ作りフォントを黄色にした後、以下のスクリプトをコンポーネントとして埋め込みました。
このスクリプトはマウスでクリックした場所にそのオブジェクトがあれば赤色にし、時間経過で元の黄色に戻るというスクリプトです。
using UnityEngine; using System.Collections; public class myscript : MonoBehaviour { GameObject obj; Color c; bool flg = false; int counter = 0; void Update () { if (Input.GetMouseButtonDown (0)) { Vector3 pos = Input.mousePosition; Ray ray = Camera.main.ScreenPointToRay (pos); RaycastHit hit; if (Physics.Raycast (ray, out hit, 100f)) { obj = hit.collider.gameObject; c = obj.GetComponent<Renderer> ().material.color; obj.GetComponent<Renderer> ().material.color = Color.red; counter = 100; flg = true; } } if (flg) { if (--counter == 0) { flg = false; obj.GetComponent<Renderer> ().material.color = c; } } } }
実行し、クリックすると少しの間赤色になった後、黄色に戻ります。
このゲームオブジェクトのプレハブを作り、ゲームオブジェクトを幾つか複製して実行。
#わからないこと
赤色にはなるのですが、少し待っても元の色(黄色)に戻りません。
いろいろ試行錯誤してみて、スクリプトを以下のように変更してみました。
using UnityEngine; using System.Collections; public class myscript : MonoBehaviour { GameObject obj; Color c; bool flg = false; int counter; void Start () { c = GetComponent<Renderer> ().material.color; // 変更点 } void Update () { if (Input.GetMouseButtonDown (0)) { Vector3 pos = Input.mousePosition; Ray ray = Camera.main.ScreenPointToRay (pos); RaycastHit hit; if (Physics.Raycast (ray, out hit, 100f)) { obj = hit.collider.gameObject; obj.GetComponent<Renderer> ().material.color = Color.red; counter = 100; flg = true; } } if (flg) { if (--counter == 0) { flg = false; GetComponent<Renderer> ().material.color = c; // 変更点 } } } }
このスクリプトだと最後にすべて黄色に戻りますが、想定していた結果とは違いました。
これだと、いくつか赤色にした場合、すべて一斉に黄色になってしまします。それぞれのオブジェクトが、それぞれクリックした時間から一定時間後に元の色に戻る、というようにしたいです。
例えば、A,Bというオブジェクト(プレハブ)があったとします。まずAをクリックして赤色にし、次にBをオブジェクトを赤にします。Aを最初に押したので、Aが先に元の色に戻り、次にBが元の色に戻る、というようにです。
#疑問点
一つ目は、最初のスクリプトではなぜ元の色に戻らないか。
二つ目は、どのようにすればうまくいくか。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。