オブジェクトを見てボタンを押すと、何かする必要があります。私が初めてそれをするとき、それは動作しますが、ボタンをもう一度押す必要はありません。ただオブジェクトを見ることができます。しかし、選手だけではなく、私はそれを使用する方法RaycastHitは常に真を返します
private Collider thisCollider;
public int ActionNumber { get; private set; }
void Start()
{
thisCollider = GetComponent<Collider>();
}
void Update()
{
if (Input.GetButton("Fire1") && DoPlayerLookAtObject())
ActionsList();
}
bool DoPlayerLookAtObject()
{
int layerMask = 1 << 9;
layerMask = ~layerMask;
RaycastHit _hit;
Ray _ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0));
bool isHit = Physics.Raycast(_ray, out _hit, 2.0f, layerMask);
if (isHit && _hit.collider == thisCollider)
return true; // this return true all the time after first interaction with object
else
return false;
}
public bool ActionsList()
{
if (DoPlayerLookAtObject())
switch (thisCollider.name)
{
case "barthender": ActionNumber = 1; return true;
case "doorToStreet": ActionNumber = 2; return true;
default: Debug.Log("Error: Out of range"); break;
}
return false;
}
を見て、対象物を見て、ボタンを押す必要があります。
public OnMousePressCasino onMousePressCasinoBarthender;
public OnMousePressCasino onMousePressCasinoDoorToStreet;
if (onMousePressCasinoBarthender.ActionNumber == 1 &&
onMousePressCasinoBarthender.ActionsList())
// do something
if (onMousePressCasinoDoorToStreet.ActionNumber == 2 &&
onMousePressCasinoDoorToStreet.ActionsList())
// do something
編集1プレイヤーの衝突を無視します。ゲーム
あなた自身を打っているので、それはtrueを返します。 'Ray_ray = Camera.main.ScreenPointToRay(新しいVector3(Screen.width/2、Screen.height/2、0));' 'Z'をさらに遠くに設定します。 「2」。それ以外は常にそれ自体を打つことを期待しています... –
@ m.rogalskiここでは、プレーヤーのコライダーを無視します: 'int layerMask = 1 << 9; layerMask =〜layerMask; '。私はその物体にぶつけることができる。しかし、私が2度目にそれをヒットしたいとき、私はボタンを押す必要はありません、私はちょうどオブジェクトを見ることができます – dima