質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3000閲覧

unity otaku city ビルのテクスチャのすべてをスクリプトで変更する方法2

unknown28169189

総合スコア13

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/11/15 09:39

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; } } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Material.GetTexture はテクスチャファイルの名前ではなく、そのテクスチャが適用されたシェーダーのプロパティ名で指定します。
おそらく下記の指定でいけると思います。
image = mat.GetTexture("_MainTex");

[参考URL]
https://docs.unity3d.com/ja/current/ScriptReference/Material.GetTexture.html

投稿2016/11/17 00:44

Kapustin

総合スコア1186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問