🌟
UnityでのRayCastを出す1人称視点のプレイヤー処理
1人称視点のプレイヤーにおいて、RayCastを利用した攻撃処理などの基本形となるプログラムです。備忘録としてまとめておきます
RayCastの基本処理
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private GameObject mainCamera;
private int rayDistance = 20;
public GameObject ballPrefab;
public GameObject markerPrefab;
private GameObject marker;
// Start is called before the first frame update
void Start()
{
// メインカメラを取り出す
mainCamera = GameObject.Find("MainCamera");
// プレイヤー(メインカメラ)の前方向を取り出す
Vector3 rayDestPosition = mainCamera.transform.forward;
// マーカーを作成する(なくてもよい)
marker = Instantiate(markerPrefab,
mainCamera.transform.position +
rayDestPosition *
rayDistance,
transform.rotation) as GameObject;
}
// Update is called once per frame
void Update()
{
// メインカメラ(プレイヤー)の現在位置
Vector3 rayOriginPosition = mainCamera.transform.position;
// RayCastを飛ばす方向
Vector3 rayDestPosition = mainCamera.transform.forward;
// マーカーの位置を調整する。メインカメラの方向に合わせてマーカーが移動する
marker.transform.position = rayOriginPosition + rayDestPosition * rayDistance;
// Xを押下
if (Input.GetKeyDown(KeyCode.X))
{
// Ray作成
Ray ray = new Ray(rayOriginPosition, rayDestPosition);
// 発射地点
//Instantiate(ballPrefab, rayOriginPosition, transform.rotation);
// 着弾地点
// Instantiate(ballPrefab, rayOriginPosition + rayDestPosition * rayDistance, transform.rotation);
// デバッグ用のレイキャストの補助線
Debug.DrawRay(
ray.origin,
ray.direction* rayDistance,
Color.red, 5, false);
// Rayの衝突判定用オブジェクト
RaycastHit hit;
if (Physics.Raycast(ray, out hit, rayDistance))
{
// 衝突
if (hit.collider.tag == "enemy")
{
// 衝突時の処理
GameObject enemy = hit.collider.gameObject;
// その他の衝突処理
}
}
}
}
}
Discussion