スポンサーサイト

--/--/--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Unity コントローラーの向きにモデルを回転させる方法

2012/01/31

Unityでモデルをコントローラーの入力方向に回す方法

当プログラムを使用しての損失、不利益は一切責任を持ちませんのであしからず。

======================================================================================

// いらない?
private var controller : CharacterController;

private var X:double = 0.0;
private var Y:double = 0.0;

function Awake () {
//いらない?
controller = GetComponent (CharacterController);
}

function Update () {

var directionVector = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);

// モデルのデフォルト向きによって基準ベクトルは任意調整
var vec1:Vector3 = new Vector3(-1.0f,0.0f,0.0f);
var vec2:Vector3 = new Vector3(directionVector.x,directionVector.y,0);
vec2.Normalize();

// 0~360の値が欲しいので2倍
var Rad : double = Mathf.Atan2(vec1.x-vec2.x,vec1.y-vec2.y)*2.0;

var Deg : double = Rad * Mathf.Rad2Deg -180.0;

// 入力された値が変わったら更新する
if( (Input.GetAxis("Horizontal") !=X || Input.GetAxis("Vertical") != Y) )
{
//一度角度をリセットしてから回転する
transform.rotation.x = 0;
transform.rotation.y = 0;
transform.rotation.z = 0;
transform.rotation.w = 1;
X = Input.GetAxis("Horizontal");
Y = Input.GetAxis("Vertical");

// X軸基準に回す
transform.Rotate(Deg,0,0);
}

// 何も入力されていない時はデフォルトに戻す
if(Input.GetAxis("Horizontal")==0 && Input.GetAxis("Vertical")==0)
{
transform.rotation.x = 0;
transform.rotation.y = 0;
transform.rotation.z = 0;
transform.rotation.w = 1;
X = 0.0;
Y = 0.0;
}
}

//いらない?
@script RequireComponent (CharacterController)


=============================================================================================

transform.rotationの存在に気づくまでかなり時間がかかった。

transform.Rotateだと角度が加算されるので、ぐるぐるぐる動いてしまうのです。




正直・・・


function Update () {

var directionVector = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);
var vec1:Vector3 = new Vector3(-1.0f,0.0f,0.0f);
var vec2:Vector3 = new Vector3(directionVector.x,directionVector.y,0);
vec2.Normalize();

var Rad : double = Mathf.Atan2(vec1.x-vec2.x,vec1.y-vec2.y)*2.0;

var Deg : double = Rad * Mathf.Rad2Deg -180.0;

transform.rotation.x = Deg;
transform.rotation.y = 0;
transform.rotation.z = 0;
transform.rotation.w = 1;

}

これでできそうな気がするんだけど、なぜか動かないんだぜ

コメントの投稿

非公開コメント

advertisement


プロフィール

hane

Author:hane
ゲーム好きなプログラマーやってます。

使用可能言語:C,C++,C#,WPF,JavaScript,Cuda
使用可能開発環境:VisualStudio2005-2013,Unity,CodeWarrior

リンクフリーです
相互リンクなどはこちら↓までかコメント欄にでもよろしくです。
skymail_tt@yahoo.co.jp

検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。