Questions tagged «c#»

C#是Microsoft与.NET平台一起创建的一种多范例,托管,强类型,垃圾回收的编程语言。

7
如何最好地构造/管理数百个“游戏中”角色
我一直在制作一个简单的RTS游戏,其中包含数百个角色,例如Unity中的Crusader Kings 2。要存储它们,最简单的选择是使用可编写脚本的对象,但这不是一个好的解决方案,因为您无法在运行时创建新的对象。 因此,我创建了一个名为“ Character”的C#类,其中包含所有数据。一切正常,但随着游戏的模拟,它不断创建新角色并杀死一些角色(随着游戏中事件的发生)。随着游戏不断进行模拟,它会创建1000个角色。我添加了一个简单的检查,以确保在处理字符时该字符处于“活动”状态。因此,这有助于提高性能,但是如果“角色”已死,我将无法删除它,因为在创建家谱时我需要他/她的信息。 列表是保存游戏数据的最佳方法吗?否则,一旦创建了10000个字符,就会出现问题?一种可行的解决方案是在列表达到一定数量后再制作一个列表,然后将其中所有无效字符移动。
10 unity  c# 

1
确定AudioClip的音量
我有一些代码,可以使用GetSpectrumDataAudioSource播放的歌曲来创建供播放器播放的关卡布局。我想添加一个功能,让播放器可以上传自己的歌曲并播放使用这些歌曲中的数据创建的关卡。不幸的是,在比较不同的音频文件时,我遇到了以下问题: 如您所见,每个剪辑的幅度都大不相同,随后创建的电平很难完成或几乎不可能。我想找到一种确定这种“响度”的方法,以便在从歌曲中获取数据后将其调低或用倍增器放大。另外,有没有办法在不播放歌曲的情况下提取这些数据?
10 unity  c#  audio 

2
可编写脚本的对象中的条件变量
使用时ScriptableObjects,如何使某些变量成为条件变量? 示例代码: [System.Serializable] public class Test : ScriptableObject { public bool testbool; public string teststring; public int testint; } 目标:当testbool == true然后teststring是提供给编辑,如果testbool == false再testint是提供给编辑,而另一种是“ 变灰 ”。
10 unity  c# 

1
如何在Unity中运行时从交互式布料保存网格?
在场景开始时,我将一个名为“ sheet”的GameObject放置在“ ball” GameObject上方。该工作表上有一个互动式布料组件和一个布料渲染器。交互式布料组件的网格是具有大量顶点的平面。在运行时,薄片落在球上并创建我想要的形状。如果此时禁用“交互式布料”组件,则图纸网格将完全保持所需,但无法将其作为预制件拉出。 有谁知道获取该形状副本的方法? 例如,通过在运行时从Interactive Cloth中读取网格,然后使用它来将网格更改回我想要的没有Interactive Cloth组件的方式。 任何帮助将不胜感激。
10 unity  c#  3d-meshes  cloth 

3
在Unity3D中防止刚体跳跃力和弹跳幅度的组合
我正在Unity3D中构建一个相当简单的大理石赛车游戏。球是仅在X和Y轴上移动的3D物理对象。它具有左右滚动和跳跃的能力。非常基本的东西,除了我遇到了打破比赛的问题:当摔倒并撞击地面时,球的反弹幅度可以与其弹跳力相结合,从而产生超高跳跃。这意味着,通过适当地按下按钮,玩家可以使球反弹得更高,达到意想不到的高度。在解决此故障之前,我无法正确设计关卡。我已经说明了这个示例: 但是,跳跃并不像直接将球向上射击那样简单。为了简化关卡设计中的复杂性,我将跳跃角度编程为相对于球在其上滚动的表面。 图3是该游戏到目前为止的工作方式;没有图4。这使解决弹跳问题变得更具挑战性,因为我不能简单地测量和设置Y轴上的精确力或速度。这样做会导致怪异的行为,当球在陡峭的斜坡上行驶时,这种行为会变得更加明显。 到目前为止,我已经能够构思出该游戏中所有其他设计问题的解决方案,然后找到如何对它们进行编程的方法,但是这使我陷入了困境。我尝试了许多不同的方法,但是没有一个起作用。 这是控制球跳动的C#脚本: using UnityEngine; using System.Collections; public class BallJumping : MonoBehaviour { public System.Action onJump; public Rigidbody objRigidbody; // Set this to the player public bool isGrounded; // Determines whether or not the ball is on the ground public Transform groundChecker; // A child object that's slightly …
10 unity  c#  physics  jumping 

2
如何在动态变化的网格上投影泡沫轨迹
我正在尝试创建水,现在我通过在网格物体上动态生成波浪来获取水。但是现在我想让我的船操纵这些波浪,并在此之上引起开尔文唤醒。 事实是我使用不同的瓷砖生成水,并动态重复相同的图案。那么,如何在动态生成的网格(平面)之上生成此内容呢?是否还没有操纵其他图块(平面)?
10 c#  unity  rendering 

4
如何使Line Renderer线条保持平坦?
我注意到,当我向Line Renderer线添加更多顶点时,该线会扭曲并不再是平滑线。 .GIF此处:http://i.imgur.com/hRAhCXM.gif 即使删除了所有材质,所有线条仍在同一z水平上,但这些线条似乎仍然扭曲。 我不知道为什么这样做,或者如何解决它,有什么建议吗?C#
10 c#  unity  2d  lines 



1
为AI找到达到目标的正确速度
我有一艘以最大速度行驶maxSpeed并且rotationSpeed每秒可以转度的船。船舶始终沿其面向的方向移动,这意味着船舶行驶的速度越快,其转弯半径就越大。 我知道我的位置,以及旋转和目标的位置。 我想弄清楚的是,目标物体是否在此速度下或者更好的旋转半径内,所以我能以最大速度行驶是为了在不不断绕转目标的情况下转向目标。 有没有一种有效的方法来做到这一点? 到目前为止,这是我在想的事情:因为我知道每步走了多远,每步旋转了多少,所以我可以弄清楚接下来两帧中的位置。我当前的位置是p1,我的下一个位置是p2,然后是p3。我可以取(p1,p2)和(p2,p3)的垂直平分线。他们的交点将给我一个圆心。然后,我可以测试目标是否在该圈子中。 我不确定这是否可以在3D模式下工作(我不确定如何使用输入来计算球体)。此解决方案也无法找到合适的行进速度,也无济于事,我不得不尝试几次以不同的速度找到合理的行进速度。 任何人都可以提出更好的解决方案吗?

3
如何使2D游戏分辨率独立?
我正在开发一个简单的2D游戏。我已经完成了手机版本。 但是,我的老板希望游戏能够在他的RT上运行。我正在执行“转换”,但是我的按钮放在错误的位置,因为我对屏幕尺寸进行了硬编码,如下所示: texture = game.Content.Load<Texture2D>("StartScreen"); mainFrame = new Rectangle(0, 0, game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height); // button definitions startbrect = new Rectangle(300, 258, 88, 88); startbtext = game.Content.Load<Texture2D>("bplay"); 在此示例中,mainframe可以,但startbrect不是,因为我定义了与Windows Phone屏幕匹配的尺寸。当所有Windows 8手机的屏幕都不同时,如何处理响应式设计?是否有公式或宏可以计算出每次合适的尺寸?
10 c#  2d  resolution 

2
用已知队列优化对战游戏的算法
我正在尝试用C#.NET为称为Flowerz的游戏编写求解器。作为参考,您可以在MSN上播放它,请访问:http: //zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz。我在写它只是为了好玩,而不是为了任何类型的作业或任何与工作相关的事情。因此,唯一的限制是我的计算机(具有8GB RAM的Intel i7内核)。就我而言,它不需要在其他任何地方运行。 简而言之,其规则如下: 有一个装满彩色花朵的队列。它的长度是任意的 队列不受影响 队列在级别开始时生成 花有一种或两种颜色。 如果有两种颜色,则有外部颜色和内部颜色。在两种颜色的情况下,外部颜色用于匹配。 如果匹配,则外部颜色消失,花朵现在是与内部花朵颜色相同的单色花朵 游戏的目标是创建三个(或更多)相同颜色的比赛 当单色的花朵是火柴的一部分时,它会从运动场上移开,从而创建一个空白空间 您可以将单色花朵与双色花朵的外部颜色进行匹配。在这种情况下,单色花消失,两色花的外部颜色消失而内部颜色保留 当队列为空且剩余至少一个空白处时,您将赢得回合 级联匹配是可能的。级联是指三朵(或更多)外花消失,而它们的内在颜色又形成了三朵(或更多花)链。 比赛场地始终是7x7 田野上的一些空间被岩石覆盖 你不能在岩石上放花 队列还可以包含一个小铲,您可以使用该小铲将任何放置的花朵移至空闲空间 您必须使用铁锹,但实际上不必移动花:将花从原位放回原处是完全合法的 队列中还可以包含彩色蝴蝶。当您在花朵上使用这只蝴蝶时,花朵会得到蝴蝶的颜色 将蝴蝶应用于具有两种颜色的花朵,导致花朵仅获得一种颜色,即蝴蝶的颜色 您可以将蝴蝶浪费在已经有这种颜色的空白处或花朵上 清除场地并不能赢得比赛 求解器的目标很简单:找到一种清空队列的方法,在运动场上保留尽可能多的剩余空间。基本上,人工智能为我玩游戏。求解器的输出是包含找到的移动的列表。我对得分不感兴趣,但对生存时间越长越感兴趣,因此我对留下尽可能多的空地的动作感兴趣。 不用说,队列越大,搜索空间就会迅速增长,因此就不会有暴力行为了。如果我没记错的话,队列从15开始,每两到三个级别以5增长。而且,当然,将第一朵花放在(0,0)上并将第二朵花放在(0,1)与将第一朵花放在(1,0)和第二朵花(0,0)上是不同的,尤其是当早先的一轮花已经充满了田野。这样简单的决定可能会有所不同。 我的问题如下: 这是什么问题?(请考虑旅行推销员,背包或其他组合问题)。知道这一点可以使我的Google-fu更好。 哪种算法可以快速给我带来良好的效果? 关于后者:最初,我尝试编写自己的启发式算法(基本上:如果我知道队列,该如何解决?),但这会导致很多边缘情况和得分匹配,而我可能会错过这种情况。 我当时在考虑使用遗传算法(因为我至少知道如何使用它...),但是在确定板的二进制表示时遇到了一些问题。然后是交叉问题,但是可以使用有序交叉算子或类似类型的操作来解决。 我的猜测是,求解器必须始终知道电路板配置和它要清空的队列。 我知道其他一些启发式算法,例如神经网络和模糊逻辑系统,但是我缺乏经验,无法知道哪种算法最适用,或者是否还有其他算法更适合手头的任务。
10 c#  algorithm  ai  puzzle 

