총을 들고 먼저 레티클 표시
총을 세웠을 때 조준을 표시하고 싶다고 생각해 작성.
우선, 카메라가 AIM 상태가 되었을 때, 레티클을 표시한다. 카메라를 조작하는 스크립트의 일부입니다.
생략되었지만 레티클은 SetActive(false)이며 히에랄 키에 있습니다.
csharp.cs
void FixedUpdate () {
transform.position = new Vector3(Player.position.x, transform.position.y, Player.position.z); //プライヤー位置を追従する
transform.RotateAround(transform.position, Vector3.up, Input.GetAxis("Mouse X")* RotateSpeed); //横回転
transform.RotateAround(transform.position, transform.right, -Input.GetAxis("Mouse Y")* RotateSpeed); //縦回転
//AIM時のカメラ挙動
if (PlayerController.isAIM)
{
RotateSpeed = 0.3f;
Cam.transform.DOMove(AimPosition.position, 1);
//カメラ中心の先を取得するため
CameraRay = new Ray(Cam.transform.position, Cam.transform.forward);
//レイの当たり判定
if(Physics.Raycast(CameraRay, out CameraHit)){
if (CameraHit.collider.gameObject.tag == "ignoreRay") return;
Reticle.SetActive(true);
Reticle.transform.position = CameraHit.point;
}
}
else
{
RotateSpeed = 1.0f;
Reticle.SetActive(false);
Cam.transform.DOMove(DefaultPosition.position, 1);
}
}
다음으로, 레티클이 거리에 관계없이 일정한 크기가 되는 코드를,
레티클에 부착합니다.
이쪽은 아래를 참고로 했습니다.
【참고】 Perspective 카메라로부터의 거리가 변화해도 외형의 크기는 변하지 않는 오브젝트를 만든다
ReticleController.cs
using UnityEngine;
public class ReticleController : MonoBehaviour {
Vector3 baseScale; // カメラからの距離が1のときのスケール値
private void Start()
{
// カメラからの距離が1のときのスケール値を算出
this.baseScale = this.transform.localScale / GetDistance();
}
void Update () {
transform.localRotation = Quaternion.Euler(0, Camera.main.transform.localRotation.y, 0);
//カメラからの距離によらず、一定の大きさで表示させる
this.transform.localScale = this.baseScale * this.GetDistance();
}
// カメラからの距離を取得
float GetDistance()
{
return (transform.position - Camera.main.transform.position).magnitude;
}
}
Reference
이 문제에 관하여(총을 들고 먼저 레티클 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/GREAT__SHARK/items/6f71dca0a60a74038e69텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)