2019-07-17 19:48:47 moonlightpeng 阅读数 116
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

1,工程

2 脚本 Capture.cs



using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;


public class Capture : MonoBehaviour
{

	public Camera mainCam; //待截图的目标摄像机
	RenderTexture rt;  //声明一个截图时候用的中间变量 
	Texture2D t2d;
	int num = 0;  //截图计数

	//public GameObject pl;  //一个调试用的板子



	void Start()
	{
		t2d = new Texture2D(800, 600, TextureFormat.RGB24, false);
		rt = new RenderTexture(800, 600, 24);
		mainCam.targetTexture = rt;

	}

	void Update()
	{
		//按下空格键来截图
		if (Input.GetKeyDown(KeyCode.Space))
		{
			//将目标摄像机的图像显示到一个板子上
			//pl.GetComponent<Renderer>().material.mainTexture = rt;

			//截图到t2d中
			RenderTexture.active = rt;
			t2d.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
			t2d.Apply();
			RenderTexture.active = null;

			//将图片保存起来
			byte[] byt = t2d.EncodeToJPG();
			File.WriteAllBytes(Application.dataPath +"/Images" + "//" + num.ToString() + ".jpg", byt);


			Debug.Log("当前截图序号为:" + num.ToString());
			num++;
		}
	}
}

3 运行后在工程的game窗口点击空格,怎会把虚拟相机拍摄的图片保存到Images文件夹中

 

 

 

 

2016-09-16 23:36:13 woaini454186694 阅读数 2150
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

【单目全景相机】Unity3D多平台SDK接入

作者:瓦哥
2016.09.16
由于本人认知有限,如有错漏,非常欢迎同行指正交流。
QQ:454186694

什么是多平台SDK接入?

Unity3D一般使用C#语言来做开发,Mono做为虚拟机,管理C#或者C/Cpp编写的托管的代码。而对于不同的平台,有时候比较上层的代码执行效率并不是那么高或者有些功能实现就是需要平台支持,需要更底层的代码实现,那么涉及到Native代码的部分,如果C#需要调用,就需要使用到Plugins。这部分代码也叫作非托管代码。

以本项目为例,相机图片、视频的拼接、转码部分功能,就是和特定平台相关的,这部分代码是用C++来实现,然后编译为不同平台动静态库的方式接入,以供上层C#调用:

ipcamera.IOS.a:IOS上,只能编译成.a静态库,不支持热更新技术。放到Assets\Plugins\iOS下,没有就新建目录。
ipcamera.bundle:Mac OS X上编译成.bundle包。放到Assets\Plugins下。
ipcamera.dll:Windows上编译成.dll动态库。32位版本放到Assets\Plugins\x86下,64位版本放到Assets\Plugins\x86_64下。
ipcamera.so:Android上编译成.so动态库。放到Assets\Plugins\Android\libs下。

还有一种SDK就是C#调用Android.jar包的接入,需要用到Unity3D提供的两个类AndroidJavaClassAndroidJavaObject

接下来我自己写了一个demo,分别介绍各种不同SDK Plugins的接入和使用。

Unity3dPluginsDemo

对本篇文章感兴趣的朋友,可以到GitHub上下载到所有源码,包括Unity3D工程,其他动态库、静态库编译建立的工程:
工程源码:Unity3dPluginsDemo
包含有五种接入方式:
a. C++ CLR .dll(支持Windows、MacOSX、Linux);
b. C++ Native .dll(Windows平台);
c. Android jar .jar;
d. IOS .a;
e. MacOSX .bundle。
对应的五个工程如下图所示,用不同的软件打开就可以使用:
image

测试应用的运行效果如下所示,用U3D打包不同平台的应用版本,然后点击对应平台的button,就会返回相应的值:
image

C++ CLR接入

VS2015生成UnityPluginsCLR.dll放到Assets\Plugins\x86下,如果需要测试64位版本,可以用我上传的工程自己生成一个。
使用的时候首先要using UnityPluginsCLR引用命名空间:
image
调用的时候按照下面的方式即可:
image

C++ Native接入

