2016-08-13 10 views
0

총알 충돌의 문제를 적나는 총알 촬영에 충돌 오류가

나는 총알 스크립트

총알 스크립트에서 OnCollisionEnter() 메소드를 사용하고 있습니다

public class BulletScript : MonoBehaviour 
{ 

public float TimeForDestory = 10f; 
public float Speed = 0.5f; 

// Use this for initialization 
void Start() { 

} 

public void OnCollisionEnter(Collision col) 
{ 
    Debug.Log("Collision"); 
    if (col.gameObject.tag == "Enemy") 
    { 
     Debug.Log("Collision"); 
    } 
} 

// Update is called once per frame 
void Update() { 
    transform.Translate(0, -Speed, 0); 
    if (TimeForDestory < 0f) 
    { 
     Destroy(gameObject); 
    }else 
    { 
     TimeForDestory -= 0.1f; 
    } 

} 
} 
을 나는 플레이어 스크립트

메소드 인스턴스화()를 사용하고 있기 때문에

총알하지 충돌 아무것도

총알이 물체를 벗어 17,451,515,

플레이어 스크립트 :

public class Player : MonoBehaviour 
     { 

//Player 


//Move 
public float defualtSpdPlayer = 1f; 
public float plsSpd = 0.1f; 
public float maxPlayer = 2f; 
private float speed = 0; 

//Bullet 
public Transform bulletSpawn; 
public GameObject bullet; 
public Texture ImgBackground; 
public Texture ImgWhiteGround; 
public Texture ImgReloading; 
public float bulletDamge = 1f; 
public float bulletSpeed = 0.1f; 
public float ReloadTime = 0.5f; 
public float ReloadFillAmontX = 2f; 
private float reload = 0; 
private float reloadFillAmont = 0; 
private bool readyToShoot = true; 
private string status = "Ready"; 

//GUI 
[HideInInspector] 
public bool guiShow = true; 

void Start() { 
    MoveStart(); 
    BulletStart(); 
} 
private void MoveStart() 
{ 
    speed = defualtSpdPlayer; 
} 
private void BulletStart() 
{ 
    if(ReloadTime > 1) 
    { 
     Debug.LogError("The Reload Time Is Bigger 1"); 
    } 
} 


void OnGUI() 
{ 

    //Verables 
    float cvReloadingWidth = 150; 
    float cvReloadingHeight = 150; 
    float cvReloadngY = Screen.height - cvReloadingHeight; 
    float cvReloadngX = Screen.width/2 - 70; 
    //Rects 
    Rect cvReloadingImages = new Rect(cvReloadngX, cvReloadngY, cvReloadingWidth, cvReloadingHeight); 
    Rect cvReloadinglalReloadTime = new Rect(cvReloadngX + 65, cvReloadngY + 75, cvReloadingWidth, cvReloadingHeight); 
    Rect cvReloadinglalStatus = new Rect(cvReloadngX + 40, cvReloadngY + 50, cvReloadingWidth, cvReloadingHeight); 
    //Texts 
    //Values 
    //Texture 
    GUI.DrawTexture(cvReloadingImages, ImgBackground); 
    GUI.DrawTexture(cvReloadingImages, ImgWhiteGround); 
    //GUI.DrawTexture(cvReloadingImages, ImgReloading); 

    if (reloadFillAmont <= 0) 
    { 
     GUI.skin.label.normal.textColor = Color.green; 
     GUI.skin.label.fontSize = 25; 
     GUI.skin.label.fontStyle = FontStyle.Bold; 
     GUI.Label(cvReloadinglalStatus, status); 
     GUI.skin.label.fontSize = 15; 
     GUI.skin.label.fontStyle = FontStyle.Bold; 
     GUI.Label(cvReloadinglalReloadTime, ReloadTime.ToString()); 
    } 
    else 
    { 
     GUI.skin.label.normal.textColor = Color.red; 
     GUI.Label(cvReloadinglalStatus, status); 
     GUI.Label(cvReloadinglalReloadTime, reloadFillAmont.ToString()); 
    } 
    //GUI 



} 

void Update() { 
    Move(); 
    Shoot(); 
} 
private void Move() 
{ 
    //Move 
    if (transform.rotation.y < 180) 
    { 
     plsSpeed(); 
     transform.Translate(Input.GetAxis("BW") * speed * Time.deltaTime, 0, Input.GetAxis("FW") * speed * Time.deltaTime); 
    } 
    if (transform.rotation.y >= 180) 
    { 
     plsSpeed(); 
     transform.Translate(-Input.GetAxis("BW") * speed * Time.deltaTime, 0, -Input.GetAxis("FW") * speed * Time.deltaTime); 
    } 
} 
private void plsSpeed() 
{ 
    if (speed > maxPlayer) 
    { 
     speed = defualtSpdPlayer; 
    } 
    else 
     speed += plsSpd; 
} 
//Gun Shoot 
private void Shoot() 
{ 
    if (readyToShoot) 
    { 
     if (Input.GetMouseButton(0)) 
     { 
      Instantiate(bullet, bulletSpawn.position, bulletSpawn.rotation); 
      readyToShoot = false; 
      reload = ReloadTime; 
      status = "Reloading"; 
     } 
     status = "Ready"; 
    } 
    else 
    { 
     reloadFillAmont = reload * ReloadFillAmontX; 
     if (reload < 0) 
     { 
      readyToShoot = true; 
     }else 
     { 
      reload -= Time.deltaTime; 
      status = "Reloading"; 
     } 
    } 
} 

} 

충돌의 문제가 무엇입니까?

답변

1
  1. 당신은이 총알이 외부에 관계없이 장애물/힘을 이동하는 것입니다 사용할 때 총알을 이동 transform.Translate(0, -Speed, 0);을 사용하고 있습니다. 이 문제를 해결하려면 탄환에 리지드 바디를 추가하고 해당 라인을 GetComponent<Rigidbody>().MovePosition(transform.position - Vector3.up * Speed);
  2. 으로 변경하십시오. 탄알이 빠르게 움직일 수 있으므로 충돌 감지를 리지드 바디에 연속적으로 배치하십시오.

RigidbodyMenu