Unity で、 ZENRIN さんが出してる otakuc city のビルのオブジェクトをXBOXのコントローラーの joystick button 5 を押しているときだけテクスチャを、自前の物に変えたいのですが、以前の質問で一部しか変わらなかったのですが、回答をいただいて修正したところ、ボタンを押している時はビル全体のテクスチャを、自分で設定したテクスチャに変えることが出来ましたが、離した後は何もテクスチャがない状態になりました。
そこで自前のテクスチャに変える前に現在貼り付けられているテクスチャを取得して別の変数に格納して、ボタンを離した時に変更前のテクスチャを貼り付けようと考え、下の[//問題のコード]の部分を追加したところですが、
Material doesn't have a texture property 'mat'
UnityEngine.Material:GetTexture(String)
allmat2:Update() (at Assets/ZRNAssets/005339_08932_25_14/Scripts/Util/allmat2.cs:30)
というエラーが出ます。これはmatがテクスチャファイルの名前でないからだと思うのですが、テクスチャファイル名を取得する方法を調べたのですが、なかなか見つからないです。
どのようにすればテクスチャファイル名を取得できますでしょうか?
また、以下のコードとは別の方法があれば教えて頂けると幸いです。
ちなみにimage と image2 はスクリプトを適応したオブジェクトを選択すると、テクスチャをドラッグ&ドロップで入れられる枠が出るのですが、image の方になにも入れずとも元々ビルのオブジェクトに貼られていたテクスチャを取得して、ボタンを離した時にその元のテクスチャに戻るようにしたいです。
よろしくお願いします。
using UnityEngine;
using System.Collections;
public class allmat2 : MonoBehaviour
{
//テクスチャを用意
public Texture image;
public Texture image2;
// Use this for initialization void Start() { //Material[] mats = GetComponent<Renderer>().materials; } // Update is called once per frame void Update() { if (Input.GetKey(KeyCode.Joystick1Button5)) { //GetComponent<Renderer>().material.mainTexture = image2; //新しいテクスチャを反映する Material[] mats = GetComponent<Renderer>().materials; foreach (Material mat in mats) { image = mat.GetTexture("mat"); //問題の行 mat.mainTexture = image2; } } if (Input.GetKeyUp(KeyCode.Joystick1Button5)) { //GetComponent<Renderer>().material.mainTexture = image; //古いテクスチャを反映する Material[] mats = GetComponent<Renderer>().materials; foreach (Material mat in mats) { mat.mainTexture = image; } } }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/17 14:07