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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

Q&A

1回答

2717閲覧

[Unity]IKで追従先のオブジェクトの移動制限を掛けたい

johnpaul

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

0グッド

0クリップ

投稿2017/04/25 03:27

###前提・実現したいこと
現在人型のモデルで関節を引っ張ることが出来る操作を実装しています
以下のサイトを参考にIKという機能を用いてとりあえず関節を引っ張ることが出来る様になったのですが
http://onoty3d.hatenablog.com/entry/2015/03/16/183650
関節は可動範囲内のみでしか移動できないのに対し追従先のオブジェクトが関節の可動範囲外を超えて移動できてしまう為
これを関節の可動範囲内のみに移動を制限したいです

###該当のソースコード

// 人型のモデルにIKを設定する処理 public class IK : MonoBehaviour { [SerializeField] private Transform mRightHand; // 関節(右手)の追従先のオブジェクト public void OnAnimatorIK(int layerIndex) { Animator animator = GetComponent<Animator>(); // 関節(右手)にIKを設定する処理 animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1); animator.SetIKPosition(AvatarIKGoal.RightHand, mRightHand.position); animator.SetIKRotation(AvatarIKGoal.RightHand, mRightHand.rotation); } }
// 関節の追従先オブジェクトを移動させる処理 GameObject rightHand = human.RightHand; // マウス移動により追従先オブジェクトのポジションを変更して関節も移動させる rightHand.transform.position += transform.rotation * new Vector3(Util.MouseX, Util.MouseY) * Time.deltaTime; // 上の処理に移動制限を掛けたいが分からない

###補足情報(言語/FW/ツール等のバージョンなど)
Unity 5.5.2f1
Blender 2.77

宜しくお願い致します

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

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

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

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

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

guest

回答1

0

「アンカーとなるオブジェクトを関節の可動域内の座標にしか移動させない」という処理はできません。それを計算するのに必要な情報はモデルにはないからです。あるいは面倒すぎるからです。
次善の策として「この範囲にしか移動させない」と決め打ちしてプログラミングします。ただそれも基本的にはやらず、やらせたい事に応じて異なるアプローチで解決します。

ただ、質問に書いてあるように、アンカーが遠くに行ったからと言って腕とかがおかしなことになるわけではないので、それを厳密にやろうとも考えません。厳密にやりたかったらモーションを作り込む方がはるかに楽だからです。

投稿2022/02/28 12:34

bboydaisuke

総合スコア5275

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問