Cardboard如何使用凝视触发移动

最后效果如下:
Cardboard如何使用凝视触发移动_第1张图片


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


Cardboard如何使用凝视触发移动_第2张图片


紧接着就是导入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().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

Cardboard如何使用凝视触发移动_第3张图片


Cardboard如何使用凝视触发移动_第4张图片


重要一点的是删掉预设体中的Head层级,然后将CardboardHead组件添加到MainCamera上
Cardboard如何使用凝视触发移动_第5张图片


Cardboard如何使用凝视触发移动_第6张图片


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


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


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


Cardboard如何使用凝视触发移动_第7张图片



Cardboard如何使用凝视触发移动_第8张图片



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

你可能感兴趣的:(Cardboard)