Unity 角色移动贴墙行走


直接贴上代码,旋转角色角度检测碰撞

Vector2 v2Normal = new Vector2(normal.x, normal.y);
            float fAngle = Vector2.SignedAngle(v2Normal, Vector2.up);
            gameObject.transform.localRotation = Quaternion.Euler(0, fAngle,0);


            Vector3 startPos = new Vector3(transform.position.x, transform.position.y+2, transform.position.z);
            Vector3 v3Dir =transform.TransformDirection(Vector3.forward);
            Vector3 endPos = startPos + v3Dir * Time.deltaTime * mMoveSpeed;

            // 检测是否碰到模型
            RaycastHit hitInfo;
            if (Physics.Linecast(startPos, endPos, out hitInfo, 1 << LayerMask.NameToLayer("Wall")))
            {
                // 贴着模型行走
                for (int i = 0; i < 72; i++)
                {
                    fAngle += 5.0f;
                    gameObject.transform.localRotation = Quaternion.Euler(0, fAngle, 0);
                    v3Dir = transform.TransformDirection(Vector3.forward);
                    endPos = startPos + v3Dir * Time.deltaTime * mMoveSpeed;
                    if (!Physics.Linecast(startPos, endPos, out hitInfo, 1 << LayerMask.NameToLayer("Wall")))
                    {
                        gameObject.transform.Translate(Vector3.forward * Time.deltaTime * mMoveSpeed);
                        break;
                    }
                }
            }
            else
            {
                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * mMoveSpeed);
            }  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM