• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

常州手游开发-简单虚拟摇杆控制移动

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1223/260.html

常州手机游戏App开发-简单的虚拟摇杆控制移动(NGUI)

 

一、用NGUI创建虚拟摇杆贴图

 

先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button

二、通过常州平台运营虚拟摇杆获得x,y偏移值

 

using UnityEngine;
using System.Collections;
 
public class JoyStick : MonoBehaviour 
{
 
    private bool isPress = false;
    private Transform button;
 
    //从虚拟摇杆的得到的x,y偏移值-1到1之间
    public static float h = 0;
    public static float v = 0;
    void Awake()
    {
        button = transform.FindChild("button");
    }
    void OnPress(bool isPress)
    {
        this.isPress = isPress;
        if (!isPress)
        {
            button.localPosition = Vector2.zero;
            h = 0;
            v = 0;
        }
    }
 
    void Update()
    {
        if (isPress)
        {
            Vector2 touchPos = UICamera.lastEventPosition - new Vector2(91, 91);
            float distance = Vector2.Distance(Vector2.zero, touchPos);
            if (distance > 73)//常州微信小程序开发虚拟摇杆按钮不能超过半径
            {
                touchPos = touchPos.normalized * 73;
            }            
            button.localPosition = touchPos;
 
            h = touchPos.x / 73;
            v = touchPos.y / 73;
        }
    }

}

三、通过偏移控制移动 主角添加了character controller

 

using UnityEngine;
using System.Collections;
 
public class PlayerMove : MonoBehaviour 
{
    private CharacterController cc;
    public float speed = 3f;
 
    void Awake()
    {
        cc = GetComponent<CharacterController>();
    }
    
    // Update is called once per frame
    void Update () 
    {
        //键盘控制
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
 
        //虚拟摇杆控制
        if (JoyStick.h != 0 || JoyStick.v != 0)
        {
            h = JoyStick.h;
            v = JoyStick.v;
        }
 
        if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f)
        {
            Vector3 targetDir = new Vector3(h, 0, v);
            transform.LookAt(targetDir + transform.position);
            cc.SimpleMove(targetDir * speed);
        }
 
       
    }
}

上篇:上一篇:常州网站技术微信平台-c++分割字符串
下篇:下一篇:常州微信小程序开发:实现一种类似List<T>的数据