Unity3dフォーラムで動作の制御スクリプトがあり、コメント入れなども丁寧にされているものであったので紹介したい。
今回紹介するのはwaypointという動作の制御スクリプト。敵キャラクターなどにいくつかのポイントをランダムに行き来させるような使用例があるとおもう。
どんな動作をするか例示するためにスクリプトでボールが動き回る簡単なシーンを作成した。
さらにフォーラム投稿されているコードを翻訳したものを紹介する:
コード中に英語コメントがありすぎて少し見づらかったためあえて省いたが、英語に自信ある方はリンクから丁寧なコメントもみてもらったほうが理解は進むとおもう。
使用するときのステップ:
1.RigidBody,Colliderのあるゲームオブジェクトにこのスクリプトをアタッチする。
2.Size変数を使用したいwaypointの数に更新する
3.waypointオブジェクトをSizeの下の空きスロットの位置にドラッグ&ドロップする
4.waypointオブジェクトにColliderがあること再確認する(Sphere Collider推奨)
5.waypointオブジェクトのis TriggerチェックボックスをOnにする
6.サイズ調整(Sphere Colliderの場合は半径)を行う
7.変数の値の調整。スピードなどイメージに合うまで調整する。
var accel = 0.8;
var inertia = 0.9;
var speedLimit = 10.0;
var minSpeed = 1.0;
var stopTime = 1.0;
private var currentSpeed = 0.0;
private var functionState = 0;
private var accelState : boolean;
private var slowState : boolean;
private var waypoint : Transform;var rotationDamping = 6.0;
var smoothRotation = true;
var waypoints : Transform[];
private var WPindexPointer : int;
function Start ()
{
functionState = 0;
}
function Update (){
if (functionState == 0)
{
Accell ();
}
if (functionState == 1)
{
Slow ();
}
waypoint = waypoints[WPindexPointer];
}
function Accell ()
{
if (accelState == false)
{
accelState = true;
slowState = false;
}
if (waypoint)
{
if (smoothRotation)
{
var rotation = Quaternion.LookRotation(waypoint.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationDamping);
}
}
currentSpeed = currentSpeed + accel * accel;
transform.Translate (0,0,Time.deltaTime * currentSpeed);
if (currentSpeed >= speedLimit)
{
currentSpeed = speedLimit;
}
}
function OnTriggerEnter ()
{
functionState = 1;
WPindexPointer++;
if (WPindexPointer >= waypoints.Length)
{
WPindexPointer = 0;
}
}
function Slow ()
{
if (slowState == false)
{
accelState = false;
slowState = true;
}
currentSpeed = currentSpeed * inertia;
transform.Translate (0,0,Time.deltaTime * currentSpeed);
if (currentSpeed <= minSpeed)
{
currentSpeed = 0.0;
yield WaitForSeconds (stopTime);
functionState = 0;
}
}
----Unityフォーラムのスクリプトをゲーム開発に生かそうぜ!

0 件のコメント:
コメントを投稿