c# - 有没有办法根据统一 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 语句我得到了很多不同的错误。我得到的实际输出是,在您手动推动子弹之前,子弹不会移动。
解决方案
如果你的枪只朝一个方向射击,你可以这样做:
创建一个新的布尔变量,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
在玩家移动脚本中正确更改。
推荐阅读
- python - RSA 密码不兼容 - python 脚本无法解密由 bash 脚本加密的密钥
- ruby-on-rails - Oauth minitest 错误,回调链接给出错误
- perl - perl中单个foreach循环中多个数组的语法
- reactjs - How to Pass a method as props for an element in react
- javascript - Nodejs:尝试限制对服务器的请求数时如何使用异步/等待
- node.js - Sequelize 方法提供未定义
- python-3.x - Can we modify Gitlab CI/CD variable value using python
- java - How to dynamically deploy event-triggered (or database-triggered) Apache Beam pipelines to Dataflow using JavaSDK?
- pandas - Why my Parse Date does not work in the Jupyter
- typescript - 根据规则替换字符串中的单词