找回密码
 立即注册
查看: 5181|回复: 60

[常见问题] 用NGUI写了个虚拟按钮,能用,但很卡,求救啊!

[复制链接]
发表于 2013-9-11 23:39 | 显示全部楼层 |阅读模式
本帖最后由 luckytjm 于 2013-9-11 23:40 编辑

先说一下具体情况,然后再上代码吧,首先呢,按钮是NGUI做的,然后把原先Box Collider换成Sphere Collider,建了一个新的背景图文集,最后再添加了我写的这串代码就没了,请各路大神帮忙研究一下哈,到底卡在哪个地方了哈。对了,还有就是我的分辨率是517*291哈,下面是上代码:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class JoyControl : MonoBehaviour
  4. {       
  5.         public GameObject playerTank;
  6.         private float joyInitX;                        //note 摇杆的圆心初始坐标X note
  7.         private float joyInitY;                        //note 摇杆的圆心初始坐标Y note
  8.         private float joyMoveDistance;        //note 摇杆最大可移动的距离 note
  9.         private float currentDistance;        //note 单签摇杆圆心离初始圆心的距离 note
  10.         private float joyControlDistance;        //note 摇杆开始控制坦克移动的最小距离 note
  11.         private float mousePositionX;        //note 鼠标相对NGUI坐标系的坐标X note
  12.         private float mousePositionY;        //note 鼠标相对NGUI坐标系的坐标X note
  13.         private float parallelMoveLeftX;        //note 摇杆控制坦克平行移动左边界X note
  14.         private float parallelMoveRightX;        //note 摇杆控制坦克平行移动右边界X note
  15.         private float parallelMoveLeftY;        //note 摇杆控制坦克平行移动左边界Y note
  16.         private float parallelMoveRightY;        //note 摇杆控制坦克平行移动右边界X note
  17.        
  18.         void Start ()
  19.         {
  20.                 joyInitX = this.transform.localPosition.x;
  21.                 joyInitY = this.transform.localPosition.y;
  22.                 joyMoveDistance = 22.5f;
  23.                 joyControlDistance = 5.0f;
  24.                 mousePositionX = this.transform.localPosition.x;
  25.                 mousePositionY = this.transform.localPosition.y;
  26.                 parallelMoveLeftX = this.transform.localPosition.x - 5.0f;
  27.                 parallelMoveRightX = this.transform.localPosition.x + 5.0f;
  28.                 parallelMoveLeftY = this.transform.localPosition.y - 5.0f;
  29.                 parallelMoveRightY = this.transform.localPosition.y + 5.0f;
  30.         }
  31.        
  32.     void OnDrag (Vector2 delta)
  33.         {
  34.                 if(GameObject.Find("Main Camera").GetComponent<MyCamera>().cameraState == 1)
  35.                 {
  36.                         // note 获得单签摇杆圆心离初始圆心的距离 note
  37.                         currentDistance = Mathf.Sqrt(getAbs(this.transform.localPosition.x, joyInitX) * getAbs(this.transform.localPosition.x, joyInitX)
  38.                                                                                  + getAbs(this.transform.localPosition.y, joyInitY) * getAbs(this.transform.localPosition.y, joyInitY));
  39.                         if(currentDistance < joyMoveDistance)
  40.                         {
  41.                                 //note 摇杆随鼠标移动 note
  42.                                 mousePositionX = Input.mousePosition.x - (float)Screen.width / 2;
  43.                                 mousePositionY = Input.mousePosition.y - (float)Screen.height / 2;
  44.                                 this.transform.localPosition = new Vector3(mousePositionX, mousePositionY, 0);
  45.                                
  46.                                 //note 判断摇杆移动距离是否符合控制坦克 note
  47.                                 if(joyControlDistance < currentDistance)
  48.                                 {
  49.                                         //note 判断坦克是否在前后平行活动距离内 note
  50.                                         if(this.transform.localPosition.x > parallelMoveLeftX && this.transform.localPosition.x < parallelMoveRightX)
  51.                                         {
  52.                                                 // note 坦克移动 note
  53.                                                 if(this.transform.localPosition.y > joyInitY)
  54.                                                 {
  55.                                                         playerTank.transform.Translate(Vector3.forward * Time.deltaTime * getAbs(this.transform.localPosition.y, joyInitY) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankMoveSpeed);
  56.                                                 }
  57.                                                 else
  58.                                                 {
  59.                                                         playerTank.transform.Translate(Vector3.back * Time.deltaTime * getAbs(this.transform.localPosition.y, joyInitY) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankMoveSpeed);
  60.                                                 }
  61.                                         }
  62.                                         else if(this.transform.localPosition.y < parallelMoveLeftY && this.transform.localPosition.y > parallelMoveRightY)
  63.                                         {
  64.                                                 //note 横向拖动摇杆不做任何操作 note
  65.                                         }
  66.                                         else
  67.                                         {
  68.                                                 //note 坦克移动和旋转 note
  69.                                                 if(this.transform.localPosition.y > joyInitY)
  70.                                                 {
  71.                                                         playerTank.transform.Translate(Vector3.forward * Time.deltaTime * getAbs(this.transform.localPosition.y, joyInitY) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankMoveSpeed);
  72.                                                         if(this.transform.localPosition.x < joyInitX)
  73.                                                         {
  74.                                                                 playerTank.transform.Rotate(Vector3.down * Time.deltaTime * getAbs(this.transform.localPosition.x, joyInitX) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankRotateSpeed);
  75.                                                         }
  76.                                                         else
  77.                                                         {
  78.                                                                 playerTank.transform.Rotate(Vector3.up * Time.deltaTime * getAbs(this.transform.localPosition.x, joyInitX) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankRotateSpeed);
  79.                                                         }
  80.                                                 }
  81.                                                 else
  82.                                                 {
  83.                                                         playerTank.transform.Translate(Vector3.back * Time.deltaTime * getAbs(this.transform.localPosition.y, joyInitY) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankMoveSpeed);
  84.                                                         if(this.transform.localPosition.x < joyInitX)
  85.                                                         {
  86.                                                                 playerTank.transform.Rotate(Vector3.up * Time.deltaTime * getAbs(this.transform.localPosition.x, joyInitX) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankRotateSpeed);
  87.                                                         }
  88.                                                         else
  89.                                                         {
  90.                                                                 playerTank.transform.Rotate(Vector3.down * Time.deltaTime * getAbs(this.transform.localPosition.x, joyInitX) * GameObject.Find("PlayerTank").GetComponent<Tank>().tankRotateSpeed);
  91.                                                         }
  92.                                                 }
  93.                                         }
  94.                                 }
  95.                         }
  96.                 }
  97.                 else if(GameObject.Find("Main Camera").GetComponent<MyCamera>().cameraState == 2)
  98.                 {
  99.                        
  100.                 }
  101.         
  102.     }
  103.        
  104.         /**
  105.          * note 计算两个值的绝对值之差的绝对值 note
  106.          */
  107.         float getAbs(float a, float b)
  108.         {
  109.                 return Mathf.Abs(Mathf.Abs(a)-Mathf.Abs(b));
  110.         }
  111. }
复制代码
发表于 2017-2-13 10:48 | 显示全部楼层
很不错
发表于 2017-2-13 10:31 | 显示全部楼层
楼主是超人
发表于 2017-2-13 10:56 | 显示全部楼层
好帖就是要顶
发表于 2017-2-13 10:10 | 显示全部楼层
说的非常好
发表于 2017-2-13 10:17 | 显示全部楼层
不错不错
发表于 2017-3-11 17:09 | 显示全部楼层
很不错
发表于 2017-3-11 17:47 | 显示全部楼层
好帖就是要顶
发表于 2017-3-11 16:53 | 显示全部楼层
难得一见的好帖
发表于 2017-3-11 17:46 | 显示全部楼层
很好哦
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-14 15:24 , Processed in 0.094319 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表