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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

95閲覧

Unityのアニメーションリギング MultiParentConstraint内の sourceObjectをランタイム中に変更したい。

surf2000

総合スコア6

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

1クリップ

投稿2025/06/10 02:07

実現したいこと

Unityのアニメーションリギング MultiParentConstraint内の sourceObjectをランタイム中にスクリプトから変更したい。

前提

キャラクターの手足にTwoBoneIK を設定し、MultiParentConstraintのConstraintedObjectにTwoBoneIKのターゲットを設定しています。
RigはTwoBoneIKとMultiParentConstraintでレイヤー分けしています。
RigBilderへはRig_MultiParentConstraint、Rig_TwoBoneIKの順で登録しています。

発生している問題・エラーメッセージ

sourceObjectにインスペクターから直接ターゲットを設定し
エディターシーン上でキャラクターのアニメーション編集中では上手く動作しています。

しかしながらランタイム中にスクリプトからsourceObjectへターゲットを設定しても動作が反映されません。
インスペクター上ではターゲットはsourceObjectに入ってます。

該当のソースコード

public class ParentConstraintData
{
public IK_ParentPart iK_ParentPart;
public MultiParentConstraint multiParent;
}

public bool SetPartnerTargetBone(IK_ParentPart parentPart, Transform target)
{
foreach(var p in parentConstraintDatas)
{
if (p.iK_ParentPart == parentPart)
{
var data = p.multiParent.data;

var newSources = new WeightedTransformArray(); newSources.Add(new WeightedTransform(target, 1f)); data.sourceObjects = newSources; p.multiParent.data = data; p.multiParent.weight = 1f; return true; } } return false; }

試したこと

ChatGPTでも質問してMultiParentConstraint.enabledのオン、オフなど試しましが出来ず、
最終的にはソースオブジェクトにターゲットとなり得るオブジェクトを最初から登録し重みずけで変更が確実という回答になりました。
しかしターゲットは常にシーン上にあるわけではないので困っています。

補足情報(FW/ツールのバージョンなど)

Unityのバージョンは2022.3.62f1
AnimationRigging 1.2.1
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

sourceObjectsをランタイム中に変更するのは困難なので別の方法で解決しました。

リレーとなる空オブジェクトをsourceObjectsにアタッチしキャラクターに保持させます。
Update内でリレーオブジェクトをターゲットオブジェクトに追従させる形で実現させました。

投稿2025/06/11 14:08

surf2000

総合スコア6

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

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

0

UnityのAnimation Riggingパッケージにある MultiParentConstraint の sourceObjects をランタイム中にスクリプトから変更する方法ですね。 sourceObjects を変更する: [My BK Experience](My BK Experience)
MultiParentConstraint の data.sourceObjects プロパティにアクセスして、WeightedTransformArray を操作します。WeightedTransformArray は配列のようにアクセスできます。

新しいソースを追加したり、既存のソースを変更したり、削除したりできます。

MultiParentConstraint の sourceObjects は WeightedTransformArray という構造体で管理されており、各 Transform とそのウェイトを含んでいます。これをスクリプトから操作するには、

投稿2025/06/11 04:04

leo64din

総合スコア6

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

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

surf2000

2025/06/11 13:51

WeightedTransformArrayの操作は該当のソースコードでも記載しているようにすでに試しています。 しかし自分の環境では動作しておりません。 rigBuilder.Build();で強制的に再構築すれば動くことには動きますが他のTowBoneIKが異常な動作になったりと使えない状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問