「Unity/Csharp/位置」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→方向) |
(→指定場所へ徐々に移動) |
||
(同じ利用者による、間の20版が非表示) | |||
行6: | 行6: | ||
==方向== | ==方向== | ||
− | + | 以下それぞれ2つは同じ意味 | |
<pre> | <pre> | ||
− | + | new Vector3(0f, 0f, 0f) | |
− | new | + | Vector3.zero |
</pre> | </pre> | ||
− | + | ||
<pre> | <pre> | ||
− | + | new Vector3(1f, 1f, 1f) | |
− | new | + | Vector3.one |
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | new Vector3(2f, 2f, 2f) | ||
+ | Vector3.one * 2; | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | new Vector3(0, 1, 0) | ||
+ | Vector3.up | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | Vector3(0, -1, 0) | ||
+ | Vector3.down | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | Vector3(1, 0, 0) | ||
+ | Vector3.right | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | Vector3(-1, 0, 0) | ||
+ | Vector3.left | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | Vector3(0, 0, 1) | ||
+ | Vector3.forward | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | Vector3(0, 0, -1) | ||
+ | Vector3.back | ||
+ | </pre> | ||
+ | |||
+ | ==指定場所へ一定速度で、徐々に移動== | ||
+ | Update()内に記述し、毎フレーム処理するとよい。 | ||
+ | 返されるpositionは、少し移動した座標となる。 | ||
+ | <pre> | ||
+ | void Update() | ||
+ | { | ||
+ | Vector3 startPosition = transform.localPosition; | ||
+ | Vector3 endPosition = new Vector3(100f, 0f, 0f); | ||
+ | float speed = 50f; | ||
+ | float step = speed * Time.deltaTime; | ||
+ | this.transform.localPosition = Vector3.MoveTowards( | ||
+ | startPosition, | ||
+ | endPosition, | ||
+ | step | ||
+ | ); | ||
+ | } | ||
+ | </pre> | ||
+ | 参考:https://docs.unity3d.com/ja/560/ScriptReference/Vector3.MoveTowards.html | ||
+ | |||
+ | ==指定場所へ指定秒数で、徐々に移動== | ||
+ | <pre> | ||
+ | Vector3 startPosition = transform.localPosition; | ||
+ | Vector3 endPosition = new Vector3(100f, 0f, 0f); | ||
+ | float distance = Vector3.Distance(startPosition, endPosition); | ||
+ | float reachSec = 10f; // 10秒で到達 | ||
+ | float speed = distance / reachSec; | ||
+ | float step = speed * Time.deltaTime; | ||
+ | this.transform.position = Vector3.MoveTowards( | ||
+ | startPosition, | ||
+ | endPosition, | ||
+ | step | ||
+ | ); | ||
+ | </pre> | ||
+ | |||
+ | ==2点間の距離取得== | ||
+ | float distance = Vector3.Distance(characterObj.transform.position, targetObj.transform.position); | ||
+ | |||
+ | ==ターゲットのちょっと手前の座標を取得== | ||
+ | <pre> | ||
+ | // 距離の3手前の位置を計算するための距離 | ||
+ | float distanceBack = 3f; | ||
+ | |||
+ | // 方向ベクトルを計算 | ||
+ | Vector3 direction = (targetPosition - myPosition).normalized; | ||
+ | |||
+ | // 3px手前の位置を計算 | ||
+ | Vector3 positionThreeUnitsBack = targetPosition - direction * distanceBack; | ||
+ | </pre> | ||
+ | |||
+ | ==敵がプレイヤーの方向を向く== | ||
+ | <pre> | ||
+ | // 現在の回転角度を保存 | ||
+ | Vector3 beforeRotation = enemyObj.transform.localEulerAngles; | ||
+ | // プレイヤー方向のベクトルを計算 | ||
+ | var dir = playerObj.transform.position - enemyObj.transform.position; | ||
+ | // プレイヤー方向への回転を計算 | ||
+ | var lookAtRotation = Quaternion.LookRotation(dir, Vector3.up); | ||
+ | // 新しい回転角度を適用し、X軸とZ軸の回転角度を維持する | ||
+ | enemyObj.transform.rotation = Quaternion.Euler(beforeRotation.x, lookAtRotation.eulerAngles.y, beforeRotation.z); | ||
</pre> | </pre> |
2024年8月10日 (土) 03:06時点における最新版
目次
中間位置
Vector3 center = Vector3.Lerp(fromObj, toObj, 0.5f);
3dの回転
Unity/3d/回転 [ショートカット]
方向
以下それぞれ2つは同じ意味
new Vector3(0f, 0f, 0f) Vector3.zero
new Vector3(1f, 1f, 1f) Vector3.one
new Vector3(2f, 2f, 2f) Vector3.one * 2;
new Vector3(0, 1, 0) Vector3.up
Vector3(0, -1, 0) Vector3.down
Vector3(1, 0, 0) Vector3.right
Vector3(-1, 0, 0) Vector3.left
Vector3(0, 0, 1) Vector3.forward
Vector3(0, 0, -1) Vector3.back
指定場所へ一定速度で、徐々に移動
Update()内に記述し、毎フレーム処理するとよい。 返されるpositionは、少し移動した座標となる。
void Update() { Vector3 startPosition = transform.localPosition; Vector3 endPosition = new Vector3(100f, 0f, 0f); float speed = 50f; float step = speed * Time.deltaTime; this.transform.localPosition = Vector3.MoveTowards( startPosition, endPosition, step ); }
参考:https://docs.unity3d.com/ja/560/ScriptReference/Vector3.MoveTowards.html
指定場所へ指定秒数で、徐々に移動
Vector3 startPosition = transform.localPosition; Vector3 endPosition = new Vector3(100f, 0f, 0f); float distance = Vector3.Distance(startPosition, endPosition); float reachSec = 10f; // 10秒で到達 float speed = distance / reachSec; float step = speed * Time.deltaTime; this.transform.position = Vector3.MoveTowards( startPosition, endPosition, step );
2点間の距離取得
float distance = Vector3.Distance(characterObj.transform.position, targetObj.transform.position);
ターゲットのちょっと手前の座標を取得
// 距離の3手前の位置を計算するための距離 float distanceBack = 3f; // 方向ベクトルを計算 Vector3 direction = (targetPosition - myPosition).normalized; // 3px手前の位置を計算 Vector3 positionThreeUnitsBack = targetPosition - direction * distanceBack;
敵がプレイヤーの方向を向く
// 現在の回転角度を保存 Vector3 beforeRotation = enemyObj.transform.localEulerAngles; // プレイヤー方向のベクトルを計算 var dir = playerObj.transform.position - enemyObj.transform.position; // プレイヤー方向への回転を計算 var lookAtRotation = Quaternion.LookRotation(dir, Vector3.up); // 新しい回転角度を適用し、X軸とZ軸の回転角度を維持する enemyObj.transform.rotation = Quaternion.Euler(beforeRotation.x, lookAtRotation.eulerAngles.y, beforeRotation.z);