2015-09-22 1 views
0

Этот скрипт должен вызывать объект после нажатия на другой объект, который ближе, чем hitRange, и имеет тег «Блок». Проблема в том, что он всегда создает новый объект после нажатия LMB, также когда необходимые условия не выполнялись.Unity3D Instantiate работает, когда выполняются не все условия.

#pragma strict 

var blockName : String; 
private static var blockToPlace : Rigidbody; 
var hitRange : float; 
private var hit : RaycastHit; 
var blockLayer : int = 8; 
private var hitBlock : boolean; 


function Update(){ 
    if(Input.GetMouseButtonDown(0)){ 
     blockToPlace = EditorUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath("Assets/Models/Blocks/"+blockName+".prefab", Rigidbody)) as Rigidbody; 
     hitBlock = Physics.Raycast(transform.position, transform.forward, hit, Mathf.Infinity, blockLayer); 
     if(hitBlock == true){ 
      if(hit.collider.tag == "Block"){ 
       if(hit.distance < hitRange){ 
        var block : Rigidbody; 
        block = Instantiate(blockToPlace,hit.normal+hit.transform.position,Quaternion.identity) as Rigidbody; 
        hitBlock = false; 
       } 
      } 
     } 
    } 
} 

ответ

0

Мне тоже было трудно с такой же проблемой. Layers arn't точно целые числа, а скорее биты.

Смотреть это очень хорошее видео на layermasks: www.youtube.com/watch?v=n8mAjwn-MB8

var blockLayer : int = 8; 

должен быть

var blockLayer : int = 1 << 8; 
+0

Большое спасибо! – janw23

+0

@JWPL Обязательно принимайте ответ, если он удовлетворительно решает вашу проблему, поэтому ваш вопрос отмечен как ответ. – Serlite

+0

@JWPL не проблема, рад, что я помог кому-то –

 Смежные вопросы

  • Нет связанных вопросов^_^