Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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