Lorsque je regarde un objet et appuyez sur le bouton, je dois faire quelque chose. Quand je le fais pour la première fois, cela fonctionne, mais alors je n'ai pas besoin d'appuyer à nouveau sur le bouton, je peux juste regarder l'objet. Mais joueur doit regarder l'objet et appuyez sur le bouton, non seulement regarderRaycastHit retourne vrai tout le temps
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;
}
Comment je l'utilise:
public OnMousePressCasino onMousePressCasinoBarthender;
public OnMousePressCasino onMousePressCasinoDoorToStreet;
if (onMousePressCasinoBarthender.ActionNumber == 1 &&
onMousePressCasinoBarthender.ActionsList())
// do something
if (onMousePressCasinoDoorToStreet.ActionNumber == 2 &&
onMousePressCasinoDoorToStreet.ActionsList())
// do something
Modifier 1 Ignorer collisionneur du joueur. Video du jeu
Il retourne vrai parce que vous vous frapper. 'Ray _ray = Camera.main.ScreenPointToRay (nouveau Vector3 (Screen.width/2, Screen.height/2, 0));' mettre le 'Z' plus loin, par ex. '2'. En plus, il s'attend toujours à se toucher ... –
@ m.rogalski J'ignore le collisionneur du joueur ici: 'int layerMask = 1 << 9; layerMask = ~ layerMask; '. Je peux frapper l'objet. Mais quand je veux frapper pour la deuxième fois, je n'ai pas besoin d'appuyer sur le bouton, je peux juste regarder l'objet – dima