Articles of 统一

麻烦与四元数和轨道摄像机:

更新:我一直在尝试在Unity3D目前正在做的引擎中实现一个轨道相机,问题是我似乎无论做什么正确的旋转。 这就是需要的: 通过鼠标在Y轴和X轴上旋转,但是Y轴和X轴不是Vector.up或Vector.right,它们是由我围绕的目标的当前斜率给出的。 我不明白我怎样才能使它独立于角色轮换,但同时依赖 这种types的作品,但一些循环有问题,检查下面的video,尝试什么是错的味道 var forward = Vector3.forward; //Vector3.Cross(ViewTarget.transform.up, transform.right); //Apply the rotation var rot = Quaternion.AngleAxis(CurrentHorizontalLook, ViewTarget.transform.up); var rot2 = Quaternion.AngleAxis(CurrentVerticalLook, transform.right) ; Debug.DrawRay(ViewTarget.transform.position, Vector3.right * 5, Color.yellow, 0, false); Debug.DrawRay(ViewTarget.transform.position, ViewTarget.transform.up * 5, Color.blue, 0, false); var offset = forward * 5; transform.rotation = rot * rot2; transform.position = ViewTarget.transform.position + EyeHeight […]

无法实例化对象统一

我正在创造一个统一的比赛纸牌游戏,我想把卡片放在一个又一个下面的方向上,等等…但是用我的公式它是一个接一个地显示卡片。请告诉我我的代码有什么问题。 以下是我的代码 – void SpawnCards(){ int cardsinrow = 4; int cardsincolumn = cardslist.Count/cardsinrow; if(cardslist.Count % cardsinrow > 0) cardsincolumn += 1; float spacebetweencards = .2f; for(int i=0; i<cardslist.Count; i++){ GameObject mc = Instantiate(memorycard, new Vector3((i%cardsinrow+(i%cardsinrow*spacebetweencards))-(cardsinrow/2f)+spacebetweencards, 0, (i/cardsinrow+(i/cardsinrow*spacebetweencards))-(cardsincolumn/2f)+spacebetweencards), memorycard.transform.rotation) as GameObject; mc.GetComponentInChildren<MemoryCard>().SetMemorycard(cardslist[i].texture, cardslist[i].number); } }

在伪3D二维空间中的环境碰撞

游戏是一个二维的争吵,在黄金斧,最后的战斗,城堡Crashers静脉深度运动。角色和环境都是2D精灵。 我也没有真正的问题来设置角色之间的冲突,以深入考虑。 但是,如果没有更高层次的跳槽和冲撞敌人,那就不是一个合适的争吵者,而这正是我遇到的一个问题,就是如何最好地实施它。 我考虑在3D空间中制作水平的碰撞盒,让精灵将其游戏对象的z移动转换为视觉组件的y移动,但是我并不特别喜欢这种方法,因为感觉很难进行匹配三维碰撞器到一个绘制的背景,并在其中放置对象的关卡devise。 对于2Ddevise的任何建议,可以这么说吗? 理想情况下,能够在2Ddevise中“绘制”高度水平和凹坑。 如果重要的话,我主要在二维空间统一工作(尽管在这里涉及到第三维将是必要的),但是我认为基本devise问题将是相当引擎/语言不可知的。

如何从animation工具访问animation属性?

我想从animation师改变animation的属性speed 。 例如,我希望玩家能够通过升级更快地重新加载。 所以我有一个基本的枪animationanimation加载animation,我想改变它的速度取决于玩家的重载速度。 但我找不到如何在C#中更改此属性。 这是我到目前为止: void Start() { gunAnim = gun.GetComponent<Animator> (); } void Update() { if (Input.GetKeyDown (KeyCode.R)) { gunAnim.Play("reload"); reloadSound.Play(); } }

如何突出显示并移动到等距网格中的相邻图块?

我试图创建一个基于回合的策略游戏,将游戏对象从网格中的一个图块移动到另一个图块附近。 我已经使用精灵和游戏对象创建了网格,但无法整理运动部分。 我怎样才能突出显示给定“当前”瓷砖的相邻瓷砖,然后允许游戏对象移动到任何突出显示的瓷砖?

Raycast闪烁的问题

