系列

2017年2月12日 星期日

Unity android 讓人物動起來

 ===2017/02/12 轉入===

這是我自己摸索出來簡單使用GUI_Texure簡單修改出來的程式


使用方法:


以下有兩個腳本





使用內建的第三人稱模組並把他兩個腳本內容改成以下兩個


加入6個GUI_Texure


分別命名為


w


s


a


d


run


jump


最後將腳本的touch_W等等的依序拉到所對應的GUI_Texure


如touch_W 拉到 W等等










//=============================1人物位移腳本=====================


/* _01_CharacterMoveControl.js ----------------------------- By Henry Hsieh */


/* 變數宣告 */

//走路速度、跑步速度、跳躍速度、重力值、旋轉速度 : 浮點數值
//主角移動方向 : 3維數值(x, y, z)(隱匿宣告)

var WalkSpeed : float = 1.0;

var RunSpeed : float = 3.0;
var JumpSpeed : float = 8.0;
var Gravity : float = 20.0;
var RotateSpeed : float =5.0;

var touch_w : GUITexture;

var touch_s : GUITexture;
var touch_a : GUITexture;
var touch_d : GUITexture;
var touch_run : GUITexture;
var touch_jump : GUITexture;


private var MoveDirection : Vector3 = Vector3.zero;










/* 功能 : 持續執行 */

