归海一啸
管理员
管理员
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:6782回复:9

(Unity3d)Vuforia开发基础四-模型选定与控制

楼主#
更多 发布于:2015-06-17 22:43
public class RayPick : MonoBehaviour {
       
    public Material[] mats;
    public Texture[] texs;
    int i = 0;
       
      
    // Use this for initialization
    void Start () {
          
    }
           
    // Update is called once per frame
    void Update () {
        if(Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线
            RaycastHit hitInfo;
            if(Input.touchCount==1&&Input.GetTouch(0).phase==TouchPhase.Began){
            if(Physics.Raycast(ray,out hitInfo))
            {
                Debug.DrawLine(ray.origin,hitInfo.point);//划出射线,只有在scene视图中才能看到
                GameObject gameObj = hitInfo.collider.gameObject;
                //gameObj.transform.parent.renderer.material = mats<i>;//设置父组件的材质
                if(Input.GetTouch(0).tapCount==2){
                    gameObj.renderer.material.mainTexture = texs[i];
                }
                //gameObj.renderer.material = mats<i>;
                //gameObj.transform.parent.gameObject.SetActive(true);
                // other gameobjects set false
                //checkIfPicked(gameObj.transform.parent.gameObject);
                Debug.Log("---->"+gameObj.transform.parent.gameObject.name);
                i++;
                if(i>=mats.Length-1){
                    i=0;
                }
                Debug.Log("click object name is " + gameObj.name);
                if(gameObj.tag == "boot")//当射线碰撞目标为boot类型的物品 ,执行拾取操作
                {
                    Debug.Log("pick up!");
                }
            }
            }
        }
    }
}

单击、双击、长按等:if(Physics.Raycast(ray,out hitInfo))
这个接下来触发的事件就是单击和长按。
if(Input.touchCount == 1){
                Touch touch = Input.GetTouch(0);
                if(touch.phase == TouchPhase.Began){
                    newTouch = true;
                    touchTime = Time.time;
                }else if(touch.phase == TouchPhase.Stationary){
                    if(newTouch==true&&Time.time-touchTime>1){
                        Debug.Log("longpress!!!");
                        newTouch = false;
                        longPressDetected = true;
                        //touched_model_name = "long press!!!!!!!";
                    }else if(newTouch==false&&longPressDetected== false){
                        newTouch = true;
                        touchTime = Time.time;
                        Debug.Log("TouchTime = "+touchTime);
                    }
                }else{
                    newTouch = false;
                    longPressDetected = false;
                    Debug.Log("setting newTouch false");
                }
            }



双击:if(Input.GetTouch(0).tapCount==2)
判断单击的次数,如果为2,就是代表双击。

if(Physics.Raycast(ray,out hitInfo))
            {
                Debug.DrawLine(ray.origin,hitInfo.point);//划出射线,只有在scene视图中才能看到
                GameObject gameObj = hitInfo.collider.gameObject;
                //gameObj.transform.parent.renderer.material = mats<i>;//设置父组件的材质
                if(Input.GetTouch(0).tapCount==2){
                    gameObj.renderer.material.mainTexture = texs[i];
                }
}</i></i>

最新喜欢:

liyachu2lxlliyach... CherishCheris... gaohangaohan
AR学院(www.arvrschool.com),从这里感触未来!

欢迎分享

langzi001_ar
圣骑士
圣骑士
  • UID91
  • 粉丝4
  • 关注4
  • 发帖数64
沙发#
发布于:2015-10-10 14:31
newTouch==true&&Time.time-touchTime>1
不太懂  newTouch与touchTime两个变量的含义以及Time.time-touchTime>1的表达式
归海一啸
管理员
管理员
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
板凳#
发布于:2015-10-10 18:38
langzi001_ar:newTouch==true&&Time.time-touchTime>1
不太懂  newTouch与touchTime两个变量的含义以及Time.time-touchTime>1的表达式
回到原帖
判断是不是新的按下事件以及按下的时间
AR学院(www.arvrschool.com),从这里感触未来!
ky_network
侠客
侠客
  • UID487
  • 粉丝0
  • 关注0
  • 发帖数11
地板#
发布于:2015-11-17 14:50
OptionClick 是什么?
归海一啸
管理员
管理员
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
4楼#
发布于:2015-11-17 21:06
ky_network:OptionClick 是什么?回到原帖
没用貌似,直接注释掉
AR学院(www.arvrschool.com),从这里感触未来!
MingMoon
新手
新手
  • UID1708
  • 粉丝0
  • 关注0
  • 发帖数6
5楼#
发布于:2016-06-03 21:59
小白问一下,这个脚本和视频教程五模型交互的脚本不一样啊
Ereebay
侠客
侠客
  • UID1954
  • 粉丝0
  • 关注0
  • 发帖数3
  • 社区居民
  • 忠实会员
6楼#
发布于:2016-07-14 20:57
小白想问下这个代码是怎么用??
小黄人的诱惑
侠客
侠客
  • UID2177
  • 粉丝0
  • 关注0
  • 发帖数18
7楼#
发布于:2016-09-07 22:34
为什么我明明设置了Color.red,但是颜色仍然是黑色的呢
小黄人的诱惑
侠客
侠客
  • UID2177
  • 粉丝0
  • 关注0
  • 发帖数18
8楼#
发布于:2016-09-07 22:35
不好意思,下面的那个才是我想说的
小黄人的诱惑
侠客
侠客
  • UID2177
  • 粉丝0
  • 关注0
  • 发帖数18
9楼#
发布于:2016-09-07 22:39
这是我的代码,您看一下,为什么箭头以及Cube还是黑色的

public class Ray_Pick : MonoBehaviour
{


    private string name;
    public GUISkin mySkin;
  
  
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线
            RaycastHit hitInfo;


            if (Physics.Raycast(ray, out hitInfo))
            {
                Debug.DrawLine(ray.origin, hitInfo.point, Color.red);//划出射线,只有在scene视图中才能看到
                GameObject gameObj = hitInfo.collider.gameObject;
                name = gameObj.name;
                Debug.Log("----->" + gameObj.name);
              
            
            }


        }
    }
    void OnGUI()
    {
        GUI.skin = mySkin;
        GUI.Label(new Rect(0, 100, 300, 300), "---->" + name);
    }
}
游客

返回顶部