unity3d摄像机脚本
❶ 在Unity3D中如何让摄像机围绕某个特定的对象旋转
在制作游戏时我们需要让摄像机围绕某个特定对象旋转,以便使用户更方便观察该对象。我们需要用到transform的RotateAround(vector3 postion,vector3 axis,float angle)函数(注:本文仅用C#)。
下面例子可以让你更好的理解:
游戏界面:一个摄像机Main Camera,一个方体Cube
在Project视图中创建一个新的脚本文件Gamelogic1.cs
代码界面:代码如下
using UnityEngine;
using System.Collections;
public class Gamelogic1: MonoBehaviour {
public GameObject cube;
Vector2 p1,p2;//用来记录鼠标的位置,以便计算旋转幅度
// Use this for initialization
void Start () {
originalPosition=transform.position;
cube=GameObject.Find("Cube");}// Update is called once per frame
void Update () {
if(Input.GetMouseButtonDown(1)){p1=new Vector2(Input.mousePosition.x,Input.mousePosition.y);//鼠标右键按下时记录鼠标位置p1}if(Input.GetMouseButton(1)){p2=new Vector2(Input.mousePosition.x,Input.mousePosition.y);//鼠标右键拖动时记录鼠标位置p2
//下面开始旋转,仅在水平方向上进行旋转
float dx=p2.x-p1.x;
transform.RotateAround(cube.transform.position,vector3.up,dx*Time.delTime);}}PS:您的Unity3D的MonoDevelop可能不支持中文,如出现错误,请将上面示例代码中的中文注释去掉
编辑好代码之后,在视图界面将Gamelogic1.cs拖到摄像机上,以便使代码能执行。这样您就可以在水平方向上按任意角度查看对象了。
编程小记:可以多参考一下Unity的脚本参考,那里有所有对象、属性、方法的解释及示例,当然前提是您英文要好O(∩_∩)O哈哈~
❷ unity中怎么给摄像机添加脚本
可以直接输入,会自动默认这个的。
❸ unity3d 官方第三人称控制脚本
把第三人称的摄像机控制代码去掉,改成MouseOrbit,这个代码是scripts包里面的,导入进来就有,这个代码就是类似于<流星蝴蝶剑>那种视角,鼠标控制方向,有不明白的再问
❹ 如何使用unity3D做一个360°的图像查看器
第1步:准备一张合适的图片
在查看器中使用的图片必须是2:1的宽高比和球面投影,这意味着为了正确地在球体内渲染,图片的顶部和底部必须是拉伸的。
球面投影如果图片具有更全景式的宽长比,当我们创建一个放置在球体上的材质时将显得更加约束。于我而言,这是我使用的测试图片
第2步:创建shader
现在我们需要创建一个自定义的shader,这个shader会改变材质在球体内部的投射而不是改变其在球体外部的投射,正是由于这一点,应用镜像图像不会使之看得有偏差。这是我的shader代码:
Shader “Unlit/Pano360Shader”
{
Properties
{
_MainTex (“Base (RGB)”, 2D) = “white” {}
_Color (“Main Color”, Color) = (1,1,1,0.5)
}
SubShader
{
Tags { “RenderType” = “Opaque” }
//This is used to print the texture inside of the sphere
Cull Front
CGPROGRAM
#pragma surface surf SimpleLambert
half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten)
{
half4 c;
c.rgb = s.Albedo;
return c;
}
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
float4 myColor : COLOR;
};
fixed3 _Color;
void surf (Input IN, inout SurfaceOutput o)
{
//This is used to mirror the image correctly when printing it inside of the sphere
IN.uv_MainTex.x = 1 — IN.uv_MainTex.x;
fixed3 result = tex2D(_MainTex, IN.uv_MainTex)*_Color;
o.Albedo = result.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback “Diffuse”
}
第3步:创建球体并设置摄像机
创建一个包含摄像机的游戏对象,也就是说摄像机作为cameraContainer游戏对象的子对象。这个cameraContainer游戏对象必须放置在球体的中间,像这样:
第4步:创建材质并应用到球体上
使用之前创建的shader来创建并应用材质,并且附加上图片,它将像这样:
试着在球体内部移动并观察图像:
正如你看到的那样,建筑物有一点扭曲,我把材质y tiling的值从1改成1.15,解决了这个问题,如果图像的球面投影不恰当就有可能出现这个问题。
现在建筑物看起来就比较好了。
第5步:增加鼠标控制使得在球体内部移动
你需要创建一个脚本,根据鼠标的位置来控制摄像机的旋转,如下是附加在摄像机上的脚本:
float horizontal;
float vertical;
Transform container;
void LateUpdate ()
{
//Using mouse
horizontal = Input.GetAxis(“Mouse X”);
vertical= Input.GetAxis(“Mouse Y”);
//This is made in order to avoid rotation on Z, just by typing 0 on Zcoord isn’t enough
//so the container is rotated around Y and the camera around X separately
container.Rotate(new Vector3(0,horizontal*(-1),0f)*Time.deltaTime*turnSpeedMouse);
transform.Rotate(new Vector3(vertical, 0, 0)*Time.deltaTime*turnSpeedMouse);
}
❺ Unity摄像机的脚本怎么写
新建脚本 挂载到摄像机上,然后把代码丢进去就行了。
public class Scale : MonoBehaviour
{
//速度
public float ChangeSpeed = 0.5f;
private float maximum = 13;
private float minmum = 7;
void Update()
{
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
//限制size大小
Camera.main.orthographicSize =Mathf.Clamp(Camera.main.orthographicSize, minmum, maximum);
//滚轮改变
Camera.main.orthographicSize =
Camera.main.orthographicSize - Input.GetAxis
("Mouse ScrollWheel") * ChangeSpeed;
}
}
}
Unity是一款由Unity Technologies研发的跨平台2D/3D游戏引擎:
它以交互的图型化开发环境为首要方式,编译器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX、iOS或HTML5等众多平台。此外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。
❻ unity 3d 如何脚本实现多摄像头制作的后视镜效果
首先,场景中有一个主摄像机:main camera,然后,你再创建一个新的camera01,类型可以设置为正交(如果想要鱼眼效果的后视镜可以选择透视),接着将这个camera01方在物体上(比如一辆车上,摄像头的朝向必须与前进方向相反)。接着设置camera01的参数:属性中有一列:viewport rect,这里是调节camera01在场景中的位置、大小,比如你可以调节:X:0.8 Y0.8 W0.2 H0.2,自行根据实际显示的效果进行微调。
当然,unity是一个工具,实现方法有很多种,像这个方法主要还是运用在小地图的制作。另外还可以使用render texture贴在camera上实现后视镜效果,呃,先说这么多吧。我的博客:优三帝同学,一起学习吧。哈哈哈。
❼ 求unity3d,第一人称旋转视角脚本代码,js,C#均可,最好是C#
usingUnityEngine;
usingSystem.Collections;
publicclassFPSCameraControl:MonoBehaviour
{
publicfloatxAxisRotateMin=-30f;//绕X轴旋转的最小度数限制
publicfloatxAxisRotateMax=30f;//最大
publicfloatxRotateSpeed=30f;//绕X轴旋转的速度
publicfloatyRotateSpeed=50f;//绕Y轴旋转的速度
floatyRotateAngle;
floatxRotateAngle;
voidUpdate()
{
if(Input.GetMouseButton(0))
{
yRotateAngle+=Input.GetAxis("MouseX")*Time.deltaTime*yRotateSpeed;
xRotateAngle+=Input.GetAxis("MouseY")*Time.deltaTime*xRotateSpeed;
if(xRotateAngle<xAxisRotateMin)
{
xRotateAngle=xAxisRotateMin;
}
if(xRotateAngle>xAxisRotateMax)
{
xRotateAngle=xAxisRotateMax;
}
transform.rotation=Quaternion.Euler(newVector3(xRotateAngle,yRotateAngle,0));//设置绕Z轴旋转为0,保证了垂直方向的不倾斜
}
}
}
上面脚本拖拽到相机上即可。
有什么不懂的可以给我发站内消息。~~~
❽ 简单的Unity3d脚本问题
楼上的基本上说出了原因,你把for(;;i++)放到Update里面就相当于一个无线的死循环放到主线程中,会卡住是正常的,如果你需要解决,就把他放到一个线程中,这样就不会卡住了。
❾ unity3d 相机怎么添加脚本
由于项目需求,需要在unity中播放高清视频,视频分辨率达到了3840x1200。采用的是c++
plugin解码视频,提供图片纹理给unity渲染的方式。而在unity中使用的是rendertexture来保存解码的视频图片。为了方面调试,需要保存某一些时刻的图片数据到本地,可以采用下面的函数实现:
[csharp]
view
plain
[contextmenu("save
png")]
private
void
savetexturetofile()
{
if
(outputtexture
!=
null)
{
rendertexture
prev
=
rendertexture.active;
rendertexture.active
=
target;
texture2d
png
=
new
texture2d(outputtexture.width,
outputtexture.height,
textureformat.argb32,
false);
png.readpixels(new
rect(0,
0,
outputtexture.width,
outputtexture.height),
0,
0);
byte[]
bytes
=
png.encodetopng();
string
path
=
string.format("mp/raw
{0}.png",
random.range(0,
65536).tostring("x"));
filestream
file
=
file.open(path,
filemode.create);
binarywriter
writer
=
new
binarywriter(file);
writer.write(bytes);
file.close();
texture2d.destroy(png);
png
=
null;
rendertexture.active
=
prev;
}
}
❿ unity3D中如何还原摄像机的旋转角度
在摄像机上绑定一个脚本,脚本里:1.获取小球的Transform
a
2.update里写上transform.position=a.position-10*vector3.forward
纯手机打字,望采纳