Cardboard如何使用凝视触发移动

最后效果如下:
这里写图片描述


准备好两个脚本:
1. eyeselect4.cs
2. SmoothFollow.cs (注意这个脚本中最后一行中的约束代码要注释掉)


这里写图片描述


紧接着就是导入character包


using UnityEngine;
using System.Collections;
using UnityEngine.UI;



public enum PointModel{

    OnUGUI,
    defaul

}



public class eyeSelect4 : MonoBehaviour
{
    private GameObject leftEyeTarget, rightEyeTarget, player;

    float tempAngleX;
    float tempAngleZ;

    //public GameObject huangDian;  //小黄点

    public GameObject LoadImage; //转圈的粒子
    public float coldTime = 3;  //此变量控制转一圈需要的时间
    private float timer = 0;

    void Start()
    {
        player = GameObject.Find("player").gameObject;

        tempAngleX = transform.rotation.x;
        tempAngleZ = transform.rotation.z;
    }

    public float smooth = 0.1F;
    private float yVelocity = 0.0F;
    GameObject cache;


    private bool mm = true;
    void Update()
    {
        player.transform.position = new Vector3(player.transform.position.x,-1.4f, player.transform.position.z);

        float floatyAngle = Mathf.SmoothDampAngle(player.transform.eulerAngles.y, transform.eulerAngles.y, ref yVelocity, smooth);


        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        RaycastHit hit;
        if (Physics.Raycast(transform.position, fwd, out hit, Mathf.Infinity))
        {
            if (hit.collider.gameObject)
            {

                float dist = hit.distance + gameObject.GetComponent<Camera>().nearClipPlane;



              //  huangDian.transform.localScale = new Vector3(0.01f * dist*2, 0.01f * dist*2, 0.01f * dist*2);
                //huangDian.transform.position = gameObject.transform.position + gameObject.transform.forward * 1.5f;

                GameObject gameObj = hit.collider.gameObject;
              //  print(gameObj.name);
                if (gameObj == null)
                    return;
                player.transform.rotation = Quaternion.Euler(transform.rotation.x, floatyAngle, transform.rotation.z);
                print(gameObj.name);
                if (gameObj.name.Equals("MoveObj"))
                {
                    print("xu hai tao  cheng yu jie");
                    player.transform.Translate(Vector3.forward * Time.deltaTime * 0.5f);
                }

                if (LayerMask.LayerToName(gameObj.layer).Equals("haitao"))//如果目前正在凝视指定目标
                {

                    if (mm)
                    {
                        mm = false;
                        cache = Instantiate(LoadImage);
                    }
                    if (cache != null)
                    {
                        cache.transform.position = hit.point;  //将转圈图像立即切到目标位置
                        diaoYong(gameObj);//开始转圈
                    }
                        //  cache.transform.rotation = gameObj.transform.rotation;

                }
                else if (LayerMask.LayerToName(gameObj.layer).Equals("quick"))
                {
                    LoadImage.transform.position = hit.point;  //将转圈图像立即切到目标位置
                 //   LoadImage.transform.rotation = gameObj.transform.rotation;
                    gameObj.GetComponent<Button>().onClick.Invoke();   //触发凝视目标所绑定的方法
                }
                else
                {

                    //目标凝视取消时,恢复初始值
                    timer = 0;
                    if (LoadImage != null)
                    {
                        Destroy(cache);
                    }
                    mm = true;
                }
            }
        }
        else
        {
            //目标凝视取消时,恢复初始值
            timer = 0;
            if (LoadImage != null)
            {
                Destroy(cache);
            }
            mm = true;
        }

    }


    void diaoYong(GameObject gameObj)
    {
        timer += Time.deltaTime;
        print(timer);
        if (timer >= coldTime) //转圈刚转完就执行
        {
            timer = 0;
            Destroy(cache);
            print(gameObj);
            gameObj.GetComponent<Button>().onClick.Invoke();   //触发凝视目标所绑定的方法
        }
    }
}





这里写图片描述


这里写图片描述


重要一点的是删掉预设体中的Head层级,然后将CardboardHead组件添加到MainCamera上
这里写图片描述


这里写图片描述


Cardboard相机位置在高度上方向上的值是保持不变的


角色控制器的位置决定Cardboard的位置
CardBoard的旋转决定角色控制器的旋转
Cardboard相机的凝视触发角色控制器的移动


角色碰撞体(即player)的位置的竖直方向的值要靠eyeselect这个脚本中如下截图中代码来控制


这里写图片描述



这里写图片描述



FR:海涛高软(QQ群:386476712)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值