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、还需要为角色提供地形,否则会一直坠落。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值