今日したことをメモ
壁にプレイヤーキャラが引っ付く
プレイヤーキャラから下方向にrayを飛ばす。そしてrayが当たった場所の法線ベクトルを取得。その法線ベクトルの逆の力をプレイヤーキャラに与えてやることによって、壁とかにずっとくっついていられる。なお、重力はオールゼロ
Vector3 normalvec; //メンバ変数
//第三引数にoutで指定すると衝突したオブジェクトの情報が入る
//第二引数、Vector3.downだとワールド座標の下になってしまう。
if(Physics.Raycast(transform.position, transform.up
if(Physics.Raycast(transform.position, transform.up
* -1, out hit, 10)){ //プレイヤーから下にRayを飛ばすなら、transfrom.up * -1に。(transformにはdownがないから)
// positionから下方向に10進んだ先までにオブジェクトがあればtrueが返されるので、ここの処理が実行される。
normalvec = hit.normal * -1;
//Physics.gravity = new Vector3(0, 0, 20f) * normalvec;は間違い。
ベクトル*ベクトルができないから
Physics.gravity = 20f * normalvec; }
Physics.gravity = 20f * normalvec; }
アニメーショントリガーのこと
Unityちゃんが机のcolliderにヒットした時に、walkアニメーションからsitアニメーションにしたい。そのためにトリガーを使用。
だけど、sitしている時にもコライダーにあたってtrueが返されてしまう。 ⇨
だから、walkの時のみにtrueだったらsitを発動する と変更
animationstatsをスクリプトで変更すればできるみたい。(まだ未完成)
やってみた↓
箱を用意
private Animator animator;
Start()とかで
animator = GetComponent<Animator> ();
関数内に
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
で、
if (stateInfo.nameHash ==
Animator.StringToHash ("Base Layer.WALK")) {
this.GetComponent<Animator> ().SetTrigger ("Sit");
}
やってみた↓
箱を用意
private Animator animator;
Start()とかで
animator = GetComponent<Animator> ();
関数内に
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
で、
if (stateInfo.nameHash ==
Animator.StringToHash ("Base Layer.WALK")) {
this.GetComponent<Animator> ().SetTrigger ("Sit");
}
0 件のコメント:
コメントを投稿