Unity 移動+視点移動(未完)
public class PlayerController : MonoBehaviour { | |
//移動 | |
private float walkSpeed = 50.0f; //移動速度係数 | |
private float gravity = 10.0f;//重力加速度 | |
private Vector3 velocity;//現在の移動速度 | |
//回転 | |
private float RotSpeed = 90.0f; //回転速度係数 | |
private float LimitRotX = 50f; //回転可能限界 | |
//CharacterController | |
private CharacterController controller; | |
//================================== | |
//初期化 | |
//================================== | |
void Start () { | |
//CharacterControllerを取得 | |
controller = GetComponent<CharacterController>(); | |
} | |
//================================== | |
// ループ | |
//================================== | |
//キャラクター移動 | |
void PlayerMove(){ | |
//移動速度 | |
float SpeedX = 0f, SpeedY = -gravity, SpeedZ = 0f; | |
/////キー入力確認 各キーが押されているか | |
if (Input.GetKey(KeyCode.A)){ | |
SpeedX = -1f; | |
} | |
else if (Input.GetKey(KeyCode.D)){ | |
SpeedX = 1f; | |
} | |
if (Input.GetKey(KeyCode.W)){ | |
SpeedZ = 1f; | |
} | |
else if (Input.GetKey(KeyCode.S)){ | |
SpeedZ = -1f; | |
} | |
//バーチャルパッドのオブジェクト取得 オブジェクト名 : Joystick | |
GameObject Joystick = GameObject.Find("Joystick"); | |
//バーチャルパッドのオブジェクトのスクリプトを取得 スクリプト名 : MpJoystick | |
MPJoystick JoystickScript = Joystick.GetComponent<MPJoystick>(); | |
//パーチャルパッドがタップされている マウスではタップ出来ない | |
if(JoystickScript.tapCount > 0){ | |
//スピードを設定 | |
SpeedX = JoystickScript.position.x; | |
SpeedZ = JoystickScript.position.y; | |
} | |
//スピード設定 | |
velocity = new Vector3( SpeedX * walkSpeed , SpeedY , SpeedZ * walkSpeed ); | |
//キャラクターコントローラーの移動 | |
controller.Move(velocity * Time.deltaTime); | |
} | |
//キャラクター回転 | |
void PlayerRotation(){ | |
//回転速度 | |
float RotX = 0f , RotY = 0f; | |
/////キー入力確認 各キーが押されているか | |
if (Input.GetKey(KeyCode.LeftArrow)){ | |
RotY = -1f; | |
} | |
else if (Input.GetKey(KeyCode.RightArrow)){ | |
RotY = 1f; | |
} | |
if (Input.GetKey(KeyCode.UpArrow)){ | |
RotX = -1f; | |
} | |
else if (Input.GetKey(KeyCode.DownArrow)){ | |
RotX = 1f; | |
} | |
//回転予定角度X | |
float NextRotX = transform.eulerAngles.x + RotX * RotSpeed *Time.deltaTime; | |
//x方向の回転を制限 回転可能角度外 | |
if(NextRotX > LimitRotX && NextRotX < 360f - LimitRotX){ | |
//下と上のどちらから可能角度を超えたか それに応じて制限 | |
NextRotX = NextRotX > 180f ? 360f - LimitRotX : LimitRotX; | |
} | |
//回転 | |
transform.rotation = Quaternion.Euler( | |
NextRotX, | |
transform.eulerAngles.y + RotY * RotSpeed *Time.deltaTime , | |
transform.eulerAngles.z | |
) ; | |
} | |
//フレーム毎に呼び出される | |
void Update () { | |
//キャラクター回転 | |
PlayerRotation(); | |
//キャラクター移動 | |
PlayerMove(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment