unity用java脚本怎么实现在安卓下手指滑动旋转主摄像机

unity用java脚本怎么实现在安卓下手指滑动旋转主摄像机,第1张

1 unity3d介绍

这是一个跨平台的3维游戏开发引擎,封装程度非常高,使用者完全不用管平台的问题

比如我开发android的应用,只需要导入模型,写模型要怎样旋转即可,至于android、dalvik虚拟机、java,完全用不到。

2 下载

(1)在官方网站下载名字叫UnitySetup-353exe的程序即可

(2)要开发android的,需要下载android的SDK,巨大,具体步骤网上搜索,我的博客好像也有

3 使用

(1)安装unity,直接打开unity,打开后会默认打开自带的例子,选择文件-新建scene

(2)在里面画模型或导入外部模型,格式为FBX,其他格式没试过

菜单栏的assets表示资源的意思,创建模型要在gameobject里面,创建cube等。

创建完成后,打开hierarchy面版,选中对象,可以在inspector中查看属性,可以调整摄像机的位置,模型的位置

(3)先写脚本,然后为相机或模型绑定脚本

在project面板中新建一个文件夹,用于存放与这个项目有关的、脚本等。

然后在里面创建一个javascript脚本,用记事本或自带的assemble-打开,复制粘贴下面的东西

#pragma strict

//用于绑定参照物对象

var target : Transform;

//缩放系数

var distance = 100;

//左右滑动移动速度

var xSpeed = 2500;

var ySpeed = 1200;

//缩放限制系数

var yMinLimit = -20;

var yMaxLimit = 80;

//摄像头的位置

var x = 00;

var y = 00;

//记录上一次手机触摸位置判断用户是在左放大还是缩小手势

private var oldPosition1 : Vector2;

private var oldPosition2 : Vector2;

//初始化游戏信息设置

function Start () {

var angles = transformeulerAngles;

x = anglesy;

y = anglesx;

// Make the rigid body not change rotation

if (rigidbody)

rigidbodyfreezeRotation = true;

}

function Update ()

{

//判断触摸数量为单点触摸

if(InputtouchCount == 1)

{

//触摸类型为移动触摸

if(InputGetTouch(0)phase==TouchPhaseMoved)

{

//根据触摸点计算X与Y位置

x += InputGetAxis("Mouse X") xSpeed 002;

y -= InputGetAxis("Mouse Y") ySpeed 002;

}

}

//判断触摸数量为多点触摸

if(InputtouchCount >1 )

{

//前两只手指触摸类型都为移动触摸

if(InputGetTouch(0)phase==TouchPhaseMoved||InputGetTouch(1)phase==TouchPhaseMoved)

{

//计算出当前两点触摸点的位置

var tempPosition1 = InputGetTouch(0)position;

var tempPosition2 = InputGetTouch(1)position;

//函数返回真为放大,返回假为缩小

if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))

{

//放大系数超过3以后不允许继续放大

//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改

if(distance > 3)

{

distance -= 05;

}

}else

{

//缩小洗漱返回185后不允许继续缩小

//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改

if(distance < 185)

{

distance += 05;

}

}

//备份上一次触摸点的位置,用于对比

oldPosition1=tempPosition1;

oldPosition2=tempPosition2;

}

}

}

//函数返回真为放大,返回假为缩小

function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean

{

//函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势

var leng1 =MathfSqrt((oP1x-oP2x)(oP1x-oP2x)+(oP1y-oP2y)(oP1y-oP2y));

var leng2 =MathfSqrt((nP1x-nP2x)(nP1x-nP2x)+(nP1y-nP2y)(nP1y-nP2y));

if(leng1<leng2)

{

//放大手势

return true;

}else

{

//缩小手势

return false;

}

}

//Update方法一旦调用结束以后进入这里算出重置摄像机的位置

function LateUpdate () {

//target为我们绑定的箱子变量,缩放旋转的参照物

if (target) {

//重置摄像机的位置

y = ClampAngle(y, yMinLimit, yMaxLimit);

var rotation = QuaternionEuler(y, x, 0);

var position = rotation Vector3(00, 00, -distance) + targetposition;

transformrotation = rotation;

transformposition = position;

}

}

static function ClampAngle (angle : float, min : float, max : float) {

if (angle < -360)

angle += 360;

if (angle > 360)

angle -= 360;

return MathfClamp (angle, min, max);

}

function OnGUI () {

//将坐标信息显示在3D屏幕中

GUILabel(Rect(50, 100,200,20),"x pos is" + x);

GUILabel(Rect(50, 120,200,20),"y pos is" + y );

}

这段代码表示target要怎么渲染,即在每一帧的渲染时进行旋转、缩放等,还有与屏幕的交互。

拷贝完了,记得在assembly-unityscript中按F8编译。

然后在project面板,吧这个脚本文件拖到hierarchy面板的camera上,就完成了脚本与camera对象的绑定

然后再hierarchy面板选中camera,把cube拖到camera在inspector面板底部的脚本对应的target中,意思就是把cube赋值给脚本中的target。

(4)导出apk文件

