2017-10-17 00:08:40 m0_37998140 阅读数 1031
  • unity3D-游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12992 人正在学习 去看看 宋晓波

  Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下:

  1. 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,如图:

    代码如下:
    using UnityEngine;
    using System.Collections;
    
    public class GyroController : MonoBehaviour
    {
        // Fields
        private readonly Quaternion baseIdentity = Quaternion.Euler(90f, 0f, 0f);
        private Quaternion baseOrientation = Quaternion.Euler(90f, 0f, 0f);
        private Quaternion baseOrientationRotationFix = Quaternion.identity;
        private Quaternion calibration = Quaternion.identity;
        private Quaternion cameraBase = Quaternion.identity;
        private bool debug = true;
        public static bool gyroAvaiable;
        private bool gyroEnabled = true;
        private Quaternion gyroInitialRotation;
        public static bool gyroOff;
        private Quaternion initialRotation;
        private readonly Quaternion landscapeLeft = Quaternion.Euler(0f, 0f, -90f);
        private readonly Quaternion landscapeRight = Quaternion.Euler(0f, 0f, 90f);
        private const float lowPassFilterFactor = 0.1f;
        private Quaternion offsetRotation;
        private Quaternion referanceRotation = Quaternion.identity;
        private readonly Quaternion upsideDown = Quaternion.Euler(0f, 0f, 180f);
    
        // Methods
        private void AttachGyro()
        {
            this.gyroEnabled = true;
            this.ResetBaseOrientation();
            this.UpdateCalibration(true);
            this.UpdateCameraBaseRotation(true);
            this.RecalculateReferenceRotation();
        }
    
        private void Awake()
        {
            gyroAvaiable = SystemInfo.supportsGyroscope;
        }
    
        private static Quaternion ConvertRotation(Quaternion q)
        {
            return new Quaternion(q.x, q.y, -q.z, -q.w);
        }
    
        private void DetachGyro()
        {
            this.gyroEnabled = false;
        }
    
        private Quaternion GetRotFix()
        {
            return Quaternion.identity;
        }
    
        private void RecalculateReferenceRotation()
        {
            this.referanceRotation = Quaternion.Inverse(this.baseOrientation) * Quaternion.Inverse(this.calibration);
        }
    
        private void ResetBaseOrientation()
        {
            this.baseOrientationRotationFix = this.GetRotFix();
            this.baseOrientation = this.baseOrientationRotationFix * this.baseIdentity;
        }
    
        protected void Start()
        {
    
                Input.gyro.enabled = true;
                base.enabled = true;
            this.AttachGyro();
            this.initialRotation = base.transform.localRotation;
            this.gyroInitialRotation = Input.gyro.attitude;
        }
    
        private void Update()
        {
            gyroOff = PlayerPrefs.GetInt("gyro-off") == 1;
            if (this.gyroEnabled )
            {
                base.transform.localRotation = Quaternion.Slerp(base.transform.localRotation, this.cameraBase * (ConvertRotation(this.referanceRotation * Input.gyro.attitude) * this.GetRotFix()), 0.5f);//0.1f
            }
        }
    
        private void UpdateCalibration(bool onlyHorizontal)
        {
            if (onlyHorizontal)
            {
                Vector3 toDirection = (Vector3) (Input.gyro.attitude * -Vector3.forward);
                toDirection.z = 0f;
                if (toDirection == Vector3.zero)
                {
                    this.calibration = Quaternion.identity;
                }
                else
                {
                    this.calibration = Quaternion.FromToRotation((Vector3) (this.baseOrientationRotationFix * Vector3.up), toDirection);
                }
            }
            else
            {
                this.calibration = Input.gyro.attitude;
            }
        }
    
        private void UpdateCameraBaseRotation(bool onlyHorizontal)
        {
            if (onlyHorizontal)
            {
                Vector3 forward = base.transform.forward;
                forward.y = 0f;
                if (forward == Vector3.zero)
                {
                    this.cameraBase = Quaternion.identity;
                }
                else
                {
                    this.cameraBase = Quaternion.FromToRotation(Vector3.forward, forward);
                }
            }
            else
            {
                this.cameraBase = base.transform.rotation;
            }
        }
    }
    
     
    
    
  2. 在相机MainCamera下创建一个新的Camera相机,并改变两个相机的Viewport Rect属性,以将屏幕均分,如图:
  3. 在场景中创建一个Cube,效果如图:
  4. 保存场景,打包成apk即可。即可使用手机陀螺仪控制相机旋转了。大笑大笑大笑

