Unity覚書 C#編 RayCastでめり込み回避

カメラが地形とかにめり込まないようにするときに使用


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleA : MonoBehaviour {
    Transform target;
    Vector3 desiredPos;
    Vector3 wallHitPosition;
	
    void Start() {
	
    }
	
    void Update() {
	
    /*
    desiredPosを求めて代入する処理
    */
	
    if(WallHitCheck(target.position, desiredPos, 1 << 8)){
    //wallLayersの「 1 << 8 」はUserLayer8を拾うということ
            transform.position = wallHitPosition; 
        }else{
            transform.position = desiredPos;
        }
    }

    protected bool WallHitCheck(Vector3 Target, Vector3 desired, int wallLayers){
    RaycastHit wallHit;
    if (Physics.Raycast(Target, desired - Target, out wallHit, Vector3.Distance(Target, desiredPosition), wallLayers, QueryTriggerInteraction.Ignore)){
            wallHitPosition = wallHit.point;    //Rayが当たった座標を代入
            return true;
        }else{
            return false;
        }
    }
}


参考

【Unity】カメラが壁を貫通しないようにする方法
【Unity】FPS系ゲーム制作に使えるraycastの使い方(3D・2D)
【Unity】RayCastを使いこなせ!判定や表示に使ってみよう

※間違ってたらすみません。
わかった時点で修正します。

コメント

このブログの人気の投稿

ダイソー テープライト リモコン付 分解

C++ round関数を使わずに小数第n位の四捨五入をする

C++ cout関数とcin関数を用いた基本的な入出力