DOTweenのアニメーションを使って
オブジェクトを動かしたのですが、
Colliderを無視してアニメーションしてしまいます。
DOTweenを使って、「すり抜け」現象を回避するには
どのような対処法があるでしょうか、
ご存知の方がいらっしゃいましたら
是非教えていただきたいですm(_ _)m
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
一案として、下記のようなやり方ではどうでしょうか?
- 実際に動かしたいオブジェクト(名前は仮に「Sphere」とする)には
Collider
とRigidbody
をアタッチする。Is Kinematicはオフ。 - 空のオブジェクトを作り(名前は仮に「Anchor」とする)、
Rigidbody
をアタッチする。こちらはIs Kinematicをオンにしておく。Collider
はアタッチしない。 - Sphereに
SpringJoint
をアタッチし、Anchorと繋ぐ。Auto Configure Connected Anchorはオフにする。AnchorとConnected Anchorは(0, 0, 0)
とする。追従性をよくするためSpringは大きめにする。振動を抑制するためSphereのRigidbody
のDragもある程度大きくする。 - AnchorをDOTweenで動かす。Anchorは障害物を無視して動く。SphereはAnchorに引っ張られてついていくが、途中に障害物があるとひっかかる。
試しに下記スクリプトをAnchorにアタッチし...
C#
1using DG.Tweening; 2using UnityEngine; 3 4[RequireComponent(typeof(Rigidbody))] 5public class AnchorMotor : MonoBehaviour 6{ 7 [SerializeField] private Transform[] waypoints; 8 9 private new Rigidbody rigidbody; 10 private int waypointIndex; 11 12 private void Start() 13 { 14 this.rigidbody = this.GetComponent<Rigidbody>(); 15 this.MoveToNextWaypoint(); 16 } 17 18 private void MoveToNextWaypoint() 19 { 20 this.rigidbody.DOMove(this.waypoints[this.waypointIndex].position, 5.0f).OnComplete( 21 () => 22 { 23 this.waypointIndex = (this.waypointIndex + 1) % this.waypoints.Length; 24 this.MoveToNextWaypoint(); 25 }); 26 } 27}
SphereのRigidbody
のDragは100、SpringJoint
のSpringは250、Damperは0とした状態で、5つのウェイポイントをたどるようにAnchorを動かしてみたところ、下図のような見た目になりました。オブジェクトの位置を示すためウェイポイントには赤い菱形、Anchorには青い丸のアイコンを付けていますが、実際のゲーム画面上ではこれらは表示されないためSphereが単独で動いているように見えます。
投稿2020/06/16 14:22
総合スコア10811
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 02:27