Тема: Raycast unity. Як перевiрити чи луч влучив в точку.
Ось є луч котрий виходить з стволу пушки (летить прямо на 9999999 метрів).
Питання: Як перевірити попадання нижче i вище луча?
Якщо хтось захоче спитати навіщо це потрібно: Гравець повертає дуло тільки вправо i в ліво. В верх i вниз воно саме наводиться.
Пробачте що тут питаю просто мене на всix форумах послали далеко :С
Ось код якщо потрiбно:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Shot : NetworkBehaviour
{
public RaycastHit hit;
public bool Shot_Load = true;
Color cool;
[SyncVar]
public int Health = 100;
public int HealthNone = 100;
public Transform shot;
public Transform cam_pos;
[SyncVar]
public int commands;
Renderer[] renderers;
void Start() { cam_pos = UnityObject.GetInScen("CameCam").transform; }
void Update ()
{
if (Shot_Load) { cool = Color.red; } else { cool = Color.gray; }
Debug.DrawRay(UnityObject.Get("Ture_Shot", transform).position, UnityObject.Get("Ture_Shot", transform).forward * 1000.0F, cool);
if (!isLocalPlayer) { return; }
if (Physics.Raycast(UnityObject.Get("Ture_Shot", transform).position, UnityObject.Get("Ture_Shot", transform).forward, out hit, 1000.0F))
{
shot = hit.transform;
}
if(Shot_Load)
{
if(Input.GetMouseButtonDown(0))
{
Invoke("Reloading", 3);
Shot_Load = false;
if (shot.tag == "Player")
{
Debug.Log("Shot");
CmdAttak(shot.gameObject);
}
}
}
}
public void Reloading()
{
Shot_Load = true;
}
[ClientRpc]
private void RpcRespawn()
{
Health = HealthNone;
Transform spawn = NetworkManager.singleton.GetStartPosition();
transform.position = spawn.position;
transform.rotation = spawn.rotation;
ToggleRenderer(true);
}
[Command]
private void CmdAttak(GameObject obj)
{
Shot net = obj.GetComponentInParent<Shot>();
net.CmdDamage();
Debug.Log("CmdAttak");
}
[Command]
private void CmdDamage()
{
Debug.Log("CmdDamage");
int damag = 100;
if (damag >= Health)
{
RpcDead();
}
else
{
Health -= damag;
Debug.Log("CmdDamage het");
}
}
[ClientRpc]
private void RpcDead()
{
ToggleRenderer(false);
Invoke("CmdCallRespawn", 5);
if (commands == 0)
{
transform.position = UnityObject.GetInScen("Red").transform.position;
}
if (commands == 1)
{
transform.position = UnityObject.GetInScen("Blue").transform.position;
}
Debug.Log("Call RpcRespawn");
}
[Command]
void CmdCallRespawn()
{
RpcRespawn();
}
void ToggleRenderer(bool isAlive)
{
Debug.Log("ToggleRenderer");
renderers = GetComponentsInChildren<Renderer>();
for (int i = 0; i < renderers.Length; i++)
renderers[i].enabled = isAlive;
}
}
Дуже дякую за вiдповiдь.