총을 들고 먼저 레티클 표시

8987 단어 Unity3DUnity


총을 세웠을 때 조준을 표시하고 싶다고 생각해 작성.

우선, 카메라가 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;
    }
}

좋은 웹페이지 즐겨찾기