考え方
・ワープ先のX,Z座標を決める
・そのX,Z座標で、Y座標の十分上の位置から真下に向けてRayを飛ばす
・Rayがぶつかった位置が地面の高さだと分かるので、その値をもとに新しいY座標の位置を決める
参考動画
参考動画はこちら
参考コード
コードはこんな感じ。
C#
1using UnityEngine;
2
3
4public class Respawn : MonoBehaviour
5{
6 //インスペクターから設定するパラメーター
7 public float xMin, xMax, zMin, zMax; // 地面の範囲
8 public float offsetY; // Y座標のオフセット
9
10 public float rayOriginY = 10f; // Rayの起点のY座標
11 public float rayMaxDistance = 11f; // Rayの最大距離
12
13
14 private void Update ()
15 {
16 // 左クリックで新しい位置へ移動する
17 if ( Input.GetMouseButtonDown ( 0 ) )
18 {
19 MoveToNewPosition ();
20 }
21 }
22
23
24 // 新しい位置へ移動する
25 private void MoveToNewPosition ()
26 {
27 // X, Z 座標はランダムに決める
28 var newX = Random.Range(xMin, xMax);
29 var newZ = Random.Range(zMin, zMax);
30
31 // Y座標は新しい X,Z 座標の上から下へ Ray を飛ばして、衝突した位置とする(オフセットを加える)
32 var newY = 0f;
33 Ray ray = new Ray(new Vector3(newX, rayOriginY, newZ), Vector3.down);
34 RaycastHit hit;
35 if ( Physics.Raycast ( ray, out hit, rayMaxDistance ) )
36 {
37 newY = hit.point.y + offsetY;
38 }
39
40 //新しい位置へ移動する
41 transform.position = new Vector3 ( newX, newY, newZ );
42 }
43}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/28 08:27 編集
2018/05/01 02:41
2018/05/31 13:38 編集
2018/06/01 04:08