2019-12-27 15:17:45 weixin_44487881 阅读数 27
  • unity3D-游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12992 人正在学习 去看看 宋晓波

写在前面

先挖个坑,日后再填。

通过unity实现当下热门的AR相机功能,并移植到手机Android环境下使用。

主要功能介绍

  1. 手机端拍摄相应动物图片,屏幕显示相应动物(熊、狮子、大象、犀牛、斑马)
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 动物习性介绍(语音播报,扫描图片成功后自动播放,图片离开扫描自动停止)
  2. 触摸屏幕交互(屏幕点击四个按钮使得该动物完成相应的四种动作)

开发环境介绍

  • Unity 2018.3.14f1
  • Visual Studio 2019
  • Windows 10
  • Android 4.4W’KitKat’(API level 20)
2017-11-04 14:37:41 YongshuangZhao 阅读数 1579
  • unity3D-游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12992 人正在学习 去看看 宋晓波
Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下:
  1. 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,代码如下:
    using UnityEngine;
    using System.Collections;
    
    public class GyroController : MonoBehaviour
    {
        // Fields
        private readonly Quaternion baseIdentity = Quaternion.Euler(90f, 0f, 0f);
        private Quaternion baseOrientation = Quaternion.Euler(90f, 0f, 0f);
        private Quaternion baseOrientationRotationFix = Quaternion.identity;
        private Quaternion calibration = Quaternion.identity;
        private Quaternion cameraBase = Quaternion.identity;
        private bool debug = true;
        public static bool gyroAvaiable;
        private bool gyroEnabled = true;
        private Quaternion gyroInitialRotation;
        public static bool gyroOff;
        private Quaternion initialRotation;
        private readonly Quaternion landscapeLeft = Quaternion.Euler(0f, 0f, -90f);
        private readonly Quaternion landscapeRight = Quaternion.Euler(0f, 0f, 90f);
        private const float lowPassFilterFactor = 0.1f;
        private Quaternion offsetRotation;
        private Quaternion referanceRotation = Quaternion.identity;
        private readonly Quaternion upsideDown = Quaternion.Euler(0f, 0f, 180f);
    
        // Methods
        private void AttachGyro()
        {
            this.gyroEnabled = true;
            this.ResetBaseOrientation();
            this.UpdateCalibration(true);
            this.UpdateCameraBaseRotation(true);
            this.RecalculateReferenceRotation();
        }
    
        private void Awake()
        {
            gyroAvaiable = SystemInfo.supportsGyroscope;
        }
    
        private static Quaternion ConvertRotation(Quaternion q)
        {
            return new Quaternion(q.x, q.y, -q.z, -q.w);
        }
    
        private void DetachGyro()
        {
            this.gyroEnabled = false;
        }
    
        private Quaternion GetRotFix()
        {
            return Quaternion.identity;
        }
    
        private void RecalculateReferenceRotation()
        {
            this.referanceRotation = Quaternion.Inverse(this.baseOrientation) * Quaternion.Inverse(this.calibration);
        }
    
        private void ResetBaseOrientation()
        {
            this.baseOrientationRotationFix = this.GetRotFix();
            this.baseOrientation = this.baseOrientationRotationFix * this.baseIdentity;
        }
    
        protected void Start()
        {
    
                Input.gyro.enabled = true;
                base.enabled = true;
            this.AttachGyro();
            this.initialRotation = base.transform.localRotation;
            this.gyroInitialRotation = Input.gyro.attitude;
        }
    
        private void Update()
        {
            gyroOff = PlayerPrefs.GetInt("gyro-off") == 1;
            if (this.gyroEnabled )
            {
                base.transform.localRotation = Quaternion.Slerp(base.transform.localRotation, this.cameraBase * (ConvertRotation(this.referanceRotation * Input.gyro.attitude) * this.GetRotFix()), 0.5f);//0.1f
            }
        }
    
        private void UpdateCalibration(bool onlyHorizontal)
        {
            if (onlyHorizontal)
            {
                Vector3 toDirection = (Vector3) (Input.gyro.attitude * -Vector3.forward);
                toDirection.z = 0f;
                if (toDirection == Vector3.zero)
                {
                    this.calibration = Quaternion.identity;
                }
                else
                {
                    this.calibration = Quaternion.FromToRotation((Vector3) (this.baseOrientationRotationFix * Vector3.up), toDirection);
                }
            }
            else
            {
                this.calibration = Input.gyro.attitude;
            }
        }
    
        private void UpdateCameraBaseRotation(bool onlyHorizontal)
        {
            if (onlyHorizontal)
            {
                Vector3 forward = base.transform.forward;
                forward.y = 0f;
                if (forward == Vector3.zero)
                {
                    this.cameraBase = Quaternion.identity;
                }
                else
                {
                    this.cameraBase = Quaternion.FromToRotation(Vector3.forward, forward);
                }
            }
            else
            {
                this.cameraBase = base.transform.rotation;
            }
        }
    }
  2. 在相机MainCamera下创建一个新的Camera相机,并改变两个相机的Viewport Rect属性,以将屏幕均分,如图:
  3. 在场景中创建一个Cube,效果如图:
  4. 保存场景,打包成apk,安装到手机即可。大笑大笑大笑
