Unityで物理・図形・その他の計算など、頻繁に使用する関数をまとめたスクリプト
物理計算は質量、空気抵抗、マグヌス効果などを含まない簡単な計算です。
関数には複数のオーバーロードを追加してあります。
- ver1.0.0 (2018.09.11)
- ・二点の座標の位置から二次関数の式を求める関数を追加
SystemCalc(1.0.1)_IncludedExample
SystemCalc(1.0.1)_NoExample
- GetCircleLineIntersection (円と線の交点を求める)
- GetIntersectionOfCircleAndCircle (円と円の交点を求める)
- GetLineNearPoint (二点間の線上で一番近い座標を求める)
- GetVelocityTopTime (初速を加えた時、何秒後に頂点に達するかを求める)
- GetVelocityTopHeight (初速を加えた時の最高地点の高さを求める)
- GetVelocityTopPos (初速を加えた時の最高地点の座標を求める)
- GetArrayMax (配列内の一番大きい値を返す)
- GetArrayMin (配列内の一番小さい値を返す)
- GetArraySum (配列内の値を足して返す)
代表的な関数の例を一部挙げます。
使い方などでわからない部分や、追加してほしい関数等があれば、TwitterのDMで伝えて下さい。
円と線分との交点を取得します。
直線ではなく、始点と終点を含む線分との交差を判定する。
public static bool GetIntersectionOfLineAndCircle(
Vector2 _linePoint1,
Vector2 _linePoint2,
Vector2 _circleCenter,
float _circleRadius,
out Vector2 _intersectionPoint1,
out Vector2 _intersectionPoint2)
引数 | 説明 |
---|---|
_linePoint1 | (Vector2)線分の始点 |
_linePoint2 | (Vector2)線分の終点 |
_circleCenter | (Vector2)円の中心点 |
_circleRadius | (float)円の半径 |
_intersectionPoint1 | (out Vector2)円と線分が交差していた場合、交差している座標が入る |
_intersectionPoint2 | (out Vector2)円と線分が交差していた場合、交差している座標が入る |
(bool)線と円が一点以上交差しているかどうか
円と円が交差しているかの判定と、交差している点の座標を求める
public static bool GetIntersectionOfCircleAndCircle(
Vector2 _circlePoint1,
float _circleRadius1,
Vector2 _circlePoint2,
float _circleRadius2,
out Vector2 _intersectionPoint1,
out Vector2 _intersectionPoint2)
引数 | 説明 |
---|---|
_circlePoint1 | (Vector2)円Bの中心の座標 |
_circleRadius1 | (float)円Aの半径 |
_circlePoint2 | (Vector2)円Bの中心の座標 |
_circleRadius2 | (float)円Bの半径 |
_intersectionPoint1 | (out Vector2)円Aと円Bが交差していた場合、交差している座標が入る。交差していない時は newVector2(0.0f,0.0f)が入る |
_intersectionPoint2 | (out Vector2)円Aと円Bが交差していた場合、交差している座標が入る。交差していない時は newVector2(0.0f,0.0f)が入る |
(bool)円と円が交差しているかどうか
指定した座標で、線上の一番近い座標を返す
また、AからBを0-1と置いた場合の値も取得できる
public static Vector3 GetLineNearPoint(
Vector3 _linePoint1,
Vector3 _linePoint2,
Vector3 _checkPoint,
bool _isLimit,
out float _lerp)
引数 | 説明 |
---|---|
_linePoint1 | (Vector2)線分の始点 |
_linePoint2 | (Vector2)線分の終点 |
_checkPoint | (Vector2)確認したい座標 |
_isLimit | (bool)線上の始点から終点で制限をかけるかどうか。 |
_lerp | (out float)始点を0、終点を1とした時の値。 |
(Vector3)線状で一番近い座標
球に初速を加えた時、頂点に達するまでの時間を求める
public static float GetVelocityTopTime(
Vector3 _vec,
Vector3 _gravity)
引数 | 説明 |
---|---|
_vec | (Vector3)球の初速 |
_gravity | (Vector3)重力加速度 |
(float)頂点に到達する時間(秒)
球に初速を加えた時、最高地点の高さを求める
public static float GetVelocityTopHeight(
Vector3 _vec,
float _startHeight,
Vector3 _gravity)
引数 | 説明 |
---|---|
_vec | (Vector3)球の初速 |
_startHeight | (float)球の初速 |
_gravity | (Vector3)重力加速度 |
(float)頂点に到達する高さ
public static Vector3[] GetBallisticpredictionPoint(
Vector3 _vec,
Vector3 _startPos,
int _pointNum,
float _intervalTime,
Vector3 _gravity)
引数 | 説明 |
---|---|
_vec | (Vector3)球の初速 |
_startPos | (Vector3)初速を加えた時の座標 |
_pointNum | (int)取得する座標の数 |
_intervalTime | (Vector3)取得する座標の間隔の時間(秒) |
_gravity | (Vector3)重力加速度 |
(Vector3[])弾道予測線の座標
public static float VectorToAngle(
Vector2 _vec)
引数 | 説明 |
---|---|
_vec | (Vector2)角度に変更するベクトル |
(float)角度
- 初速を加えた時、何秒後に地面に落ちるか
- 球と線との交点を求める
- 角度→ベクトル
- 行列を渡してグリッドの座標を返す
- ベジュ曲線を求める
- 基準点と視野角と相手の座標を渡して視界内にあるか
See LICENSE.