开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:466

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 1147|回复: 30

[技术讨论] easyTouch虚拟摇杆控制人物移动,摄像机旋转之后,摇杆方向不正确。

[复制链接]  [移动端链接]
排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
发表于 2016-12-22 10:32:02 | 显示全部楼层 |阅读模式
12蛮牛币
本人小白一枚,凭着爱好和兴趣在论坛逛了很久,看见有一名前辈也提到这个问题,不过貌似他2015年的帖子到现在也没有解决,恰巧自己也在纠结这个问题,哪怕倾尽所有的蛮牛币,还是再发帖子寻求各位前辈帮助,望各位前辈给予帮助为谢。
在这里引用一下他(ljt326)的问题描述,然后再自己补充一下,劲量让各位前辈了解我的想法:
先描述下问题:网上得到的脚本,人物可以移动,添加摄像机跟随脚本之后,同时采取俯视加锁定视角能够完成《英雄联盟》类游戏的视角跟随和移动操作(但这不能满足于我的要求)。
但是一旦摄像机拉近,采取魔兽世界镜头镜头不变时,人物可以前后左右移动,但在人物移动方向(Z轴)改变后,人物进入Idle,此时即使摄像机Z轴与人物Z轴方向一致,再次触发摇杆移动,人物又会以之前的摇杆偏移量及朝向来移动

一、是不是因为 transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY));  里面的朝向一直是人物的世界坐标与摇杆偏移计算后形成的问题?如果是,那如何转变成人物的当前坐标?奈何本人能力有限,需要前辈贴下代码予以帮助。
二、是不是transform.Translate(Vector3.forward * Time.deltaTime * 5);  里面的vector3.forwar 用的是世界坐标的forward,即使人物方向改变之后,在重新触发摇杆时仍然是以世界坐标Forward移动?如果是,该如何解决?请予以代码及说明帮助。
三、能否在摇杆事件进入IDLE的时候,重新以现在人物的位置为下次摇杆触发时的Lookat(),及Vector3.forward的新参考点?可行与否?如果可行,请前辈们予以说明帮助。

然后贴一下摇杆代码:
using Engine;  
using System.Collections;  

public class MoveController : MonoBehaviour {  

    void OnEnable()  
    {  
        EasyJoystick.On_JoystickMove += OnJoystickMove;  
        EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;  
    }  


    //移动摇杆结束  
    void OnJoystickMoveEnd(MovingJoystick move)  
    {  
        //停止时,角色恢复idle  
        if (move.joystickName == "MoveJoystick")  
        {  
            animation.CrossFade("idle");  
        }  
    }  


    //移动摇杆中  
    void OnJoystickMove(MovingJoystick move)  
    {  
        if (move.joystickName != "MoveJoystick")  
        {  
            return;  
        }  

        //获取摇杆中心偏移的坐标  
        float joyPositionX = move.joystickAxis.x;  
        float joyPositionY = move.joystickAxis.y;  


        if (joyPositionY != 0 || joyPositionX != 0)  
        {  
            //设置角色的朝向(朝向当前坐标+摇杆偏移量)  
           transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY));  
            //移动玩家的位置(按朝向位置移动)  
            transform.Translate(Vector3.forward * Time.deltaTime * 5);
  
            //播放奔跑动画  
            animation.CrossFade("run");  
        }  
    }  
}  
//个人认为问题应该出现在代码后部分加黑字体处,由于初学能力有限,不管是跟换摄像机foward,还是改变vector3.forward为transform.forward,还是加上space.self等等都无法解决。经过一个星期的摸索,个人认为如何将人物当前坐标实时转换为lookat(),和移动的forward所用才是问题所在。请给位前辈指明和帮助。

回复

使用道具 举报

5熟悉之中
654/1000
排名
4719
昨日变化
2

16

主题

221

帖子

654

积分

Rank: 5Rank: 5

UID
118981
好友
0
蛮牛币
1009
威望
0
注册时间
2015-8-20
在线时间
177 小时
最后登录
2017-9-23
发表于 2016-12-22 10:32:03 | 显示全部楼层
transform.forward=(transform.TransformDirection(new Vector3(x,0,y)));  
            transform.Translate(transform.forward * Time.deltaTime * 1f,Space.World);
改下这样方向对了。但总觉得这种思路就是错的。两个函数都有默认参数设置关于自身还是世界方向

点评

使用欧拉角旋转度为相机欧拉角y值 以相机欧拉角为基础  发表于 昨天 20:27

回复

使用道具 举报

5熟悉之中
561/1000
排名
5464
昨日变化
3

1

主题

163

帖子

561

积分

Rank: 5Rank: 5

UID
124122
好友
2
蛮牛币
905
威望
0
注册时间
2015-9-28
在线时间
187 小时
最后登录
2017-9-18
发表于 2016-12-22 11:16:35 | 显示全部楼层
C:\Users\Administrator\Desktop希望可以帮助你。虚拟摇杆控制向前的时候,人物向自己正前方移动。

回复

使用道具 举报

5熟悉之中
561/1000
排名
5464
昨日变化
3

1

主题

163

帖子

561

积分

Rank: 5Rank: 5

UID
124122
好友
2
蛮牛币
905
威望
0
注册时间
2015-9-28
在线时间
187 小时
最后登录
2017-9-18
发表于 2016-12-22 11:18:03 | 显示全部楼层
Transform.TransformDirection 变换方向。。。。。。

回复

使用道具 举报

5熟悉之中
561/1000
排名
5464
昨日变化
3

1

主题

163

帖子

561

积分

Rank: 5Rank: 5

UID
124122
好友
2
蛮牛币
905
威望
0
注册时间
2015-9-28
在线时间
187 小时
最后登录
2017-9-18
发表于 2016-12-22 11:20:27 | 显示全部楼层
Transform.TransformDirection 变换方向。。。。。。这个得到是人物正前方的向量APi里面看看

回复

使用道具 举报

排名
425
昨日变化
1

13

主题

328

帖子

2139

积分

Rank: 9Rank: 9Rank: 9

UID
13110
好友
10
蛮牛币
4569
威望
0
注册时间
2014-1-21
在线时间
500 小时
最后登录
2017-9-22

专栏作家认证开发者

发表于 2016-12-22 11:49:29 | 显示全部楼层
旋转 和 向前移动

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 12:04:26 | 显示全部楼层

前辈能否贴一下简单代码呢?谢谢了

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 12:58:21 | 显示全部楼层
494952279 发表于 2016-12-22 11:16
希望可以帮助你。虚拟摇杆控制向前的时候,人物向自己正前方移动。

虚拟遥感控制人物移动的时候人物都是面向正前方移动的,问题是上一次摇杆移动停止以后,再触发摇杆移动,移动方向又恢复到原来方向了。简单例子:
我按摇杆前进,人物朝正面移动,没毛病。但我再按左边摇杆,人物则面向左边移动,这时候停止移动,人物面朝左边停止,此时问题就来了,我再按前进,为什么人物不按面对的方向前进了呢》??

回复

使用道具 举报

5熟悉之中
561/1000
排名
5464
昨日变化
3

1

主题

163

帖子

561

积分

Rank: 5Rank: 5

UID
124122
好友
2
蛮牛币
905
威望
0
注册时间
2015-9-28
在线时间
187 小时
最后登录
2017-9-18
发表于 2016-12-22 13:37:49 | 显示全部楼层
对。每次把人物面向的那个向量给虚拟摇杆的前,每次虚拟摇杆操作之前,先把人物面前的向量初始化下。

回复

使用道具 举报

5熟悉之中
561/1000
排名
5464
昨日变化
3

1

主题

163

帖子

561

积分

Rank: 5Rank: 5

UID
124122
好友
2
蛮牛币
905
威望
0
注册时间
2015-9-28
在线时间
187 小时
最后登录
2017-9-18
发表于 2016-12-22 13:41:23 | 显示全部楼层
虚拟摇杆操作的是角色自身的的朝向,你把角色的前后左右全部用我给你的方法,算出向量,然后赋到虚拟摇杆上

回复

使用道具 举报

5熟悉之中
654/1000
排名
4719
昨日变化
2

16

主题

221

帖子

654

积分

Rank: 5Rank: 5

UID
118981
好友
0
蛮牛币
1009
威望
0
注册时间
2015-8-20
在线时间
177 小时
最后登录
2017-9-23
发表于 2016-12-22 18:27:20 | 显示全部楼层
我测试了下你的代码   明白你的意思了  这个lookat的逻辑问题   第一次停下来后  正向已经改变   你再次控制向前的偏移量还是加在了世界向前的方向而不是自身前方向。这个偏移量要根据自己朝向加   

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 20:43:17 | 显示全部楼层
浪费 发表于 2016-12-22 19:20
transform.forward=(transform.TransformDirection(new Vector3(x,0,y)));  
            transform.Transl ...

可能是我理解不透,试了还是不行啊

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 20:44:23 | 显示全部楼层
浪费 发表于 2016-12-22 18:27
我测试了下你的代码   明白你的意思了  这个lookat的逻辑问题   第一次停下来后  正向已经改变   你再次控 ...

具体这个新朝向怎样加呢?能否请前辈帮我贴下具体代码!!

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 20:47:22 | 显示全部楼层
494952279 发表于 2016-12-22 13:37
对。每次把人物面向的那个向量给虚拟摇杆的前,每次虚拟摇杆操作之前,先把人物面前的向量初始化下。 ...

前辈,如何将人物面前的向量初始化呢,我比较笨,能否贴下代码。。

回复

使用道具 举报

排名
17682
昨日变化
8

1

主题

14

帖子

56

积分

Rank: 2Rank: 2

UID
190424
好友
0
蛮牛币
47
威望
0
注册时间
2016-12-7
在线时间
21 小时
最后登录
2017-1-19
 楼主| 发表于 2016-12-22 21:29:21 | 显示全部楼层
453111303 发表于 2016-12-22 12:04
前辈能否贴一下简单代码呢?谢谢了

前辈,我知道您能解决,能否帮助下我呢?我研究了一下,感觉还是出现在lookAt的地方,不知为什么,LookAt()的时候没有吧人物Y轴的旋转加进去。。请明示!!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表