facebook twitter hatena line email

「Unity/Csharp/位置」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(指定場所へ徐々に移動)
(指定場所へ徐々に移動)
 
(同じ利用者による、間の8版が非表示)
行52: 行52:
 
</pre>
 
</pre>
  
==指定場所へ徐々に移動==
+
==指定場所へ一定速度で、徐々に移動==
返されるpositionは、少し移動した座標となる
+
Update()内に記述し、毎フレーム処理するとよい。
 +
返されるpositionは、少し移動した座標となる。
 
<pre>
 
<pre>
Vector startPosition = new Vector(1f, 0f, 0f);
+
void Update()
Vector endPosition = new Vector(1f, 1f, 1f);
+
{
float speed = 2f;
+
    Vector3 startPosition = transform.localPosition;
float step = speed * Time.deltaTime;
+
    Vector3 endPosition = new Vector3(100f, 0f, 0f);
Vector3 position = Vector3.MoveTowards(
+
    float speed = 50f;
                    startPosition,
+
    float step = speed * Time.deltaTime;
                    endPosition,
+
    this.transform.localPosition = Vector3.MoveTowards(
                    step
+
                        startPosition,
                );
+
                        endPosition,
 +
                        step
 +
                    );
 +
}
 
</pre>
 
</pre>
 
参考:https://docs.unity3d.com/ja/560/ScriptReference/Vector3.MoveTowards.html
 
参考: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>

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);