2018-11-13 21:38:36 yuyingwin 阅读数 2225
  • unity3D-游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12992 人正在学习 去看看 宋晓波

大家好!我又来了,经过前两篇简单的讲解,我们慢慢要正式进入主题了。房地产虚拟现实可以看作为一款游戏也可以看做为一款App,或是软件,这样都不为过。

一款软件肯定要有好的界面了,Unity3D 5.X版本后开始了UGUI功能。

下面我们来讲解一下,Unity3D UGUI 界面的简单制作。看下面这张图,咱们将UI实现呢

 

下面我们就开始制作UI,哎,原来的图片没有了,还得自己重新搜图切图

首先,把切好的图导入到Unity3D项目中来

 

导入进去后,下一步就是进行UI设置了

 

设置成功后,我们就可以开始进行UI创建了。UI格式的转换,如果不会,请自觉百度。现在我们开始创建我们的UI。

 

有时候,有的UI背景是长条的,很长很长。因为UGUI图集是有大小的,图集越大,有时候展现出的UI越模糊,那这个问题怎么解决呢,比如:下面的UI

 

遇到这种长条UI,怎么解决呢?可以采用如下方式

 

 

 

上面这种方法,就可以用小的UI来展示长条UI了,因为中间部分无论怎么放大都不会是真的。

UI的制作及图片的裁切,我们应该好好的借鉴android、Ios app开发,相信大家都想制作优良的团建供大家使用,好了。抛砖引玉工作做完了,想学的要自己动起手来。

2013-08-24 21:59:20 jukai7 阅读数 4963
  • unity3D-游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12992 人正在学习 去看看 宋晓波

         游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果。原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我们就销毁对象,把它添加到我们的背包中。

         我们来做一个简单的Demo,我们在场景中添加一个方块Cube,一个小球Sphere,当我们鼠标放在方块上时没有任何反应,而当我们把鼠标放在小球上时,小球会消失。

        新建一个项目,我们命名为“RayTest”,然后在场景中新建一个小球,方块,和添加灯光,最终结果如图所示:

                

         新建一个C#脚本文件,重命名为“rayScript”,具体代码如下所示:

using UnityEngine;
using System.Collections;

public class rayScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {

        //创建一条射线,产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)
        Ray ray = camera.ScreenPointToRay(Input.mousePosition);
        //RaycastHit是一个结构体对象,用来储存射线返回的信息
        RaycastHit hit;
        //如果射线碰撞到对象,把返回信息储存到hit中
        if (Physics.Raycast(ray, out hit))
        {
            //如果碰撞的对象是小球,则销毁它
            if (hit.transform.gameObject.name == "Sphere")
            {
                Destroy(hit.transform.gameObject);
            }
        }
	}
}

        运行,我们可以看到当鼠标放在小球上时,小球消失了。

     

附上项目源码下载地址:点此下载

git@code.csdn.net:snippets/622963.git

博文 来自: zjw1349547081
没有更多推荐了,返回首页