---
# System prepended metadata

title: 2Dアクションゲームを作るうえでの諸問題(ver.2019)

---

# 2Dアクションゲームを作るうえでの諸問題(ver.2019)
## キャラクターモデルをどうするか
3Dのコライダーを使うのはあまり適当とは言えない。処理する量が増えるし、予期せぬトラブルが入り込む余地があるからである。よって、2Dの衝突判定を行うものとする。

3dモデルを使用する場合、3dのスクショを撮って取り込む方式がある模様。めんどくさそう。3DのRigidbodyでFreese使えば何とかなら…ないか。

**同じ位置にモデル置けばよくね。どうせ判定しないなら、問題なさそう**

## 衝突判定問題
transformをいじるのはワープなので当然なし。

### FixedUpdate
徹底すべきなのは移動はここで呼ぶこと。一方で、攻撃などのボタン押下の瞬間を捉えるのはUpdateやコルーチンで行ったほうが良い。FixedUpdateは物理演算前に必ず行われるが、回数が不定だからである。

### isKinematic
他のRigidbodyなどから受ける影響を完全に無視するようになる。絶対強者。

### MovePosition
rigidbodyの位置を動かすあれ。実はそこに移動する為の速度を与えているようである。つまり、実質AddForce...?少なくともPositionに直代入すると瞬間移動のようになるようで、移動間の接触を完全に無視する。

**とすると、移動速度を求めるための時間はどこから捻出しているのか。**
→次回の物理演算更新までに移動するようである。あれ、これだとFixedUpdateの回数次第で変わっちゃうような。つまり、Updateで移動判定しても問題がないのでは。

Update(){MovePosition()}→FixedUpdate&物理更新(ここで移動が行われる)→n回(こちらではもう移動は行わない)→Update(){MovePosition()}

###### MovePosition時のKinematic
| |Kinematic |Dynamic |
|---|---|---|
|**Kinematic** |無視 |押し出す|
|**Dynamic**|押し出される |無視 |

https://docs.unity3d.com/ja/current/ScriptReference/Rigidbody2D.MovePosition.html

### AddForce
ガチ力学。少しずつ力を加えたり、力積にしてドカンと与えたりできる。扱いが難しい為、気持ちいい挙動に使うにはやや工夫が必要そう。ギミックや演出なら使いやすいかも。

## クラス関係
基本はMVC

# カメラ制作タスク
## キャラクターに追従
指定された移動数値だけ移動する。
## 枠外を映さない
一定の枠が写っている場合は、動かない。
カメラの枠をゲームオブジェクトで用意しておいて、衝突判定でやる。
## 寄る
演出的に寄って見せたい。画角を変更する。
### 画角って？
