注意:我才学几个月的编程,八九成的代码是复制的网上大佬和GPTai的。发布此文章的目的是为了防止以后忘了。
下方代码中,我提前把unity3d中编辑》选项设置》输入管理器里,控制w键和s键的Horizontal轴改名成了WSY,控制a键和d键的Vertical轴改名成了ADY。这段代码上边还写了:
public float moveSpeed = 5;//设立数值移动速度为5
public float rotateSpeed = 30;//设立数值旋转速度为30
public float wsy;//设立数值wsy
public float ady;//设立数值ady
public Rigidbody GangTi;//设立刚体对象gangti
wsy = Input.GetAxis("WSY");//使wsy和输入管理器中的轴有关联
ady = Input.GetAxis("ADY");//使ady和输入管理器中的轴有关联
Rigidbody GangTi = this.gameObject.GetComponent<Rigidbody>();
if (wsy != 0)//如果wsy的值不为0,则向前后移动,方向取决于数值的正负
{
if (GangTi != null)
{
Vector3 targetPos = GangTi.position + GangTi.transform.forward * wsy * moveSpeed * Time.deltaTime;
GangTi.MovePosition(targetPos);
}
BroadcastMessage("TheisMoving","yidong");//发送消息“isMoving”给挂载物体和挂载物体的子物体及其子物体
}
if (ady != 0)//如果ady的值不为0,则向左右移动,方向取决于数值的正负
{
if(GangTi != null)
{
Vector3 targetPos = GangTi.position + GangTi.transform.right * ady * moveSpeed * Time.deltaTime;
GangTi.MovePosition(targetPos);
}
BroadcastMessage("TheisMoving","yidong");//发送消息“isMoving”给挂载物体和挂载物体的子物体及其子物体
}
//这串代码是防止摄像头移动时角色正前方向始终跟随摄像机正前方向
if (wsy == 0 && ady == 0)//如果进退y和左右y的值皆为零,则运行下方逻辑
{
BroadcastMessage("TheisMoving", "Noyidong");//发送消息“NoisMoving”给挂载物体和挂载物体的子物体及其子物体。
}
BroadcastMessage方法来发送消息,是因为我把摄像机脚本所挂载的物体mainCamera放在了人物移动的脚本所挂载的物体之下。也就是说人物是摄像机的父物体。
private bool isMoving = false;//设置布尔值isMoving为否
public void TheisMoving(string message)//接收信号名称为TheisMoving的消息,创建参数message为下方接收参数
{
Debug.Log("AAA");//在Unity3d的控制台输出AAA
if (message == "yidong")//如果参数==yidong,则运行if下方逻辑
{
MovingA();//调用下方的MovingA
}
//这串代码是防止摄像头移动时角色正前方向始终跟随摄像机正前方向
if (message == "Noyidong")//如果参数==Noyidong,则运行if下方逻辑。
{
MovingB();//调用下方的MovingB
}
}
void MovingA()
{
isMoving = true;//修改isMoving的值为是
}
void MovingB()
{
isMoving = false;//修改isMoving的值为否
}