初识unity3D-手势操作篇

在被各种自定义view折磨之后。公司又来了新需求,之前实在是太忙,本来想着过段时间闲下来,将我之前写的无数个自定义view,挑几个有价值的,跟大家分享一下。谁想到,一重山是一重关啊,又来了一个3D模型的需求。刚开始想过从网上找3D模型的解析库。我们要解析的是obj dae fbx。但是找来找去,没有找到一个好的,或多或少都有些问题。后来经过一番折磨之后,选择了unity3D。我想着也可能是真正的大神不会总是分享自己的经验?所以android的3D模型才会发展的这么慢?不得而知。

好吧,进入正题吧。

首先我要实现的是显示模型,这个很简单了。需要将dae,obj或者fbx文件拖动到assets文件夹下面,然后呢将文件拖动到上面的主页上面。


拖到这里

然后我们可以看到上面有一个Main Camera和Directional Light,一个是主摄像机,另外一个是环境光。

然后下面的是我的模型,在还没有完全绘制完的模型就已经500M了,很难想象真正画完是有多大.

然后我们只需要将摄像机对准我们的模型,然后我们就可以去游戏视图中看到我们的模型。虽然我们在预览的页面可以上下左右的控制模型的旋转缩放和扩大,但是真正运行到手机上,却不能旋转缩放了 ,我一直以为运行到手机上能和预览效果一样呢。谁知道....

然后我就开始了爬坑操作。

从网上疯狂搜索关于unity3D模型的手势操作的代码,然后一遍又一遍的往里面粘贴,但是根本没有用。后来中潜下心来,用心摸索。终于实现了自己想要的结果,当然也有一部分代码是借鉴前贤手札,照葫芦画瓢的。

真是正题了

1.编写主摄像机的脚本

首先点击主摄像机,找到 Add  Component 并且点击。然后找到new script,新建一个脚本。

然后在里面声明一个公共变量

public Transform engTransform;

这个东西其实是我们一会要关联我们要查看的模型的关键字段。我们声明完这个字段之后执行保存操作,然后去看unity3D的面板,会多一个这个画面。


关联

然后我们可以将模型拖动到这个transform中,之后我们继续编写摄像机的脚本。

private Vector3 offset;

声明偏移量;

然后在start()方法中,让我们摄像机的transform对准我们模型的坐标位置。正对着。

然后计算摄像机和模型的初始偏移量,也就是距离。

transform.LookAt(engTransform.position);

 offset = transform.position - engTransform.position;

然后在update()方法中,

我们只需要用模型的位置坐标+偏移量 就得到了改变之后的摄像机的位置。

void Update () {

        transform.position = offset + engTransform.position;

    }

亏我踩了那么多坑,真相却如此赤裸裸。可能是真正的unity3D大神都已经不屑写这个东西了。所以在网上找的大多都有问题。

然后贴出模型的脚本文件。这里面有个问题需要澄清一下。

public class tyreTouch : MonoBehaviour

{

    private Touch oldTouch1;

    private Touch oldTouch2;

    private GameObject engGameObject;

    // Use this for initialization

    void Start()

    {

        engGameObject = GameObject.Find("engine");

    }

    // Update is called once per frame

    void Update()

    {

        //没有触摸

        if (Input.touchCount <= 0)

        {

            return;

        }

        if (Input.touchCount == 1)

        {

            Touch touch = Input.GetTouch(0);

            Vector2 deltaPos = touch.deltaPosition;

            engGameObject.transform.Rotate(Vector3.down * deltaPos.x, Space.World);

            engGameObject.transform.Rotate(-Vector3.right * deltaPos.y, Space.World);

        }

        Touch newTouch1 = Input.GetTouch(0);

        Touch newTouch2 = Input.GetTouch(1);

        if (newTouch2.phase == TouchPhase.Began)

        {

            oldTouch2 = newTouch2;

            oldTouch1 = newTouch1;

            return;

        }

        float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);

        float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

        float offest = newDistance - oldDistance;

        float scaleFactor = offest / 1000f;

        Vector3 localScale = transform.localScale;

        Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, +localScale.z + scaleFactor);

        if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f)

        {

            engGameObject.transform.localScale = scale;

        }

        oldTouch1 = newTouch1;

        oldTouch2 = newTouch2;

    }

}

这是从网上粘过来的代码,我只改动了标黑的两处。

第一处是我们自己的模型,要替换为项目中我们自己模型的名字。

然后第二处,是我运行网上代码,发现的问题,我发现手势操作左右滑动时的方向是正确的,但是当我上下滑动时,方向却是相反的。所以我就将这个向量变成了负数,相应的y轴滑动方向也就是人类的习惯了。不再反人类。

o了,就到这,继续去学习unity3D,

有什么问题 大家随时交流!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容