Unity学习日常问题记录一

本文探讨了Unity中解决物体控制难题的方法,包括使物体在碰撞后消失、强制停止球体运动及恢复物体初始位置的技术细节。

开此内容记录在日常中遇到的问题,对可能遇到类似问题的人做一个参考

1.物体难以SetActive(true)本身

两个物体A和B碰撞后希望A消失,B获得一个碰撞速度

碰撞后获得速度的方向

 B.GetComponent<Rigidbody>.velocity = (A.position - B.position).normalized * speed;

然后需要在碰撞的时候让A物体显示为消失。比如台球的击球后让球杆消失,当然这是一种简化处理

然后把A碰撞体上Is Trigger勾上,这样可以在A的OnTriggerEnter函数中A.SetActive(false).

在Update()中,点击某键的时候A.SetActive(true)

但是这样带来一个问题,由于禁用了A,所以A的Update()不会工作了,也就永远不会重新激活

所有,重新激活的Update必须写在其他物体的Update()中,比如一个空物体。

2.当一个球sphere运动后,希望强制让它停止,不单要让它速度为0,角速度也要为了

B.GetComponent<Rigidbody>.velocity = Vector3.zero;


如果不把它的角速度也设为了,设断点调试的话会发现在后面的帧它依然会开始获得一个缓慢的速度,

所以必须再加一句

B.GetComponent<Rigidbody>.angularVelocity =Vector3.zero;


3.如何想经过一系列变换时,恢复(比如按某个键),恢复2物体的相对位置时,初始时

void Start() {

(Vector3)offset = A.position - B.position;

(Quaternion)oldAQuaternion = A.transform.rotation;

(Quaternion)oldBQuaternion = B.transform.rotation;

}

当然,根据需要的不同,Quaternion需要进行差值或一些其他运算。

根据官网文档,Unity角度运算现版本都用Quaternion,而使用者可使用Euler(例如Quaternion.Euler赋值和改变),Euler在Unity也很简单,就是transform组件中Rotation的值,绕x,y,xz轴的转角,可以有个顺序问题,似乎没维基中提到的Euler角那么复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值