回答編集履歴

1 誤認識を修正

sakura_hana

sakura_hana score 11330

2019/04/16 11:25  投稿

Unity 2018.2.3f1ですが確認してきました。
やはり仕様変更入ってるか、私の勘違いだった気がします。
・質問1
以前こうだったか記憶が無いですが、現行版だと同様の方法で落下しました。
UseGravity・IsKinematic・相手側のRigidbody有無・Staticか否か等も変えてみましたが同様だったので、
現行の仕様は**『「衝突→スリープ→衝突相手が離れる(消える)」の場合はスリープが解除される』**でいいかと思います。
・質問2
今は特に思い当たらないです。(開発中に何か発見するかもしれませんが)
・質問3
こちらは私の勘違い(または仕様変更が入った)になります。
`transform.Translate`、`transform.position`、`rigidbody.MovePosition`、`rigidbody.position`のいずれもスリープが解除されました。(FixedUpdate内で確認)
なお質問文中の質問3のコードでログが常にTrueな理由は、質問への追記・修正依頼に書きましたが
「Debug.Logが呼ばれるのはif文に入っている時のみ=IsSleepingがTrueの時のみ」だからです。
Debug.Logをif文の外に置けば毎フレームの状況が分かります。
なお上記移動系コードが書かれた時点で(次のフレームを待たずに)IsSleepingはFalseになるらしく、移動系コードよりも後にDebug.Logを書くと常にFalse、移動系コードよりも前にDebug.Logを書くと移動系コード実行前の値(True or False)が表示されます。
Debug.Logをif文の外に置けば毎フレームの状況が分かります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る