Skip to content

Unityで、物理関係等の計算などをするためのクラス

License

Notifications You must be signed in to change notification settings

LightGive/SystemCalc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

SystemCalc License

Unityで物理・図形・その他の計算など、頻繁に使用する関数をまとめたスクリプト
物理計算は質量、空気抵抗、マグヌス効果などを含まない簡単な計算です。
関数には複数のオーバーロードを追加してあります。

Update

ver1.0.0 (2018.09.11)
・二点の座標の位置から二次関数の式を求める関数を追加

Download (UnityPackage)

SystemCalc(1.0.1)_IncludedExample
SystemCalc(1.0.1)_NoExample

List of Functions

  • GetCircleLineIntersection (円と線の交点を求める)
  • GetIntersectionOfCircleAndCircle (円と円の交点を求める)
  • GetLineNearPoint (二点間の線上で一番近い座標を求める)
  • GetVelocityTopTime (初速を加えた時、何秒後に頂点に達するかを求める)
  • GetVelocityTopHeight (初速を加えた時の最高地点の高さを求める)
  • GetVelocityTopPos (初速を加えた時の最高地点の座標を求める)
  • GetArrayMax (配列内の一番大きい値を返す)
  • GetArrayMin (配列内の一番小さい値を返す)
  • GetArraySum (配列内の値を足して返す)

Example

代表的な関数の例を一部挙げます。
使い方などでわからない部分や、追加してほしい関数等があれば、TwitterのDMで伝えて下さい。

・GetCircleLineIntersection

円と線分との交点を取得します。
直線ではなく、始点と終点を含む線分との交差を判定する。
サンプル1

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)線と円が一点以上交差しているかどうか

・GetIntersectionOfCircleAndCircle

円と円が交差しているかの判定と、交差している点の座標を求める
サンプル2

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)円と円が交差しているかどうか

・GetLineNearPoint

指定した座標で、線上の一番近い座標を返す
また、AからBを0-1と置いた場合の値も取得できる
サンプル3

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)線状で一番近い座標

・GetVelocityTopTime

球に初速を加えた時、頂点に達するまでの時間を求める

public static float GetVelocityTopTime(
  Vector3 _vec, 
  Vector3 _gravity)

パラメーター

引数 説明
_vec (Vector3)球の初速
_gravity (Vector3)重力加速度

返り値

(float)頂点に到達する時間(秒)

・GetVelocityTopTime

球に初速を加えた時、最高地点の高さを求める

public static float GetVelocityTopHeight(
  Vector3 _vec, 
  float _startHeight, 
  Vector3 _gravity)

パラメーター

引数 説明
_vec (Vector3)球の初速
_startHeight (float)球の初速
_gravity (Vector3)重力加速度

返り値

(float)頂点に到達する高さ

・GetBallisticpredictionPoint

初速を加えた後の弾道予測点を求める
サンプル1

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[])弾道予測線の座標

・VectorToAngle

ベクトルから角度に変関する
サンプル1

public static float VectorToAngle(
  Vector2 _vec)

パラメーター

引数 説明
_vec (Vector2)角度に変更するベクトル

返り値

(float)角度

Future

  • 初速を加えた時、何秒後に地面に落ちるか
  • 球と線との交点を求める
  • 角度→ベクトル
  • 行列を渡してグリッドの座標を返す
  • ベジュ曲線を求める
  • 基準点と視野角と相手の座標を渡して視界内にあるか

License

See LICENSE.

About

Unityで、物理関係等の計算などをするためのクラス

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages