【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:572

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

_____________________________________________________________________________________________________________
问答求助版块规则:

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

[技术讨论] [Bug]CharacterController.SimpleMove()突然无法移动

[复制链接]  [移动端链接]
2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
跳转到指定楼层
楼主
发表于 2019-1-8 10:52:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50蛮牛币
使用CharacterController.SimpleMove(), 有时会突然无法移动, 可以原地打转, console窗口报了一个Look rotation viewing vector is zero. 出现的概率并不是太高, 但是主程一下就测出来了.求怎么改?


回复

使用道具 举报

7日久生情
2207/5000
排名
705
昨日变化

1

主题

200

帖子

2207

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
879
威望
0
注册时间
2016-8-22
在线时间
744 小时
最后登录
2019-1-18
沙发
发表于 2019-1-8 10:52:56 | 只看该作者
看看atan2的函数吧,应该能避开这个坑。或者加个判断,可以避开这个,不会影响你的移动的
[发帖际遇]: 一个袋子砸在了 w20050830413 头上,w20050830413 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
板凳
 楼主| 发表于 2019-1-8 15:00:10 | 只看该作者
[JavaScript] 纯文本查看 复制代码
function _M:Update(dt)
	if self.enable and self.isMove then

		self.characterController:SimpleMove(moveDir * self.speed)

		self.characterTrans.forward = Vector3.Lerp(self.characterTrans.forward, moveDir, _stime)
		_stime = _stime + 0.033 * self.mul
	end
end

回复

使用道具 举报

7日久生情
2207/5000
排名
705
昨日变化

1

主题

200

帖子

2207

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
879
威望
0
注册时间
2016-8-22
在线时间
744 小时
最后登录
2019-1-18
地板
发表于 2019-1-9 09:14:44 | 只看该作者
你这问题的关键是moveDir是怎么求出来的

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
5#
 楼主| 发表于 2019-1-9 14:11:43 | 只看该作者
w20050830413 发表于 2019-1-9 09:14
你这问题的关键是moveDir是怎么求出来的

计算没毛病, 是在移动的过程中, 突然停下来了, 很蛋疼, 可能是某个角度下发生的, 但是试了很长时间试不出来
[发帖际遇]: 邀云yaoyun 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
2207/5000
排名
705
昨日变化

1

主题

200

帖子

2207

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
879
威望
0
注册时间
2016-8-22
在线时间
744 小时
最后登录
2019-1-18
6#
发表于 2019-1-9 15:14:02 | 只看该作者
我的意思是你求moveDir的某些环节会出现BUG,然后导致移动出问题,毕竟float的值也有精度的
曾经吃过这种亏,不过我是画圆,代码都对,也能画出来圆,但是就是会出个报错,这问题找了很久发现是float精度不对,也就是判断条件不合适

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
7#
 楼主| 发表于 2019-1-9 17:24:47 | 只看该作者
w20050830413 发表于 2019-1-9 15:14
我的意思是你求moveDir的某些环节会出现BUG,然后导致移动出问题,毕竟float的值也有精度的
曾经吃过这种亏 ...

是这样的..
[AppleScript] 纯文本查看 复制代码
local angle = self:GetDegAngle(offset.x, offset.y)
local qua	= Quaternion.Euler(Vector3.New(0, angle, 0))
moveDir	= qua * worldDir

function _M:GetDegAngle(x, y)
	local angle = 0
	if y >= 0 then
		angle = math.deg(math.atan(x / y))
	elseif y < 0 then
		angle = 180 - math.deg(math.atan(x / (-y)))
	end
	return angle
end
[发帖际遇]: 一个袋子砸在了 邀云yaoyun 头上,邀云yaoyun 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
2207/5000
排名
705
昨日变化

1

主题

200

帖子

2207

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
879
威望
0
注册时间
2016-8-22
在线时间
744 小时
最后登录
2019-1-18
8#
发表于 2019-1-9 17:59:42 | 只看该作者
你这代码,有没有考虑y=0之后会有什么问题。有很大概率,你不能动的时候就是0ffset.y为0的时候

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
9#
 楼主| 发表于 2019-1-9 18:46:28 | 只看该作者
w20050830413 发表于 2019-1-9 17:59
你这代码,有没有考虑y=0之后会有什么问题。有很大概率,你不能动的时候就是0ffset.y为0的时候
...

是有道理, 但是我把y直接写成0, 还是可以移动啊.....
[发帖际遇]: 邀云yaoyun 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
2207/5000
排名
705
昨日变化

1

主题

200

帖子

2207

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
879
威望
0
注册时间
2016-8-22
在线时间
744 小时
最后登录
2019-1-18
10#
发表于 2019-1-10 10:06:11 | 只看该作者
本帖最后由 w20050830413 于 2019-1-10 10:08 编辑

如果其他地方没有什么逻辑错误的话,你试试atan2这个函数吧,毕竟atan2要比atan稳定一些。或者你看看x,y同时为0的情况,出问题也就只会在这些特殊值的情况下有

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
11#
 楼主| 发表于 2019-1-10 10:22:53 | 只看该作者
w20050830413 发表于 2019-1-10 10:06
如果其他地方没有什么逻辑错误的话,你试试atan2这个函数吧,毕竟atan2要比atan稳定一些。或者你看看x,y同 ...

老哥稳啊, 刚才试了试, 同时为0的时候, 确实重现错误了,,, 有没有好的解决方法啊,

回复

使用道具 举报

2初来乍到
100/150
排名
17577
昨日变化
456

4

主题

26

帖子

100

积分

Rank: 2Rank: 2

UID
307525
好友
2
蛮牛币
383
威望
0
注册时间
2018-12-8
在线时间
34 小时
最后登录
2019-1-18
12#
 楼主| 发表于 2019-1-10 10:30:57 | 只看该作者
w20050830413 发表于 2019-1-10 10:24
看看atan2的函数吧,应该能避开这个坑。或者加个判断,可以避开这个,不会影响你的移动的 ...

试了一下, atan2(0, 0)确实不影响, 十分感谢

回复

使用道具 举报

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

本版积分规则

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