Unity3D 第三人称角色控制器结合easytouch

1、首先了解角色控制器
2、myjoystick.cs(EasyJoystick的脚本)

using UnityEngine;
using System.Collections;

public class myjoystick : MonoBehaviour {

    protected Transform m_player; 

    void Awake()
    {   //获得人物组件对象
        GameObject obj=GameObject.FindGameObjectWithTag("myMan");
        if ( obj!=null )
        {
            m_player=obj.transform;
        }
    }

    //当摇杆可用时注册事件
    void OnEnable()
    {
        EasyJoystick.On_JoystickMove += OnJoystickMove;
        EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;
    }

    //当摇杆不可用时移除事件
    void OnDisable()
    {
        EasyJoystick.On_JoystickMove -= OnJoystickMove;
        EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
    }

    //当摇杆销毁时移除事件
    void OnDestroy()
    {
        EasyJoystick.On_JoystickMove -= OnJoystickMove;
        EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
    } 

    //移动摇杆结束    
    void OnJoystickMoveEnd(MovingJoystick move)         
    {       
        //停止时,角色恢复idle  
        if (move.joystickName == "EasyJoystick")    
        {  
            m_player.animation.CrossFade("idle"); 
            print("idle"); 
        }   
    }  

    //移动摇杆中  
    void OnJoystickMove(MovingJoystick move)        
    {  
        if (move.joystickName != "EasyJoystick")    
        {   
            return; 
        }  

        //获取摇杆中心偏移的坐标  
        float joyPositionX = move.joystickAxis.x; 
        float joyPositionY = move.joystickAxis.y; 

        if (joyPositionY != 0 || joyPositionX != 0)     
        {  
            print("move");
            //判断摇杆活动范围(圆的计算)
            double rsqrt =  joyPositionY*joyPositionY + joyPositionX*joyPositionX;
            if(rsqrt<2*0.7*0.7)
            {
                //设置角色的朝向(朝向当前坐标+摇杆偏移量)         
                m_player.transform.LookAt(new Vector3(m_player.transform.position.x + joyPositionX, m_player.transform.position.y, m_player.transform.position.z + joyPositionY)); 
                //移动玩家的位置(按朝向位置移动)   
                m_player.transform.Translate(Vector3.forward * Time.deltaTime * 5); 
                //播放奔跑动画  
                m_player.animation.Play("walk"); 
            }
            else
            {
                //设置角色的朝向(朝向当前坐标+摇杆偏移量(可以乘数来增大移动位移))  
                m_player.transform.LookAt(new Vector3(m_player.transform.position.x + joyPositionX, m_player.transform.position.y, m_player.transform.position.z + joyPositionY)); 
                //移动玩家的位置(按朝向位置移动)  
                m_player.transform.Translate(Vector3.forward * Time.deltaTime * 5); 
                //播放奔跑动画  
                m_player.animation.Play("run"); 
            }   
        }  
    }   
}  

3、跳跃按钮设置(参考)
注意:事件驱动、接收事件对象及其调用方法的设置,jump方法放在与对象关联的(第三人称控制器)脚本中。

function jump()
{
    print("jump");
    lastJumpButtonTime = Time.time;
}

4、注释第三人称的角色控制器脚本的关于移动的动画,否则与摇杆的动画结合混乱;另外,注释角色面向方位更新,避免移动操作,方位回到原来方向。

//更新角色控制器的移动面向方位(角色移动操作不是使用角色控制器的,而是用摇杆的,所以控制器中默认未发生移动,即方向不变)
//transform.rotation = Quaternion.LookRotation(moveDirection);

5、还需要为角色提供地形,否则会一直坠落。

你可能感兴趣的:(unity3d)