VS2015生成UnityPluginsNative.dll放到Assets\Plugins\x86下,同理,如果需要测试64位版本,可以用我上传的工程自己生成一个。
使用的时候首先要DLLImport库文件和申明函数:
image
调用的时候按照下面的方式即可:
image

Android jar接入

Android Studio生成UnityPluginsAndroid.jar放到Assets\Plugins\Android下。
使用的时候需要用到c#提供的AndroidJavaClassAndroidJavaObject两个类,如下所示:
image

IOS .a接入

Xcode生成libUnityPluginsIOS.a放到Assets\Plugins\IOS下。
使用的时候首先要DLLImport库文件和申明函数:
image
调用的时候按照下面的方式即可:
image

Mac OS X .bundle接入

Xcode生成UnityPluginsMacOSX.bundle包放到Assets\Plugins\MacOSX下。
使用的时候首先要DLLImport库文件和申明函数:
image
调用的时候按照下面的方式即可:
image

细心的读者会发现,这篇教程少了Android Native动态库.so的接入工程和方法,这部分待后续补上。
至此,Unity3D多平台SDK接入部分的介绍完成。

2019-03-26 07:34:57 JingDuiTell 阅读数 117
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

1.相机Camera

在这里插入图片描述
1.Clear Flags 清除标志

1.Skybox默认天空盒,在超出相机范围显示天空
2.Solid Color 单色纯色
3.Depth only 只通过深度
4.Don’t Clear 不清除

2.Background 当clear Flags 选择solid Color时,填充天空背景颜色
3.Culling mask 剔除遮罩 可以选择相机看到的物品
4.Projection 投射 分为Perspective透视(区分远近) 和Orthographic正交(不区分前后)
5.Field of View 视野
6.Clipping Planes Near 和 Far
7.Viewport Rect 相机在屏幕的位置和大小,左下角为x,y(0,0),右上角(w ,h);
8.Depth 深度
9.Rendering Path 渲染路径
10.Target Texture 目标纹理。用于制作头像和小地图
11. occlusion culling遮挡剔除

2.天空盒 Skybox

1.在菜单栏选择Window - Lighting, 此种方法使同一场景多个摄像机共同渲染一个天空盒
在这里插入图片描述
2.为总Camera摄像机单独添加天空盒组件

3.虚拟摇杆 EasyTouch

快速开发触屏和鼠标的行为动作

  1. 给英雄添加移动脚本,拖拽New joystick,并修改其interaction type为Direct and event
    public float speed = 3;
	public EasyJoystick _joystick;  //创建摇杆对象
    void Update ()
	{
		float x = _joystick.JoystickTouch.x;
		float y = _joystick.JoystickTouch.y;       //控制角色正面朝向,本身位置加摇杆即可
		transform.LookAt (transform.position + new Vector3(x,0,y));  
		if (x !=0 || y!=0)
		{  //transform.Translate (Vector3.forward * speed * Time.deltaTime);
			 transform.Translate (new Vector3 (0,0,speed*Time.deltaTime));
			 GetComponent<Animation> ().CrossFade ("Run");
		} else {
			GetComponent<Animation> ().CrossFade ("idle");
		}
	}
  1. 通过拖动摇杆,触发事件,调用事件中的方法
    public float speed = 3f;
	//只要拖动摇杆,触发事件,调用事件中的方法
	void OnEnable() //当脚本激活后运行该方法,在start之前调用
	{
		EasyJoystick.On_JoystickMoveStart +=moveStart;
		EasyJoystick.On_JoystickMove +=moving;
		EasyJoystick.On_JoystickMoveEnd += moveEnd;
	}
	void moveStart (MovingJoystick move)
	{
	     
	}
	void moving (MovingJoystick move)
	{
    //  float x = move.joystick.JoystickTouch.x;
    //	float y = move.joystick.JoystickTouch.y;

		float x = move.joystickAxis.x;
		float y = move.joystickAxis.y;
		transform.LookAt (transform.position + new Vector3 (x, 0, y));
		if (x!= 0 || y!= 0) {
			transform.Translate (Vector3.forward * speed * Time.deltaTime);
			GetComponent<Animation> ().CrossFade ("Run");
		}
	}
	void moveEnd (MovingJoystick move) 
	{
		GetComponent<Animation> ().CrossFade ("idle");
	}
	void OnDisable()  //脚本变为不活跃状态
	{
		EasyJoystick.On_JoystickMoveStart -=moveStart;
		EasyJoystick.On_JoystickMove -=moving;
		EasyJoystick.On_JoystickMoveEnd -= moveEnd;
	}
	void OnDestroy()
	{
		EasyJoystick.On_JoystickMoveStart -=moveStart;
		EasyJoystick.On_JoystickMove -=moving;
		EasyJoystick.On_JoystickMoveEnd -= moveEnd;
	}

