找回密码
 注册帐号

扫一扫,访问微社区

[Bug]CharacterController.SimpleMove()突然无法移动

11
回复
855
查看
[ 复制链接 ]
3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

UID
307525
好友
2
蛮牛币
181
威望
0
注册时间
2018-12-8
在线时间
60 小时
最后登录
2019-6-16
2019-1-8 10:52:55 显示全部楼层 阅读模式
50蛮牛币
使用CharacterController.SimpleMove(), 有时会突然无法移动, 可以原地打转, console窗口报了一个Look rotation viewing vector is zero. 出现的概率并不是太高, 但是主程一下就测出来了.求怎么改?

回复

使用道具 举报

7日久生情
2386/5000
排名
664
昨日变化

1

主题

228

帖子

2386

积分

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

UID
163577
好友
2
蛮牛币
2047
威望
0
注册时间
2016-8-22
在线时间
831 小时
最后登录
2019-6-6
2019-1-8 10:52:56 显示全部楼层
看看atan2的函数吧,应该能避开这个坑。或者加个判断,可以避开这个,不会影响你的移动的
回复

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

UID
307525
好友
2
蛮牛币
181
威望
0
注册时间
2018-12-8
在线时间
60 小时
最后登录
2019-6-16
楼主 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日久生情
2386/5000
排名
664
昨日变化

1

主题

228

帖子

2386

积分

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

UID
163577
好友
2
蛮牛币
2047
威望
0
注册时间
2016-8-22
在线时间
831 小时
最后登录
2019-6-6
2019-1-9 09:14:44 显示全部楼层
你这问题的关键是moveDir是怎么求出来的
回复

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

UID
307525
好友
2
蛮牛币
181
威望
0
注册时间
2018-12-8
在线时间
60 小时
最后登录
2019-6-16
楼主 2019-1-9 14:11:43 显示全部楼层
w20050830413 发表于 2019-1-9 09:14
你这问题的关键是moveDir是怎么求出来的

计算没毛病, 是在移动的过程中, 突然停下来了, 很蛋疼, 可能是某个角度下发生的, 但是试了很长时间试不出来
回复

使用道具 举报

7日久生情
2386/5000
排名
664
昨日变化

1

主题

228

帖子

2386

积分

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

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

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

UID
307525
好友
2
蛮牛币
181
威望
0
注册时间
2018-12-8
在线时间
60 小时
最后登录
2019-6-16
楼主 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
回复

使用道具 举报

7日久生情
2386/5000
排名
664
昨日变化

1

主题

228

帖子

2386

积分

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

UID
163577
好友
2
蛮牛币
2047
威望
0
注册时间
2016-8-22
在线时间
831 小时
最后登录
2019-6-6
2019-1-9 17:59:42 显示全部楼层
你这代码,有没有考虑y=0之后会有什么问题。有很大概率,你不能动的时候就是0ffset.y为0的时候
回复

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

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

是有道理, 但是我把y直接写成0, 还是可以移动啊.....
回复

使用道具 举报

7日久生情
2386/5000
排名
664
昨日变化

1

主题

228

帖子

2386

积分

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

UID
163577
好友
2
蛮牛币
2047
威望
0
注册时间
2016-8-22
在线时间
831 小时
最后登录
2019-6-6
2019-1-10 10:06:11 显示全部楼层
本帖最后由 w20050830413 于 2019-1-10 10:08 编辑

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

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

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

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

使用道具 举报

3偶尔光临
173/300
排名
14229
昨日变化

7

主题

48

帖子

173

积分

Rank: 3Rank: 3Rank: 3

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

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

使用道具 举报

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

本版积分规则