如何在 Unity 中将对象实例化到相机所注视的位置
How to instantiate an object to the where the camera is looking at in Unity
我一直在制作一款名为“将球射入垃圾箱”的第一人称游戏。作为玩家,相机在圆柱体中,圆柱体也有碰撞。
我一直在与游戏的主要驱动力作斗争。与大多数第一人称射击游戏一样,您从相机或光标的中心点射击。
我无法复制它。到目前为止,我的拍摄代码是:
Instantiate(prefab, new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y, Camera.main.transform.position.z), Camera.main.transform.rotation);
(感谢@derHugo 帮助我实例化预制件)
但这只是在玩家的顶部生成它,而不是在它的前面。我如何让它远离玩家射击,但也在玩家面前,而不是在顶部。
所以看起来当你实例化子弹时,你是直接在相机的位置上生成它们。您应该调整这些值,使其在屏幕中央生成。为此,您应该根据枪距地面的高度将 y 位置除以 2 或 1.5。然后改变 z 使子弹更远地推到玩家面前。
Instantiate(prefab, new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y / 2, Camera.main.transform.position.z + somearbitraryvalue), Camera.main.transform.rotation);
下一步,要给子弹一个速度,你应该为负责移动子弹的子弹预制件创建一个单独的脚本。
public Rigidbody2D bullet;
bullet = GetComponent<Rigidbody2D>()
void Update(){
bullet.velocity = new Vector 3(0,0,1)
}
希望这个回答对您有所帮助!
为了在该位置前面生成,只需使用
// Already reference this via the Inspector if possible
[SerializeField] private Camera _camera;
// Adjust how far in front of the camera the object should spawn
[SerializeField] private float distance;
private void Awake ()
{
// otherwise get it ONCE
if(!_camera) _camera = Camera.main;
}
然后简单的在相机的Transform.forward
方向添加一个偏移量如
Instantiate(prefab, _camera.transform.position + _camera.transform.forward * distance, _camera.transform.rotation);
我一直在制作一款名为“将球射入垃圾箱”的第一人称游戏。作为玩家,相机在圆柱体中,圆柱体也有碰撞。
我一直在与游戏的主要驱动力作斗争。与大多数第一人称射击游戏一样,您从相机或光标的中心点射击。
我无法复制它。到目前为止,我的拍摄代码是:
Instantiate(prefab, new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y, Camera.main.transform.position.z), Camera.main.transform.rotation);
(感谢@derHugo 帮助我实例化预制件)
但这只是在玩家的顶部生成它,而不是在它的前面。我如何让它远离玩家射击,但也在玩家面前,而不是在顶部。
所以看起来当你实例化子弹时,你是直接在相机的位置上生成它们。您应该调整这些值,使其在屏幕中央生成。为此,您应该根据枪距地面的高度将 y 位置除以 2 或 1.5。然后改变 z 使子弹更远地推到玩家面前。
Instantiate(prefab, new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y / 2, Camera.main.transform.position.z + somearbitraryvalue), Camera.main.transform.rotation);
下一步,要给子弹一个速度,你应该为负责移动子弹的子弹预制件创建一个单独的脚本。
public Rigidbody2D bullet;
bullet = GetComponent<Rigidbody2D>()
void Update(){
bullet.velocity = new Vector 3(0,0,1)
}
希望这个回答对您有所帮助!
为了在该位置前面生成,只需使用
// Already reference this via the Inspector if possible
[SerializeField] private Camera _camera;
// Adjust how far in front of the camera the object should spawn
[SerializeField] private float distance;
private void Awake ()
{
// otherwise get it ONCE
if(!_camera) _camera = Camera.main;
}
然后简单的在相机的Transform.forward
方向添加一个偏移量如
Instantiate(prefab, _camera.transform.position + _camera.transform.forward * distance, _camera.transform.rotation);