首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >玩家物体在移动操纵杆时持续旋转。

玩家物体在移动操纵杆时持续旋转。
EN

Stack Overflow用户
提问于 2020-09-04 11:30:12
回答 2查看 73关注 0票数 0

我已经为移动创造了一个双棒运动系统。我有一个角色在一个操纵杆的影响下移动正确。另一个操纵杆,我想要的设计是:

  • 当拍摄JS被移动时,朝那个方向看。
  • 当拍摄JS被释放时,朝最后一个瞄准的方向射击。

正在发生的事情是,当游戏开始的时候,角色会不断地射击,如果我移动ShootJS,角色就会旋转。我完全搞不懂为什么会发生这种事。

这是我的密码。预先感谢任何人提供的任何帮助。

使用System.Collections.Generic;使用UnityEngine;使用UnityEngine.UI;使用UnityEngine.AI;使用Ludiq;使用Bolt;公共类PlayerJSControlSc : MonoBehaviour { public GameObject player;public NavMeshAgent导航;公共文本stateText;公共浮点数moveSpeed;公共动画师;public FloatingJoystick moveJS;public FloatingJoystick shootJS;公共浮点数rotationSpeed = 10;公共int弹药;公共int mag;公共转换shotSpawn;公共浮点数;公共文本存储;int #en20 20#;// Start在第一个帧更新void (){ stateText.text = "";nav = player.GetComponent();moveJS =GameObject.Find(“浮动JS_Move").GetComponent();shootJS =GameObject.Find(”浮动JS_Shoot“).GetComponent()之前调用;} // Update每帧void (){ movePlayer();playerShoot();ammoCount.text = currentMag+ "/“+ ammo;} public void movePlayer() { //float x=Input.GetAxis(”水平“);//float =Input.GetAxis(”垂直“);ammoCount.text x= moveJS.Horizontal;float = moveJS.Vertical;nav.velocity =新的Vector3(x * moveSpeed,0,y* moveSpeed);if (nav.velocity.x != 0\x\{ animator.SetBool("isRunning",true);}moveSpeed{ animator.SetBool("isRunning",false);} public void playerShoot() { bool isAiming = false;float x= shootJS.Horizontal;浮点数z= shootJS.Vertical;if (x != 0\x=0\x= 0) { isAiming =真;/* Vector3 lookDir =新Vector3(x,0,z);四元数lookRotation = Quaternion.LookRotation(lookDir,Vector3.up);浮动步长= rotationSpeed * Time.deltaTime;player.transform.rotation = Quaternion.RotateTowards(lookRotation,transform.rotation,step);*/ float myAngle = Mathf.Atan2(x,z) * Mathf.Rad2Deg;float bodyRotation = myAngle +player.Trans.eulerAngles.y;player.transform.Rotate( 0,my角度,0,Space.World);}}{ if (currentMag > 0) {实例化( shotSpawn.position,shotSpawn.rotation);} IEnumerator reload() { ammo = ammo;currentMag = mag;产生返回新的WaitForSeconds(reloadTime);}

EN

回答 2

Stack Overflow用户

发布于 2020-09-04 16:29:38

你叫 playerShoot() ->,不移动-> shoot()

同样,playerShoot() ->也没有移动-> player.transform.Rotate( 0,myAngle,0,Space.World);

我觉得你应该做的是

仅在两个输入都为0

  • for的第一个帧中执行shoot移动而不是增加shoot

有点像

代码语言:javascript
运行
复制
private bool lastFrameMoved;

public void playerShoot()
{
    float x = shootJS.Horizontal; 
    float z = shootJS.Vertical;
    if (x != 0 || z != 0)
    {
        var lookDir = new Vector3(x, 0, z);
        var lookRotation = Quaternion.LookRotation(lookDir, Vector3.up);
         player.transform.rotation = lookRotation;

        lastFrameMoved = true;
    }
    else 
    { 
        if(lastFrameMoved)
        {
            shoot();
        }

        lastFrameMoved = false;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-09-05 11:25:23

我解决了螺栓的外观旋转(因为它帮助我可视化)。我很快就会解决拍摄部分。我正在使用Fenerax工作室的奇妙的Joystick包。

https://assetstore.unity.com/publishers/32730

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63740321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档