Собственно есть скрипт взгляда
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class EnemyVzglyad : MonoBehaviour {
public Transform target;
//opredelenie celi===========
private bool _vzglyad;
private int laierMask;
//===========================
void Start () {
laierMask = 1<<8;
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
RaycastHit plHit;
if(Physics.Linecast(target.position,other.transform.position,out plHit)){
if(plHit.collider.CompareTag("Player")){
_vzglyad = true;
Debug.DrawLine(target.position,plHit.transform.position,Color.yellow);
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
}
}
// Debug.Log(other.gameObject.name);
}
}
void OnTriggerExit(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
_vzglyad = false;
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
//nugno dobavit' timing ostanovki cherez time
}
}
void OnTriggerStay(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
RaycastHit plHit;
if(Physics.Linecast(target.position,other.transform.position,out plHit)){
if(plHit.collider.CompareTag("Player")){
_vzglyad = true;
float dist = Vector3.Distance(target.position,plHit.transform.position);
Debug.DrawLine(target.position,plHit.transform.position,Color.yellow);
Debug.Log(dist);
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
}
}
}
}
}
using System.Collections;
public class EnemyVzglyad : MonoBehaviour {
public Transform target;
//opredelenie celi===========
private bool _vzglyad;
private int laierMask;
//===========================
void Start () {
laierMask = 1<<8;
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
RaycastHit plHit;
if(Physics.Linecast(target.position,other.transform.position,out plHit)){
if(plHit.collider.CompareTag("Player")){
_vzglyad = true;
Debug.DrawLine(target.position,plHit.transform.position,Color.yellow);
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
}
}
// Debug.Log(other.gameObject.name);
}
}
void OnTriggerExit(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
_vzglyad = false;
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
//nugno dobavit' timing ostanovki cherez time
}
}
void OnTriggerStay(Collider other){
if(((other.CompareTag("Player"))||(other.CompareTag("NPC")))&&(other.transform!=target.transform)){
RaycastHit plHit;
if(Physics.Linecast(target.position,other.transform.position,out plHit)){
if(plHit.collider.CompareTag("Player")){
_vzglyad = true;
float dist = Vector3.Distance(target.position,plHit.transform.position);
Debug.DrawLine(target.position,plHit.transform.position,Color.yellow);
Debug.Log(dist);
EnemyAI EAI = (EnemyAI)target.gameObject.GetComponent("EnemyAI");
EAI.GetTargetVzglyad(other,_vzglyad);
}
}
}
}
}
Все отлично работает на стандартном рабочем(3rd person controller), а на импортированной модельке - отказывается.
Поразмыслив понял в чем проблема: у стандартного рабочего центр на тазобедренной кости, а у моей модели на полу(там где сетка в максе), и поэтому при накидывании characterController его коллайдер приходится сдвигать по Y вверх. После таких настроек OnTriggetEnter(и т.п.) реагирует на чара, верно распознает его координаты и целится под ноги(лучше бы в голуву , но не принципиально), а вот lineCast не реагирует на чара вообще. Ставлю у characterController Y координату 0, все отлично(Чуть больше/меньше не работает), кроме: OMG ОН ПАРИТ НАД ЗЕМЛЕЙ НА РАСТОЯНИИ МЕТРА WTF!!!!!!!!!! Вопрос как в максе изменить Y координаты полностью санимированной модели? Ну или направьте в сторону правильного решения.