Unity 사격 게임 커서 자동 조준 실현
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Target : MonoBehaviour {
public Transform source;
public GameObject destination = null;
public static Target Instance;
void Awake() {
if (Instance == null)
Instance = this;
else if (Instance != this)
Destroy(gameObject);
}
GameObject[] enemy;
Vector3 minDestance;
float minDes = float.MaxValue;
void Update() {
enemy = GameObject.FindGameObjectsWithTag("Enemy"); //
foreach (var item in enemy) {
Vector3 targetDir = source.position - item.transform.position; //
float angle = Vector3.Angle(-source.forward, targetDir); //
// 10
if (angle > 10) {
minDestance = new Vector3(0, 0, 0);
continue;
}
float DesX = source.position.x - item.transform.position.x;
float DesY = source.position.y - item.transform.position.y;
float DesZ = source.position.z - item.transform.position.z;
//
if (DesZ > 500) {
minDestance = new Vector3(0, 0, 0);
continue;
}
Vector3 temp = new Vector3(DesX, DesY, DesZ);
float min = (source.position - temp).sqrMagnitude;
//
if (min < minDes) {
minDes = min;
minDestance = temp;
destination = item;
}
}
float ratio = (source.position.z - transform.position.z) / minDestance.z;
if (minDestance != Vector3.zero) {
Vector3 newPos = new Vector3(source.position.x - minDestance.x * ratio, source.position.y - minDestance.y * ratio, transform.position.z);
transform.position = Vector3.MoveTowards(transform.position, newPos, 0.5f);
if (destination == null) {
minDestance = new Vector3(0, 0, 0);
}
}
else {
minDes = float.MaxValue;
destination = null;
}
}
}
주요 논리는 비슷한 삼각형 원리를 운용하여 각도를 통해 3차원 좌표를 계산하는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.