私は自分のプレーヤーと最も近いオブジェクトを「wall」というタグで距離を取ろうとしていますが、動作させることはできません。 私の知る限り、私のコードはまったく動いていません。 私の質問はそうです。 私は何が間違っていますか?再び、私は、プレーヤーと最も近いオブジェクトとの距離をタグ「壁」で見つけたいと思っています。私がタグ 'wall'を持つオブジェクトの近くにいる場合は、変数をtrueに設定したい(nearWall = true)とオブジェクトから離れると(約10.0f)、それをfalseに戻します。 nearWall = false)壁の距離を取得する(同じタグを持つ複数のオブジェクト)
これは私が作業しているコードです。
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 2.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private bool nearWall;
public GameObject playerObject;
GameObject closestObject;
float distance = Mathf.Infinity;
public float distanceToWall = Mathf.Infinity;
private void Start() {
nearWall = false;
playerObject = GameObject.Find("Player");
distanceToWall = 0;
controller = GetComponent<CharacterController>();
}
public void getNearestWall()
{
if (distance <= 10.0f) {
nearWall = true;
print ("Near wall!");
}
else
nearWall = false;
}
GameObject findNearestWall()
{
GameObject[]objectArray;
objectArray = GameObject.FindGameObjectsWithTag("wall");
Vector3 position = playerObject.transform.position;
foreach(GameObject currentObject in objectArray)
{
Vector3 distanceCheck = currentObject.transform.position - position;
float currentDistance = distanceCheck.sqrMagnitude;
if (currentDistance < distance)
{
closestObject = currentObject;
distance = currentDistance;
}
}
return closestObject;
}
private void Update()
{
findNearestWall();
moveVector = Vector3.zero;
if (controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
if (Input.GetMouseButton (0)) {
if (!nearWall) {
if (Input.mousePosition.x > Screen.width/2)
moveVector.x = speed;
else
moveVector.x = -speed;
}
else
{
moveVector.x = transform.forward.x * speed;
transform.Rotate(new Vector3(0, -90, 0));
}
}
moveVector.y = verticalVelocity;
moveVector.z = transform.forward.z * speed;
controller.Move (moveVector * Time.deltaTime);
}
}
たぶん、あなたは、アレイ内のすべてのゲームオブジェクトを格納する必要はありません。距離を測定するためにレイキャストを使用して試してみて、それがある場合はプレイヤーの位置からまたは画面外から行うことができます一人称ゲーム。 –