2015年6月7日日曜日

今日したことをメモ

壁にプレイヤーキャラが引っ付く

プレイヤーキャラから下方向にrayを飛ばす。そしてrayが当たった場所の法線ベクトルを取得。その法線ベクトルの逆の力をプレイヤーキャラに与えてやることによって、壁とかにずっとくっついていられる。なお、重力はオールゼロ

Vector3 normalvec//メンバ変数

//第三引数にoutで指定すると衝突したオブジェクトの情報が入る
//第二引数、Vector3.downだとワールド座標の下になってしまう。
if(Physics.Raycast(transform.positiontransform.up 
* -1out hit10)){                                                                       //プレイヤーから下にRayを飛ばすなら、transfrom.up * -1に。(transformにはdownがないから)

// positionから下方向に10進んだ先までにオブジェクトがあればtrueが返されるので、ここの処理が実行される。
   normalvec = hit.normal * -1;

//Physics.gravity = new Vector3(0020f) * 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");
 }

0 件のコメント:

コメントを投稿