谁能告诉我什么是我的代码错了? 如果你能看到,每当玩家在光线射击的范围内,敌人就会变成红色。 但是由于某种原因,即使玩家已经达到了让敌人变红的要求,也会变成白色。 这只有当你手动移动时才可见,正常速度看起来好像在闪烁。 我相信造成这种情况的一个原因是,其中一个raycast不再符合要求。 可能与此有关。 我不完全知道。 这张照片显示,即使玩家在使敌人变红的要求之内。 它不。 为什么? using UnityEngine; using System.Collections; /* TL = Top Left * TR = Top Right * BL = Bottom Left * BR = Bottom Right */ public class Script_v2 : MonoBehaviour { // Player Properties private GameObject player; public Vector3 playerSize; private Vector3 playerTransform; public Vector3 […]

锚点铰接点2点击现场

我正在创建一个2D游戏,用户可以点击并拖动物体。 这是通过将“Hand”对象连接到用户当前用HingeJoint2D单击的对象来完成的。 现在只需将HingeJoint2D连接到点击对象的中心。 我想将Hingejoint2D锚定在用户点击的刚体(而不是中心)上的确切点上。 这必须涉及将点击的点转换为相对于点击刚体的坐标,但是我没有使用像transform的TransformPoint这样的方法。 任何帮助,将不胜感激。 这是我附加到用户将拖动的对象的代码: void OnMouseDown() { // Create a hinge joint between the hand and this object so object will slowly rotate // around the hinge point this.gameObject.AddComponent("HingeJoint2D"); connectingHinge = this.GetComponent<HingeJoint2D>(); connectingHinge.connectedBody = handRigidbody; // Set anchor to offset of current hand position relative to the object. //connectingHinge.anchor = new Vector2(offset.x, […]

改变光强度值

我有这个代码来创建一个灯光: GameObject lightGameObject = new GameObject ("Light1"); lightGameObject.AddComponent (typeof(Light)); lightGameObject.light.color = Color.white; lightGameObject.light.intensity = 0.5f; 我想把光线强度改为0.5f,但是当我运行游戏时,强度仍然是1。

在Unity Inspector中获取任何types

我正在为我的游戏开发一个SaveManager系统。 基本上它应该做的是; 1)通过拖放到检查器获取“ANY”用户创建的Serializable类。 (保存数据)。 2)使用BinaryFormatter或XMLSerializer将该类写入文件。 我希望能够在未来的游戏中使用它。 所以它应该是保存数据类(types)独立(如序列化)。 我会像使用资源一样使用它,导入SaveManager,将序列化的类作为参数,然后让其余部分完成。 但正如我所说,它应该能够使用任何用户创建的序列化类。 所以问题是,因为“序列化类”将由用户在“游戏项目”(不在SaveManager项目中)编写,而且我的SaveManager项目中没有那个“序列化”类types,不知道如何制作SaveManager,从检查器引用该类。 所以我们可以说我在游戏项目中创建了这个类(不在SaveManager项目中) [System.Serializable] public class SaveData { public string Name = "Name"; public int Number = 5; } 现在,当我将SaveManager项目(资产)导入到我的“游戏”项目中时,我应该可以将脚本拖放到SaveManager检查器,然后让其完成。 由于BinaryFormatter适用于每个Serializabletypes,因此types的名称实际上并不重要。 我的意思是BinaryFormatter是types自由的,只要types是可序列化的。 我想要使​​用该function,并使SaveManagertypes也是免费的。 所以在未来,如果我想使用,说“MyNewSaveData”序列化类,“在另一个游戏”,我想能够拖放到SaveManager督察,让其余的做。 现在的事情是,如果我使用 public object _SaveData; 在SaveManager脚本中,unity inspector不显示它。 如果我使用 public Object _SaveData 它将用户创建的types转换为对象,并且我失去了我需要的types。 我试图使用System.Type,但统一不显示它。 基本上我想要做的是,获得“任何”序列化的类作为参考。 喜欢 public SerializedClass _SaveData; 或类似的东西 public Script _SaveData; 该引用应该接受“任何”序列化的类。 获取它的types,然后将其转换为该types。 […]

为什么在这种情况下,Resources.Load会导致CastException?

我正在这样做: string fontName = "freespin_big"; TextAsset xml = Resources.Load<TextAsset>(fontName); Texture2D image = Resources.Load<Texture2D>(fontName); Font font = Resources.Load<Font>(fontName); if (font == null) { font = new Font(); AssetDatabase.CreateAsset(font, "Assets/Resources/" + fontName); } 在Resources中,我们有freespin_big.png和freespin_big.xml。 我打算导入png和xml并创建一个字体。 所以我检查字体对象是否存在,如果没有创建它。 但是,如果字体不存在,我得到这个错误: InvalidCastException:不能从源types转换为目标types。 如果我尝试这样做: Font font = Resources.Load<Font>("blorg"); 如果没有文件被命名为“blorg”,我就会得到空白。 如果没有find正确名称的字体 ,Resources.Load是不是应该返回null?