unityで、terrainで作った壁を登れなくしたいです。
キャラクターがジャンプ中に移動方向に進むと、terrainで作った急斜面な山や壁を登れてしまいます。
滑り落ちるのが理想です。
PhysicMaterialで摩擦を0にしてもダメでした。cubeなどで作った壁は滑り落ちるのですが、terrainは若干斜めになっているのか、キャラクターをジャンプ中に移動させるとterrainに沿って徐々に上に上がっていってしまいます。
terrainで作ったオブジェクト登らせず滑り落とす方法はありますか?
Koopaが👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
C#
1using UnityEngine; 2using System.Collections; 3 4public class PlayerScript : MonoBehaviour { 5 6 private float h; 7 private float v; 8 9 private float speed; 10 private float jumpspeed = 30f; 11 12 private CharacterController cc; 13 private Vector3 dir; 14 15 //以下Raycast関連変数 16 int layerMask = 1 << LayerMask.NameToLayer("Ground"); 17 bool isSliding; 18 19 RaycastHit slideHit; 20 21 float gravity = 40.8f; 22 float slideSpeed=30.0f; 23 24 // Use this for initialization 25 void Start () { 26 h = 0; 27 v = 0; 28 speed = 20; 29 dir = Vector3.zero; 30 cc = gameObject.GetComponent<CharacterController> (); 31 Physics.gravity = new Vector3(0, 20.81f, 0); 32 } 33 34 // Update is called once per frame 35 void Update () { 36 37 h = Input.GetAxis ("Horizontal") * speed; 38 v = Input.GetAxis ("Vertical") * speed; 39 40 if (Physics.Raycast (transform.position, Vector3.down, out slideHit)) { 41 Debug.Log ("Ray出てます!!!"); 42 //衝突した際の面の角度とが滑らせたい角度以上かどうかを調べます。 43 if (Vector3.Angle (slideHit.normal, Vector3.up) > cc.slopeLimit) { 44 Debug.Log ("slopeLimitを超えました" + cc.slopeLimit); 45 isSliding = true; 46 } else { 47 Debug.Log ("slopeLimit以下になりました" + cc.slopeLimit); 48 isSliding = false; 49 } 50 } 51 52 53 if (cc.isGrounded) 54 { 55 dir = new Vector3(h,0,v); 56 dir = transform.TransformDirection(dir); //ジャンプ軌道 57 58 // dir *= speed; 59 60 if (Input.GetKeyDown(KeyCode.Space)) 61 { 62 Debug.Log("ジャンプしました"); 63 dir.y = jumpspeed; 64 } 65 if (isSliding) 66 {//滑るフラグが立ってたら 67 Debug.Log("滑る処理です"); 68 Vector3 hitNormal = slideHit.normal; 69 dir.x = hitNormal.x; 70 dir.y = gravity * Time.deltaTime;//重力落下 71 dir.z = hitNormal.z; 72 } 73 } 74 75 76 77 dir.y -= 50f * Time.deltaTime; 78 79 80 cc.Move (dir * Time.deltaTime); 81 82 83 84 //Debug.Log ("" + h + "," + v +","+ jumpspeed); 85 } 86 87 void OnCollisionEnter(Collision col) 88 { 89 Debug.Log("Hit!"); 90 if (col.gameObject.CompareTag("Target")) { 91 Destroy(col.gameObject); 92 } 93 } 94} 95
参考になれば幸いです。
投稿2016/10/27 09:54
総合スコア48
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。