我正在Unity VR中制作一个游戏,在其中我打数字并获得积分。
手套负责检测其击中的数字之间的碰撞。戴着手套,我有一个PunchScript
分量,每个数字都有一个rigidBody
和collider
。
问题在于似乎从未发生任何冲突。我在冲突检测代码中放置了Debug.LogError
来断言这一点。
我尝试打开/关闭所有对象的运动学,并使用不同的碰撞系统无济于事。
这是我的PunchScript
组件:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PunchScript : MonoBehaviour
{
public SteamVR_TrackedObject hand;
private Rigidbody rBody;
private bool visible = true;
// Start is called before the first frame update
void Start()
{
rBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
rBody.MovePosition(hand.transform.position);
rBody.MoveRotation(hand.transform.rotation);
// print(rBody.velocity.magnitude* 1000);
}
void OnCollisonEnter(Collision other)
{
Rigidbody otherR = other.gameObject.GetComponentInChildren<Rigidbody>();
if (other.gameObject.name == "frpnchbg") {
Debug.LogError("Hit!");
}
if (other == null)
return;
Vector3 avgPoint = Vector3.zero;
foreach (ContactPoint p in other.contacts) {
avgPoint += p.point;
}
avgPoint /= other.contacts.Length;
Vector3 dir = (avgPoint - transform.position).normalized;
otherR.AddForceAtPosition(dir *50f* rBody.velocity.magnitude, avgPoint);
}
}
这是手套对象在Unity检查器中的外观。
答案 0 :(得分:3)
正确地编写Unity回调方法的名称非常重要,否则Unity将无法在对象上检测到它们(因此,永远无法执行它们)。
在您的情况下,您拼错了OnCollisionEnter回调。
而不是OnCollisonEnter
应该是OnCollisionEnter
。