>

레이가 아무 것도 맞지 않으면 오브젝트가 레이 캐스트의 끝에 머무르게하는 방법?! 여기 내 스크립트가 있습니다

using UnityEngine;
using System.Collections;
public class ray : MonoBehaviour {
public float howFar;
public Vector3 loaction;
public Transform spot_position;
public Vector3 loaction_air;
void Start() {
}
void FixedUpdate()  {
    Vector3 fwd = transform.TransformDirection(Vector3.forward);
    RaycastHit hit;
    if (Physics.Raycast(transform.position, fwd, out hit, 100)) {
        print("Ray hit something !");
        loaction = hit.point;
        howFar = hit.distance;
        spot_position.transform.position = hit.point;
    }
    else {
  //            howFar = ....
 //         spot_position.transform.position = ...
        print (" Nothing ");
    }
    loaction_air = new Vector3(spot_position.transform.position.x,spot_position.transform.position.y,spot_position.transform.position.z);
}
}


  • 답변 # 1

    이것이 원하는 효과를 주어야한다고 생각합니다 :

    if (Physics.Raycast(transform.position, fwd, out hit, 100)) {
        spot_position.transform.position = hit.point;
    }
    else {
        spot_position.transform.position = transform.position + fwd* 100; 
    }
    
    

    또한 Unity를 처음 사용하는 경우 아직 알지 못하는 유용한 팁이 있다고 생각합니다.

    1/transform.forward로 객체의 순방향 벡터를 쉽게 얻을 수 있습니다.

    2/transform.position은 객체 위치의 새 복사본을 반환하므로 transform.position으로 객체의 위치를 ​​가져 와서 해당 복사본으로 원하는 작업을 수행하면 객체의 위치는 영향을받지 않습니다.

    3/변환 컴포넌트에 대한 참조가있는 경우 다시 변환을 참조 할 필요가 없습니다. 해당 참조를 일반적으로 변환으로 사용하십시오.

    위의 팁을 사용하여 코드를 단순화하자 :

    using UnityEngine;
    using System.Collections;
    public class Ray : MonoBehaviour 
    { 
        public float howFar;
        public Vector3 location;
        public Transform spotPosition;
        public Vector3 locationAir;
        void Start() 
        {
        }
        void FixedUpdate() 
        {
            var fwd = transform.forward;
            var distance = 100f;
            RaycastHit hit;
            if (Physics.Raycast(transform.position, fwd, out hit, distance )) {
                Debug.Log("Ray hit something !");
                location= hit.point;
                howFar = hit.distance;
                spotPosition.position = hit.point;
            } else 
            {
                Debug.Log(" Nothing ");
                howFar = distance;
                spotPosition.position = transform.position + fwd* distance; 
            }
            locationAir = spotPosition.position;
        }
    }
    
    

  • 답변 # 2

    레이 캐스트를 호출하려면 기능에 방향 및 거리 매개 변수를 지정해야합니다.

    이 정보 만 사용하고 정규화 된 방향을 추가하십시오 (앞으로 사용하는 경우 이미 정규화 됨). 물체 위치까지의 거리를 곱하십시오 :

    itemToMove.transform.position += transform.Forward.normalized * distance

  • 이전 vuforia - unity - 크기를 작게 변경하면 오브젝트가 검게됩니다
  • 다음 game design - "스나이퍼"스타일의 플레이를 지원하면서 캠핑을하지 않는 방법은 무엇입니까?