file-build setting,android的话要制定sdk的位置。

编,程,回,忆,录,之unity3d大致过程就是tmd这样的。

void updateCameraVectors() { // Calculate the new Front vector glm::vec3 front; frontx = cos(glm::radians(this->Yaw)) cos(glm::radians(this->Pitch)); fronty = sin(glm::radians(this->Pitch)); frontz = sin(glm::radians(this->Yaw)) cos(glm::radians(this->Pitch)); this->Front = glm::normalize(front); // Also re-calculate the Right and Up vector }

在停止滑动(OnEndDrag)时,调整Content的localPosX:使其逐渐变为与其最接近的若干的标准PosX中的那个。

当前只支持横向滑动。

2种模式:

将UIScrollRectAdjustor挂在ScrollRect同级节点上。

可配置

UIScrollRectAdjustorcs

首先,标题里需求可能说的不是很明确我再重新叙述一下~

 需求:两张,一个滑动条,向左滑显示底图部分,向右滑显示顶图部分

1先建一个背景如下

总结:巧妙的利用了遮罩来处理需求,思路很重要!

1、打开unity3D软件,点击create创建一个新的javascript的脚本,初始内容如图所示

实现左右旋转

在update函数中输入下列代码:

if(InputGetKey(KeyCodeQ)){

transformRotate(0,-25TimedeltaTime,0,SpaceSelf);

}

if(InputGetKey(KeyCodeE)){

transformRotate(0,25TimedeltaTime,0,SpaceSelf);

}

如图所示!

接下来我们要实现的是上下的旋转

Update函数代码如下:

if(InputGetKey(KeyCodeZ)){

transformRotate(-25TimedeltaTime,0,0,SpaceSelf);

}

if(InputGetKey(KeyCodeC)){

transformRotate(25TimedeltaTime,0,0,SpaceSelf);

}

加上刚才的左右旋转,代码应该是如图所示!

将代码保存,查看提示栏中是否有错误提示,如果没有则代码可以执行,如果不可以,请查看参照上述步骤检查错误

注意:U3D的代码区分大小写

将脚本文件附加在物体上,检测是否出现错误。中附加的脚本叫“test_01”然后按下测试键运行,如果可以实现,代码成功。

新建脚本 挂载到摄像机上,然后把代码丢进去就行了。

public   class Scale : MonoBehaviour  

{  

//速度  

public float   ChangeSpeed = 05f;  

private float maximum =   13;  

private float minmum =   7;  

void Update()  

{  

if   (InputGetAxis("Mouse ScrollWheel") != 0)  

{  

//限制size大小  

CameramainorthographicSize   = MathfClamp(CameramainorthographicSize, minmum, maximum);  

//滚轮改变  

CameramainorthographicSize   =   

CameramainorthographicSize   - InputGetAxis  

("Mouse   ScrollWheel") ChangeSpeed;  

}  

}  

}  

Unity是一款由Unity Technologies研发的跨平台2D/3D游戏引擎:

它以交互的图型化开发环境为首要方式,编译器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX、iOS或HTML5等众多平台。此外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。

C#写法:

// 定义一个手势的枚举

public enum Dir:int

{

Left = 0,

Stop,

Right

}

// C#脚本名为Testcs

public class Test: MonoBehaviour {

public GameObject _plane;// 挂一个用来显示的plane对象

public float duration = 05f; // 每05秒换一张

public Texture2D[] _texAll; // 挂30张

Dir _touchDir; // 当前的手势

float curTime = 0;

int _index = 0;

void Update()

{

// 当运行平台为IOS或Android时

if(Applicationplatform == RuntimePlatformIPhonePlayer || Applicationplatform == RuntimePlatformAndroid)

{

// 当输入的触点数量大于0,且手指移动时

if(InputtouchCount > 0 && InputGetTouch(0)phase == TouchPhaseMoved)

{

if(InputGetTouch(0)deltaPositionx < 0 - MathfEpsilon)

_touchDir = DirLeft;

else

_touchDir = DirRight;

}

// 当输入的触点数量大于0,且手指不动时

if(InputtouchCount > 0 && InputGetTouch(0)phase == TouchPhaseStationary)

{

_touchDir = DirStop;

}

}

// 根据手势顺序或逆序换图

if(_touchDir != DirStop)

{

if(_touchDir == DirLeft)

{

curTime += TimedeltaTime;

if(curTime > duration)

{

curTime = 0;

_index = _index == 0 _texAllLength - 1 : _index ;

_planerenderermaterialmainTexture = _texAll[_index--];

}

}

else

{

curTime += TimedeltaTime;

if(curTime > duration)

{

curTime = 0;

_index = _index == _texAllLength - 1 0 : _index ;

_planerenderermaterialmainTexture = _texAll[_index++];

}

}

}

}

}

以上就是关于unity用java脚本怎么实现在安卓下手指滑动旋转主摄像机全部的内容,包括:unity用java脚本怎么实现在安卓下手指滑动旋转主摄像机、Unity中如何获取指定角度的方向向量、Unity中的ScrollRect滑动结束后,自动将最靠近中间的元素居中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9446419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存