【发布时间】:2015-08-11 19:41:28
【问题描述】:
我今天早上刚刚将 Unity 从 5.0.0 更新到 5.2.1 版本,我遇到了一些问题。在 Unity 将游戏翻译为适用于新版本后,我对游戏进行了测试。一切都很好,除了当我在游戏中射出一颗子弹时,它们会粘在墙上而不是从墙上弹开,但仅限于特定的角度和距离。就好像子弹太快了,它跳过了对撞机,卡在了对撞机里面。这有点道理,但奇怪的是我有一个用于游戏中慢动作的 C# 脚本。每当我打开慢动作然后再次将其关闭时,子弹卡住的问题就会消失。我似乎无法弄清楚是什么导致了问题,而且在我更新软件之前它肯定不存在。谁能帮我解决这个问题?谢谢。我将在下面发布子弹脚本和慢动作脚本。顺便说一下,子弹是在播放器脚本中实例化的。
子弹脚本:
using UnityEngine;
using System.Collections;
public class Bullet : MonoBehaviour {
public float bulletSpeed;
public float bulletOpacity;
public bool fadeOut;
Animator anim;
Rigidbody2D rigidbod;
SpriteRenderer spriterend;
public GameObject player;
public float aimRotation;
// Use this for initialization
void Start () {
anim = GetComponent<Animator> ();
rigidbod = GetComponent<Rigidbody2D> ();
spriterend = GetComponent<SpriteRenderer> ();
rigidbod.velocity = transform.right * bulletSpeed;
rigidbod.gravityScale = 0;
bulletOpacity = 1;
}
// Update is called once per frame
void Update () {
Destroy (gameObject, 3f);
spriterend.color = new Color (1f, 1f, 1f, bulletOpacity);
if (fadeOut == true)
bulletOpacity -= 0.03f;
if (bulletOpacity <= 0)
Destroy (gameObject);
aimRotation = player.GetComponent<Player> ().aimRotation;
}
void OnTriggerEnter2D (Collider2D bulletHit) {
/*if (bulletHit.gameObject.layer == LayerMask.NameToLayer ("vulnerableLayer")) {
}*/
rigidbod.gravityScale = 1;
rigidbod.drag = 1;
fadeOut = true;
}
}
慢动作脚本:
using UnityEngine;
using System.Collections;
public class SlowMotion : MonoBehaviour {
public float currentLongevity = 0f;
public float slowAmount = 0.2f;
public float normalTime = 1f;
public float slowLongevity = 0.4f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (1)) {
Time.fixedDeltaTime = 0.0f * Time.timeScale;
if (Time.timeScale == normalTime)
Time.timeScale = slowAmount;
}
if (Time.timeScale == slowAmount) {
currentLongevity += Time.deltaTime;
}
if (currentLongevity > slowLongevity) {
currentLongevity = 0;
Time.timeScale = normalTime;
}
}
}
【问题讨论】:
-
你正在处理
OnTriggerEnter2D,所以看起来你必须手动创建弹跳效果(虽然我有时不确定它是如何工作的)。 -
它以前工作过,我怀疑这就是问题所在。我可以通过将rigidbody2D的碰撞检测从离散更改为连续来解决这个问题,但这仍然不能解决为什么它在运行慢动作脚本@Hopeless时突然工作的问题
标签: c# unity3d 2d collision-detection physics