function Update() 
{




//宣告主角控制器為自身的控制器元件。 

var Viking : CharacterController = GetComponent(CharacterController);

//如果主角在地面時

if (Viking.isGrounded) 
{

//主角移動方向的Z軸數值,由輸入設定中的垂直鍵(WS鍵或上下鍵)來進行輸入。

//主角移動方向由自身座標轉換為世界座標(維持旋轉後的控制方向正確)。
//主角移動方向的量乘以行走速度。

//if (nowTouchCount > 0){

//觸控點0按下
//if (Input.GetTouch(0).phase == TouchPhase.Began) {
//觸控點第一個跟texture香蕉
/* for (var j = 0; j < nowTouchCount;++j) {
if(Input.GetTouch(j).phase && touch_w.HitTest(Input.GetTouch(j).position)) {
MoveDirection=Vector3(0,0,10);
}
}
}
//if (Input.GetTouch(0).phase == TouchPhase.Ended){
//MoveDirection=Vector3(0,0,0);
//}

*/

//}

// 宣告 nowTouchCount 為 目前觸控數量+++++++++

var nowTouchCount = Input.touchCount;
if (nowTouchCount > 0){
for (var i = 0; i < nowTouchCount;++i) {
// 假使 觸控點 觸控起始
//===========wsad案件
if(Input.GetTouch(i).phase && touch_w.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 0, 1 );
print("W");
}
if(Input.GetTouch(i).phase && touch_s.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 0, -1 );
print("S");
}
if(Input.GetTouch(i).phase && touch_a.HitTest(Input.GetTouch(i).position)) {
transform.Rotate(0, -1 * RotateSpeed, 0);
print("a");
}
if(Input.GetTouch(i).phase && touch_d.HitTest(Input.GetTouch(i).position)) {
transform.Rotate(0, 1 * RotateSpeed, 0);
print("d");
}
//=====run&&jump=====================
//如果按下跑步鍵 --> 移動方向的量乘以跑步速度。
//if(Input.GetButton("Run"))
if(Input.GetTouch(i).phase && touch_run.HitTest(Input.GetTouch(i).position))
{
MoveDirection = Vector3(0, 0, 5 );
//MoveDirection *= RunSpeed;
print("run");

if(Input.GetTouch(i).phase && touch_jump.HitTest(Input.GetTouch(i).position))
{
//MoveDirection = Vector3(0, 0, 0 );
//MoveDirection *= RunSpeed;
//MoveDirection.y = JumpSpeed;
MoveDirection = Vector3(0, 8, (MoveDirection.z) );
print("jump");

//=========================
if (Input.GetTouch(i).phase == TouchPhase.Began) {
print("觸控點"+ i +"起始");
}
// 假使 觸控點 觸控離開
if (Input.GetTouch(i).phase == TouchPhase.Ended) {
print("觸控點"+ i +"離開");
MoveDirection = Vector3(0, 0, 0 ); 

}
}
if (nowTouchCount == 0){
MoveDirection = Vector3(0, 0, 0 ); 
}










//MoveDirection = Vector3(0, 0,Input.GetAxis("Vertical"));

MoveDirection = transform.TransformDirection(MoveDirection);
MoveDirection *= WalkSpeed;
print(MoveDirection);














//如果按下跑步鍵 --> 移動方向的量乘以跑步速度。

/*if(Input.GetButton("Run"))
{
MoveDirection *= RunSpeed;

*/
//以輸入設定中的水平鍵(AD鍵或左右鍵)乘以旋轉速度來旋轉自身的Y軸。
//transform.Rotate(0, Input.GetAxis ("Horizontal") * RotateSpeed, 0);

//如果按下跳躍鍵 --> 主角移動方向的Y軸等於跳躍速度。

//if (Input.GetButton ("Jump")) 
//{
// MoveDirection.y = JumpSpeed;
//}
}

//主角移動方向的Y軸數值,每秒持續減去重力值。

MoveDirection.y -= Gravity * Time.deltaTime;

//每秒持續移動主角 。

Viking.Move(MoveDirection * Time.deltaTime);

}


/* 附加腳本時自動生成CharacterController元件 */

@script RequireComponent(CharacterController)













//======================================2.動作腳本========================


/* _02_CharacterAnimControl.js ----------------------------- By Henry Hsieh */


/* 變數宣告 */

//走路動畫速度、跑步動畫速度、跳躍動畫速度、跳躍混合速度、攻擊混合時間 : 浮點數值
var WalkAnimSpeed : float = 1.0;
var RunAnimSpeed : float = 1.0;
var JumpAnimSpeed : float =1.0;
var JumpBlendSpeed : float =1.0;
var AttackBlendTime : float =0.05;

var touch_w : GUITexture;

var touch_s : GUITexture;
var touch_a : GUITexture;
var touch_d : GUITexture;
var touch_run : GUITexture;
var touch_jump : GUITexture;





private var MoveDirection : Vector3 = Vector3.zero;


/* 功能 : 遊戲初始化 */

//設定所有動畫的播放模式為重複 --> 設定攻擊動畫播放模式為單次 -->
//設定攻擊動畫的播放層次為1 --> 所有動畫預設為停止
function Start() 
{
animation.wrapMode = WrapMode.Loop;
animation["5_Attack"].wrapMode = WrapMode.Once;
animation["5_Attack"].layer = 1;
animation.Stop();
}

/* 功能 : 持續執行 */

function Update () 
{

var Viking : CharacterController = GetComponent(CharacterController);

var nowTouchCount = Input.touchCount;
if (nowTouchCount > 0){
for (var i = 0; i < nowTouchCount;++i) {
// 假使 觸控點 觸控起始
if(Input.GetTouch(i).phase && touch_w.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 0, 1 );
print("w");
}
if(Input.GetTouch(i).phase && touch_s.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 0, -1 );
print("s");
}
if(Input.GetTouch(i).phase && touch_run.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 0, 10 );
print("run");
}
if(Input.GetTouch(i).phase && touch_jump.HitTest(Input.GetTouch(i).position)) {
MoveDirection = Vector3(0, 8, 0 );
print("jump");
}

if (Input.GetTouch(i).phase == TouchPhase.Began) {

print("觸控點"+ i +"起始");
}
// 假使 觸控點 觸控離開
if (Input.GetTouch(i).phase == TouchPhase.Ended) {
print("觸控點"+ i +"離開");
MoveDirection = Vector3(0, 0, 0 ); 
}

}

}
//如果輸入設定中的水平鍵(AD鍵或左右鍵)或是垂直鍵(WS鍵或上下鍵)數值大於絕對值0.2時(角色移動時)
//if ((Mathf.Abs(Input.GetAxis("Vertical")) > 0.2) || (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.2)) 
if(Mathf.Abs(MoveDirection.z)>0)
{
//如果按下跑步鍵時
//if(Input.GetButton("Run"))
if(MoveDirection.z == 10) 
{
//漸變播放跑步動畫 --> 設定跑步動畫速度 -->
//如果垂直鍵(WS鍵或上下鍵)的數值小於0.2(後退) -->設定跑步動畫的速度為負值
animation.CrossFade("3_Run");
animation["3_Run"].speed = RunAnimSpeed;
//if(Input.GetAxis("Vertical") < -0.2)
if(MoveDirection.z<0)
{
animation["3_Run"].speed = -RunAnimSpeed;
}
}

//如果不是按下跑步鍵時

else
{
//漸變播放走路動畫 --> 設定走路動畫速度 -->
//如果垂直鍵(WS鍵或上下鍵)的數值小於0.2(後退) -->設定走路動畫的速度為負值
animation.CrossFade("2_Walk");
animation["2_Walk"].speed = WalkAnimSpeed;
//if(Input.GetAxis("Vertical") < -0.2)
if(MoveDirection.z < 0 )
{
print(Input.GetAxis("Vertical"));
animation["2_Walk"].speed =-WalkAnimSpeed;
}
}
}

//如果輸入設定中的水平鍵(AD鍵或左右鍵)或是垂直鍵(WS鍵或上下鍵)數值沒有大於絕對值0.2時(角色停止時)

else
{
//漸變播放待機動畫
animation.CrossFade("1_Idle");
}

//如果按下開火鍵時(Ctrl或滑鼠左鍵)

if (Input.GetButtonDown("Fire1"))

//漸變播放攻擊動畫,並設定攻擊動畫為立即播放,不須等待前一次動畫播放完畢
animation.CrossFadeQueued("5_Attack", AttackBlendTime ,QueueMode.PlayNow);
}

//如果按下跳躍鍵時 --> 漸變播放跳躍動畫 --> 設定跳躍動畫的速度

//if(Input.GetButton("Jump"))
if(MoveDirection.y > 0 )
{
animation.CrossFade("4_Jump", JumpBlendSpeed);
animation["4_Jump"].speed = JumpAnimSpeed;
}

}

沒有留言:

張貼留言