Transform.Rotate 有一个非常有用的界面,用于选择是否应该相对于世界轴或局部轴进行旋转。
在幕后,它正在对变换的rotation、 aQuaternion和另一个进行一些数学运算Quaternion。这个数学的确切性质取决于你选择当地国旗还是世界国旗。
我怎样才能在不将第Quaternion一个分配给转换rotation(浪费内存和/或时间)的情况下进行这种数学运算,只是为了用它做一些数学运算?
假设我的第一个Quaternion是Quaternion q1 = Quaternion.Euler(0f,0f,90f);,第二个是Quaternion q2 = Quaternion.Euler(90f,0f,0f)。
沿其局部轴将第二个应用于第一个将产生一个旋转,将其右侧旋转为面朝下,将其正面旋转为右面。
沿原始轴将第二个应用于第一个将产生一个旋转,使其背面朝下旋转,顶部朝右旋转。
一个简单的问题在这里..
我只是想知道是否有一种方法可以避免GetComponent<Script>()在内部打电话OnTriggerEnter(Collider other)?我试图避免这样做,因为我知道GetComponent很慢。
private void OnTriggerEnter(Collider other)
{
Tile tile = other.GetComponent<Tile>();
if (tile.colorIndex == GameManager.Instance.currentTargetColorIndex)
{
Debug.Log("Hit!");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在为我的 UI 元素制作一个简单的动画。
我有一个动画组件,它有 2 个不同的动画 - ZoomIn 和 ZoomOut。
每当需要在屏幕上显示 UI 元素(例如按钮)时,就会显示这些动画。
我通常更喜欢在不显示时停用游戏对象。
我为动画编写了以下方法:
私人 IEnumerator ToggleObjectWithAnimation (GameObject gameObj) {
Animator gameObjectAnimator = gameObj.GetComponent(); // Animator 设置为未缩放时间
如果(gameObj.activeSelf == false){
gameObj.transform.localScale = new Vector3 (0, 0, 1.0f);
gameObj.SetActive (true);
gameObjectAnimator.SetTrigger("ZoomIn");
yield return new WaitForSeconds (0.5f);
} else if(gameObj.activeSelf == true) {
gameObjectAnimator.SetTrigger("ZoomOut");
yield return new WaitForSeconds (0.5f);
gameObj.SetActive (false); // 当时间刻度 = 0 时代码不执行
}
收益率返回空;
}
该代码在大多数屏幕上都可以正常工作,但是当我使用 timescale = 0 暂停游戏时会出现问题。
当 timescale 为 0 时,gameObj.SetActive (false) 行不起作用。
我有这些行:
GameObject bp = Instantiate(MyPrefab);
bp.transform.SetParent(GameObject.FindGameObjectWithTag("ContentFactory").transform);
bp.transform.localPosition = new Vector3(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
Si,我只是实例化了一个预制件,我设置了一个父级,我想更改位置。
我的问题是,该函数SetParent为我的游戏对象设置了一个固定位置bp,之后我不知道如何更改这个位置。最后一行没有改变......与 相同.position。
我怎样才能改变 的位置bp?谢谢 !
编辑 :
ContentFactory 的检查员:
bp 检查员:
层次结构(蓝色内容是ContentFactory):
我试图弄清楚鼠标单击是否在矩形变换内部。
每次用户点击屏幕时,就会抛出一个球。但如果用户单击暂停按钮,则不应扔球。
我尝试用这段代码来解决,但似乎只识别了矩形变换的右上四分之一。这是一个简短的视频来展示实际问题:https ://youtu.be/gdyDBK6ubgo
这是代码片段:
void Update() {
//Check if user touch on display / click mouse button
Vector2 mousePos = new Vector3(Screen.width - Input.mousePosition.x,Screen.height - Input.mousePosition.y, 0);
if (Input.GetMouseButtonDown(0) && props.throwable && !checkCollisionWithPauseButton(mousePos) && props.remainingBalls > 0)
{
fireBall(Input.mousePosition);
}
}
bool checkCollisionWithPauseButton(Vector3 mousePos){
//TODO: This does not work very well
return pauseButton.GetComponent<RectTransform>().rect.Contains (mousePos);
}
Run Code Online (Sandbox Code Playgroud)
这是显示矩形变换的屏幕截图。
我有一个MyClass具有枚举和属性的类。根据枚举,我想在编辑器中显示某些属性。
有这样的枚举 {first, Second} 和属性 health, step,position 。如果选择第一个,则在编辑器中显示名称和步骤,如果选择第二个,则显示步骤和位置。我想出了如何为单一行为类做到这一点。以及如何执行此操作以使数组的每个元素都具有动态属性?该图像突出显示了我在选择此列表时希望看到的字段。提前致谢 。抱歉我的英语不好
我目前正在创建一款涉及悬停自行车的游戏。当自行车与物体碰撞时,它的角度会自然改变。我希望创建某种方法让它趋向于 0。这是我尝试过的:
if (hoverbike.rotation.x != 0 || hoverbike.rotation.z != 0)
{
hoverbike.AddTorque(x: Mathf.MoveTowardsAngle(hoverbike.rotation.x, 0, 0.01f), y: hoverbike.rotation.y, z: Mathf.MoveTowardsAngle(hoverbike.rotation.z, 0, 0.01f));
}
transform.Rotate(0.0f, -Input.GetAxis("Mouse X") * 0.5f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
很难解释它在做什么,因为我不明白它在做什么,它似乎在旋转。如果有兴趣的话,这是我的其余代码:https://pastebin.com/kzMDQMVF,这是一团糟,但我仍在学习如何使用 Unity。
哦,角度 y 不应该趋于 0,因为那是水平角。
有没有办法在Unity中区分开发环境和生产环境的代码?
目前,我很想使用它,这样我就可以更改广告实施的 testMode 变量。
// I would love to have something like this:
# if DEVELOPMENT
bool testMode = true;
# elif PRODUCTION
bool testMode = false;
#endif
Run Code Online (Sandbox Code Playgroud)
例如,这有效。
#if UNITY_IOS
private string gameId = "1111111";
#elif UNITY_ANDROID
private string gameId = "2222222";
#endif
Run Code Online (Sandbox Code Playgroud) 我正在尝试将数组中的每个数字与下一个数字相加并保存所有结果:这是我的示例:
var arr = [2, 3, -6, 2, -1, 6, 4];
Run Code Online (Sandbox Code Playgroud)
我必须加2 + 3并保存,然后2 + 3 - 6保存,接下来2 + 3 - 6 - 1保存它等等到数组的末尾.接下来相同的第二个索引3 - 6并保存,3 - 6 + 2 ...我知道这可以通过两个嵌套循环完成,但不知道如何做到这一点.哪里我错了?
const sequence = [2, 3, -6, 2, -1, 2, -1, 6, 4]
const sums = [];
for (let i = 0; i < sequence.length; i++) {
for (let z = 1; z < sequence.length; z++) {
let previous = sequence[z - 1] + sequence[z];
sums.push(previous + sequence[z + 1]) …Run Code Online (Sandbox Code Playgroud)早上好。我正在尝试将 Stockfish 实现到 Unity 国际象棋游戏中,有人告诉我最好的方法是使用 Spawn.Process 有谁知道我可以查看并作为参考的现有代码吗?
不同的游戏状态是与人工智能沟通的最佳方式吗?
谢谢!
c# ×9
3d ×1
arrays ×1
coroutine ×1
javascript ×1
loops ×1
nested ×1
position ×1
quaternions ×1
uci ×1