4.虚拟按钮

打对勾,给Receiver object 添加对象,给方法添加名字,最后给英雄添加按钮脚本
在这里插入图片描述

    public class Cherobutton : MonoBehaviour 
    {  void Press(string buttonname) //可以带参,为按钮的名字
	  { Debug.Log ("ttttttt");	}
    }
2019-03-03 16:05:00 weixin_42513339 阅读数 147
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

这个问题本人困扰很久,由于做一些对比图,每次截图最好位置一样,但是很难自己调整成一样的,所以需要借助摄像机的位置。

首先介绍下

Unity GameObject菜单栏下有3个和View(此View指显示Scene面板虚拟相机(后面简称Scene Camera)的视角,而非真实Camera的视角 )相关的选项:Move To View、Align With View和Align View to Selected,其作用分别为:

Move To View:将选中的gameObject移动到Scene Camera视野的正中间。
Align With View:将选中的gameObject与Scene Camera的Transfrom重合。如果选中的是Camera,那么,此Camera正好显示Scene面板中的画面。
Align View to Selected:将Scene Camera与选中的gameObject的Transfrom重合。如果选中的是Camera,那么,Scene View正好显示此Camera中的画面。

我们可以利用Align With View和Align View to Selected来回到原来的视角位置,我们可以用Scene,自由移动视角找到合适的观看位置,然后选中Camera,点击Align With View,此时Camera的位置和角度就是当前视野的,可以记录下来。

然后第二次开始要回到原位置时,在Camera中输入记录的位置和角度,选中Camera,然后点击Align View to Selected,在Scene中便能回到原位置。

 

2019-08-05 23:23:17 u013914307 阅读数 141
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

通过滚动鼠标的中键,来控制相机的视角的放大和缩小,在此记录一下此功能

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 鼠标滚轮控制相机视野的变化
/// </summary>
public class MouseMiddleControlCamera : MonoBehaviour {
    [Header("相机视角的最小值")]
    [Range(0,100)]
    public float m_CameraFieldOfViewMin;
    [Header("相机视角的最大值")]
    [Range(0, 100)]
    public float m_CameraFieldOfViewMax;
    private void Awake()
    {
        m_CameraFieldOfViewMin = 15;
        m_CameraFieldOfViewMax = 100;
    }
    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        //鼠标滚轮的效果
        //camera.main.fieldofview摄像机的视野
        //Camera.main.orthographicSize摄像机的正交投影
        //Zoom out 缩小
        //GetAxis获得轴,Mouse ScrollWheel鼠标滚轮
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (Camera.main.fieldOfView <= m_CameraFieldOfViewMax)
                Camera.main.fieldOfView += 2;
            if (Camera.main.orthographicSize <= 10)
                Camera.main.orthographicSize += 1f;
        }
        //Zoom in 放大
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (Camera.main.fieldOfView > m_CameraFieldOfViewMin)
                Camera.main.fieldOfView -= 2;
            if (Camera.main.orthographicSize >= 1)
                Camera.main.orthographicSize -= 1f;
        }
    }
}

 

工程用的Unity 5.6.5p4 (32-bit)的版本,位置在链接:https://pan.baidu.com/s/1Ov8irVY2z8V4T3ElDAvRrA
提取码:mt82
有问题的话,请指出

unity 3D入门

阅读数 836

没有更多推荐了,返回首页