首页 > 解决方案 > 有没有办法根据统一 2d 中的玩家位置旋转对象

问题描述

我正在尝试使用 Unity 制作一个基本的平台游戏,而我的玩家有一把枪。我的子弹只在一个位置射击,我希望它与玩家一起旋转。我对 C# 很陌生,需要一些帮助。

我尝试过使用 if 和 else 语句,并尝试手动旋转它。

我的代码:

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

    public class fire : MonoBehaviour
    {
        public Transform player;

        public Rigidbody2D rb2d;

        public Transform enemy;

        public Transform myspawn;

        // Start is called before the first frame update
        void Start()
        {

        }

        // Update is called once per frame
        void Update()
        {
            if (Input.GetButtonDown("Spawn"))
            {
                transform.position = player.position;
                rb2d.velocity = new Vector2(10.0f, 0.0f);

            }

        }
        private void OnCollisionEnter2D(Collision2D collision)
        {
            if(collision.transform == enemy)
            {
                transform.position = myspawn.position;
            }

        }
    }

我希望输出与播放器一起旋转子弹,并且使用 if 语句我得到了很多不同的错误。我得到的实际输出是,在您手动推动子弹之前,子弹不会移动。

标签: c#unity3d

解决方案


如果你的枪只朝一个方向射击,你可以这样做:

创建一个新的布尔变量,isLookingRight在你的播放器控制器脚本中调用它,如果你的播放器最初看起来是正确的,则将其设置为 true。每当玩家向左移动时,将此变量更改为 false 并将您Update提供的代码更改为:

void Update()
{
    if (Input.GetButtonDown("Spawn"))
    {
        transform.position = player.position;
        if(playerScript.isLookingRight){
            rb2d.velocity = new Vector2(10.0f, 0.0f);
        }
        else{
            rb2d.velocity = new Vector2(-10.0f, 0.0f);  
        }
}

这段代码的作用非常简单,如果您的玩家向左看,它只会将速度更改为与正常情况相反的速度。但是您需要isLookingRight在玩家移动脚本中正确更改。


推荐阅读