AnyPortrait > スクリプト > 物理効果
「Physics」モディファイアの物理的効果はスクリプトで制御できます。
物理的効果のオン/オフを切り替えることができ、外的な力をさらに制御して引っ張ることができます。
物理的効果をオンまたはオフにします。
bool isPhysicEnabled : 「Physics」モディファイアが処理されるかどうか
その点に基づいて半径方向の力を加えます。
それはapForceUnitを返します。それから、プロパティを追加する必要があります。
Vector2 pointPosW : 力が加えられる位置 (「World」座標系)
float radius : 力の半径
apForceUnit : 生成された力
方向性の強さを追加します。
apForceUnitを返す場合、属性を追加する必要があります。
Vector2 directionW : 力が加えられる方向 (「World」座標系)
apForceUnit : 生成された力
方向性の強さを追加します。
X軸とY軸に対してsinカーブを描き、風のような表現に適した方向性を繰り返します。
apForceUnitを返す場合、属性を追加する必要があります。
Vector2 directionW : 力が加えられる方向 (「World」座標系)
float waveSizeX : 周期的に変化する方向の最大X値
float waveSizeY : 周期的に変化する方向の最大Y値
float waveTimeX : X軸方向が変わる時間単位
float waveTime : Y軸方向が変わる時間単位
apForceUnit : 生成された力
現在追加された力があることを確認します。
bool : 追加された力があるかどうか
計算された力は入力位置で測定されます。
Vector2 targetPosW : 測定位置 (「World」座標系)
Vector2 : 測定された力ベクトル
AddForce関数で追加したすべての力を取り除きます。
指定された力を除去します。
apForceUnit forceUnit : 削除しようとする力のデータです。AddForce関数の戻りとしてインポートすることができます。
タッチ入力に「引き」を開始します。
Vector2 posW : タッチ位置 (「World」座標系)
float radius : 引っ張られる半径
apPullTouch : 「タッチして引っ張り」の一意のIDで識別されるオブジェクト
AddTouch呼び出した後、返されたapPullTouchに対応するタッチ現在位置を更新します。
apPullTouch.TouchIDを使用して選択します。
int touchID : AddTouchから返されたapPullTouchのTouchIDに対応するID
Vector2 posW : 現在のタッチの位置
AddTouch呼び出した後、返されたapPullTouchに対応するタッチ現在位置を更新します。
パラメータを入力してapPullTouchを選択します。
apPullTouch touch : AddTouchから返されたapPullTouch
Vector2 posW : 現在のタッチの位置
現在追加されているタッチがある場合に返します。
bool : 追加された接触があるかどうか
touchIDに対応するIDを持つapPullTouchオブジェクトを返します。
int touchID : 検索するタッチイベントのID
apPullTouch : 要求されたTouchIDに「タッチイベントを取得する」(存在しない場合は、nullを返します)
引きを計算するタッチイベントオブジェクトを削除します。
int touchID : AddTouchから返されたapPullTouchのTouchIDに対応するID
apPullTouch touch : AddTouchに戻されていたapPullTouch
すべてのタッチイベントを削除します。
全ての力とタッチイベントを取り除く。
AddForce関数を使用すると、強制は適用されません。
AddForce関数apForceUnitの戻り値に追加情報を含める必要があります。
「SetPower」関数の1つを呼び出し、「EmitLoop」または「EmitOnce」のいずれかを呼び出す必要があります。
public apForceUnit SetPower(float power)
: 力の強さを設定します。
public apForceUnit SetPower(float power, float waveSize, float waveTime)
: 「waveTime」に「power」を基にした「waveSize」を掛けた量だけ周期的に変化する力を加えます。
public apForceUnit EmitLoop()
: 持続力として設定する。
public apForceUnit EmitOnce(float liveTime)
: 「liveTime」の時間の後に消える力として設定します。
using UnityEngine;
using AnyPortrait;
public class PhysicsTest : MonoBehaviour
{
// Target AnyPortrait Object
public apPortrait portrait;
// Touch ID
private int _touchID;
void Start () { }
void Update ()
{
//----------------------------------------
// Force Events
//----------------------------------------
// Clear Force
if(Input.GetKeyDown(KeyCode.C))
{
portrait.ClearForce();
Debug.Log("Clear Force");
}
// Add Point Force
if(Input.GetKeyDown(KeyCode.P))
{
// Position : (0, 0)
// Radius : 10
// Power : 2000
// Live Time : 10 Sec
portrait.AddForce_Point(Vector2.zero, 10.0f)
.SetPower(2000)
.EmitOnce(10);
Debug.Log("Add Point Force");
}
//Add Waved Directional Force
if(Input.GetKeyDown(KeyCode.D))
{
// Direction : (1 +- 0.5, 0.5 +- 0.2)
// Power : 4000 +- 1000
// Loop
portrait.AddForce_Direction(new Vector2(1.0f, 0.5f), 0.5f, 0.2f, 5, 10)
.SetPower(4000, 1000, 25)
.EmitLoop();
Debug.Log("Add Waved Directional Force");
}
//----------------------------------------
// Touch Events
//----------------------------------------
Vector3 touchPosW = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
Vector2 touchPosW2 = new Vector2(touchPosW.x, touchPosW.y);
//Left Click -> Touch
if(Input.GetMouseButtonDown(0))
{
//Start Touch Event
_touchID = portrait.AddTouch(touchPosW2, 2.0f).TouchID;
Debug.Log("Add Touch (" + _touchID + ")");
}
else if(Input.GetMouseButton(0))
{
//Refresh Touch Position
portrait.SetTouchPosition(_touchID, touchPosW2);
}
else if(Input.GetMouseButtonUp(0))
{
//Release Touch Event
portrait.ClearTouch();
_touchID = -1;
}
}
}