【ゲーム開発】小さい入力の時はあまり動かないようにするための工夫

f:id:peroon:20110630130333j:image

レースゲームとかに使えるね!

昔のアーケードレースゲームの時点で、
ハンドルを少しだけ切ったら微妙に動いて、
ハンドルを大きく切ったら大きく動く工夫がされていました。
入力と、物体を動かす力が線形ではなく、二次関数の方がよい。

ヒント:方向ベクトルの大きさの二乗
// Update is called once per frame
function Update () {
	// Get the input vector from kayboard or analog stick
	var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
	
	if (directionVector != Vector3.zero) {
		// Get the length of the directon vector and then normalize it
		// Dividing by the length is cheaper than normalizing when we already have the length anyway
		var directionLength = directionVector.magnitude;
		directionVector = directionVector / directionLength;
		
		// Make sure the length is no bigger than 1
		directionLength = Mathf.Min(1, directionLength);
		
		// Make the input vector more sensitive towards the extremes and less sensitive in the middle
		// This makes it easier to control slow speeds when using analog sticks
		directionLength = directionLength * directionLength;
		
		// Multiply the normalized direction vector by the modified length
		directionVector = directionVector * directionLength;
	}
	
	// Apply the direction to the CharacterMotor
	motor.inputMoveDirection = transform.rotation * directionVector;
	motor.inputJump = Input.GetButton("Jump");
}