VRChat用のワールド制作をしています。初心者です。Blenderは1年、Unityはアバター改変はそこそこやってきました。Udonなどはさっぱりです。box colliderをuseすると指定したオブジェクトに使われているマテリアルAを別のマテリアルBに変更できるようにしたいです。AIに言われたコードをcsにしてUdon behaviourに入れたのですが何も動きませんでした。どうすれば動くようになるのでしょうか。下にコードを貼ります。よろしくお願いいたします。using UdonSharp;using UnityEngine;using VRC.SDKBase;using VRC.Udon;public class MaterialSwitcher : UdonSharpBehaviour{ public GameObject targetObject; // オブジェクトを指定 public Material[] materials; // 切り替え用マテリアル private Renderer targetRenderer; void Start() { if (targetObject != null) { targetRenderer = targetObject.GetComponent\u0026lt;Renderer\u0026gt;(); } } public void SetMaterialByIndex(int index) { if (targetRenderer != null \u0026amp;\u0026amp; materials != null \u0026amp;\u0026amp; index \u0026gt;= 0 \u0026amp;\u0026amp; index \u0026lt; materials.Length) { targetRenderer.material = materials[index]; } }}

1件の回答

回答を書く

1230226

2026-01-26 00:05

+ フォロー

あなたのコードは基本的な構造は正しいですが、いくつかの点を修正してみましょう。特に、box collider との連携部分がありません。box collider をクリックしたときにマテリアルを変更するためには、OnTriggerEnterOnCollisionEnter メソッドを使用する必要があります。しかし、UdonSharpでは OnCollisionEnter は使用できないため、OnTriggerEnter を使用します。そのためには box colliderIsTrigger プロパティをオンにする必要があります。

以下のように修正してみてください:

csharp

using UdonSharp;

using UnityEngine;

using VRC.SDKBase;

using VRC.Udon;

public class MaterialSwitcher : UdonSharpBehaviour

public GameObject targetObject; // オブジェクトを指定

public Material[] materials; // 切り替え用マテリアル

public int nextMaterialIndex = 0; // 次に使用するマテリアルのインデックス

private Renderer targetRenderer;

void Start()

if (targetObject != null)

targetRenderer = targetObject.GetComponent();

}

}

public override void OnTriggerEnter(Collider other)

// 他のオブジェクトがcolliderに触れたときにマテリアルを変更

if (targetRenderer != null && materials != null && nextMaterialIndex < materials.Length)

targetRenderer.material = materials[nextMaterialIndex];

// インデックスを次のマテリアルに進める

nextMaterialIndex = (nextMaterialIndex + 1) % materials.Length;

}

}

public void SetMaterialByIndex(int index)

if (targetRenderer != null && materials != null && index >= 0 && index < materials.Length)

targetRenderer.material = materials[index];

}

}

}

このスクリプトを Udon Behaviour としてアタッチした後、targetObject にマテリアルを変更したいオブジェクトを指定し、materials に使用したいマテリアルの配列を設定してください。また、マテリアルを変更したいオブジェクトに box collider を追加し、IsTrigger をオンにしてください。

このように設定すれば、VRChat内で box collider をトリガーとして使用してマテリアルを変更できるようになります。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有