1
C#/ XNA获取硬件鼠标位置
我正在使用C#并尝试获取硬件鼠标的位置。我尝试的第一件事是简单的XNA功能,该功能易于使用 Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y); 之后,我也绘制了鼠标,并且与Windows硬件鼠标相比,带有xna提供的坐标的新鼠标“松弛了”。我的意思是,它落后了几帧。例如,如果游戏以600 fps的速度运行,则诅咒会响应,但是以60 fps的软件鼠标延迟不再可接受。因此,我尝试使用我认为是硬件鼠标的工具, [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetCursorPos(out POINT lpPoint); 但结果完全一样。我还尝试获取Windows窗体光标,这同样是一个死胡同-可行,但有同样的延迟。杂乱无章的xna功能: GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false Game.IsFixedTimeStep = true/fale 确实有一些明显的原因改变了延迟时间,但是最重要的是,无论它是否仍在默认的Windows鼠标后面。我在某些游戏中看到过,它们提供了硬件加速鼠标的选项,而在其他游戏中(我认为)默认情况下已经存在。任何人都可以就如何实现这一目标提供一些指导。

6
Visual Studio 2012和游戏开发
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 好吧,我认为这是一个简单的问题,但是我很难找到一些答案。 我已经读过XNA不在Visual Studio 2012中。我最近学会了使用XNA,但是由于我想从事游戏工作,所以我想知道是否有办法在Visual Studio 2012上使用C#开发游戏。 ,还是我应该再次使用C ++和Direct3D学习一切? C#是我非常喜欢的一种语言,因此,如果没有办法用C#来实现,但是如果使用Java来进行游戏开发就非常容易,我也会对此感兴趣。 非常感谢!
10 xna  c#  3d  directx  .net 

1
屏幕空间到世界空间
我正在编写一个2D游戏,其中我的游戏世界的x轴从左到右,y轴从上到下,z轴在屏幕外: 尽管我的游戏世界是自上而下的,但游戏的渲染却略有倾斜: 我正在研究从世界空间到屏幕空间的投影,反之亦然。我的前者工作如下: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); 该NegateY()扩展方法不正是它听起来像,因为XNA的Ÿ线延伸自下而上,而不是自上而下。上面的屏幕截图显示了所有工作。基本上,我在3D空间中有一堆点,然后在屏幕空间中进行渲染。我可以实时修改相机属性,并看到它动画到新位置。显然,我的实际游戏将使用精灵而不是点,并且摄影机的位置将被固定,但是我只是在尝试所有数学运算之前。 现在,我正在尝试以另一种方式转换。也就是说,给定上方屏幕空间中的x和y点,请确定世界空间中的相应点。因此,如果将光标指向绿色梯形的左下角,则希望获得世界空间读数(0,480)。该ž坐标无关。或者,当映射回世界空间时,z坐标将始终为零。本质上,我想实现此方法签名: public Vector2 ScreenPointToWorld(Vector2 point) 我已经尝试了几种方法来使它正常工作,但是没有运气。我最近的想法是,我需要调用Viewport.Unproject近两次不同/远ž值,计算得到的Ray,规范它,然后计算出的交点Ray有Plane,基本上代表了我的世界的地面。但是,我陷入了最后一步,不确定是否使事情变得过于复杂。 谁能为我指出如何实现这一目标的正确方向?
10 xna  c#  matrix  projection  screen 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.