- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试以大多数 fps 游戏的方式来定位我的枪,例如像这样:
但是当我尝试使用播放器定位和旋转它时遇到了问题。枪不能很好地旋转并且不能始终保持相同的位置。
有没有办法让枪支保持在同一位置并使其与玩家一起旋转?
但我的主要问题是枪的位置我需要它保持在一个地方,就像在每个 fps 中一样,当我开始游戏并选择一把枪时,由于旋转,它会在屏幕上的不同位置生成。
这是我尝试使用的代码:
GameObject temp = GameObject.Find(gameObject.name);
playerGuns[keyPress] = Instantiate(temp, Player.transform.position
+ new Vector3(-2f, 3f, 4f), Quaternion.identity) as GameObject;
playerGuns[keyPress].name = gameObject.name;
playerGuns[keyPress].tag = gameObject.tag;
playerGuns[keyPress].transform.parent = Player.transform;
playerGuns[keyPress].transform.rotation.SetLookRotation(Player.transform.position);
最佳答案
好的,这是我 promise 的答案:
第一个问题是如何设置旋转,SetLookRotation
有两个参数,Vector3 view
,Vector3 up
第二个是默认为 Vector3.up
。你在 player.transform.position 中传递了“ View ”,这是你想要转换的方向。这样想,如果我远东面向西,我的武器将面向东......(这是假设 SetLookRotation 对其进行了归一化。)这是因为我的实际位置是东边,来自某个任意原点。您可以使用的东西是 player.transform.forward
。
要生成一个对象并使其具有相同的相对旋转和位置,您可以像在原始代码中那样使用 Instantiate
。 instantiate有多个版本.
在评论中我说给自己一个 offsetPosition 和一个 eulerAngle,但是如果你有多个武器,这可能会很麻烦。我提到过我会就如何为多种武器进行设置提出建议……所以,好的。
可编写脚本的对象,
在 Unity 中,您可以创建此对象来存储有关特定对象的信息,例如“武器”对象可以如下所示:
using UnityEngine;
using System.Collections;
[CreateAssetMenu(fileName = "New Weapon", menuName = "Weapon")]
public class WeaponObject : ScriptableObject {
public string objectName = "New Weapon";
public Vector3 offSetPosition;
public Vector3 startOffsetRotation;
public float fireRate;
// Using a gameObject to store the weapon model so you can technical
// store the firing point.
public GameObject weaponModel;
}
您现在可以通过右键单击您的 Assets 目录并转到创建->武器来创建一个新对象。完成此操作后,您可以重命名它创建的对象,检查器将显示您可以修改的该对象的所有公共(public)字段。
有了它,您可以创建多个武器,并将它们的数据存储在一个 WeaponManager 中,它会产生每个武器。像这样:
WeaponObject weapon = WeaponManager.getWeapon(keyPress);
playerGuns[keyPress] = Instantiate(weapon.weaponModel, Player.transform.position + weapon.offsetPosition, Quaternion.identity) as GameObject;
playerGuns[keyPress].name = weapon.objectName;
playerGuns[keyPress].transform.parent = Player.transform;
playerGuns[keyPress].transform.eulerAngles = weapon.startOffsetRotation;
if(player.weaponScript != null) {
// we can have a single script for all of our weapons, and the WeaponObject
// will control its firerate, which projectiles it fires, etc.
player.weaponScript.setWeapon(weapon);
}
关于c# - 把枪放在一个固定的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122746/
我是一名优秀的程序员,十分优秀!