01是女的,02是男的 (拖到上面重命名)
走路的动画 需要拖到上面。 default可以不弄。







if(this._isMainCar==true){
//判断当前点是不是 拉客 送客
if(this._currentRoadPoint.type == RoadPoint.RoadPointType.GREETING){
this._greetingCustomer();
}else if(this._currentRoadPoint.type == RoadPoint.RoadPointType.GOODBYE){
this._takingCustomer();
}
//判断当前点是不是 拉客 送客
}import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
enum EventName {
GREETING = 'greeting',
GOODBYE = "goodbye",
FINISHEDWALK = "finishedwalk",
}
@ccclass('Constants')
export class Constants extends Component {
public static EventName = EventName;
}引入使用


//接
private _greetingCustomer(){
EventListener.dispatchEvent(EventName.GREETING,this.node.worldPosition,this._currentRoadPoint?.direction);
}
//送
private _takingCustomer(){
EventListener.dispatchEvent(EventName.GOODBYE,this.node.worldPosition,this._currentRoadPoint?.direction);
}


import { _decorator, Component, Node, Vec3, AnimationComponent } from 'cc';
import { EventListener } from './EventListener';
import { Constants } from './data/Constants';
const { ccclass, property } = _decorator;
const EventName = Constants?.EventName;
const _tempVec = new Vec3();
@ccclass('CustomerManager')
export class CustomerManager extends Component {
@property({
type: [Node]
})
customers: Node[] = [];//存2个小人
@property
walkTime = 2;//小人的步行时间
private _currentCustomer: Node | null = null;
private _startPos = new Vec3();
private _endPos = new Vec3();
private _inTheOrder = false;//
private _deltaTime = 0;
private _state = Constants.CustomerState.NONE;
public start() {
//监听 car传来的消息 接客 送客
EventListener.on(EventName.GREETING, this._greetingCustomer, this);
EventListener.on(EventName.GOODBYE, this._takingCustomer, this);
}
public update(dt:number){
if(this._inTheOrder){
this._deltaTime+=dt;
if(this._deltaTime>this.walkTime){
this._deltaTime=0;
this._inTheOrder= false;
if(this._currentCustomer!=null){
this._currentCustomer.active=false;
}
if(this._state==Constants.CustomerState.GOODBYE){
//当前乘客没有了
this._currentCustomer = null;
}
//给小车派发事件
EventListener.dispatchEvent(EventName.FINISHEDWALK);
}else{
Vec3.lerp(_tempVec,this._startPos,this._endPos,this._deltaTime/this.walkTime);//
this._currentCustomer?.setWorldPosition(_tempVec);
}
}
}
// EventListener.dispatchEvent(EventName.GREETING, this.node.worldPosition, this._currentRoadPoint?.direction);
private _greetingCustomer(...args: any[]) {
this._currentCustomer = this.customers[Math.floor(Math.random() * this.customers.length)];
this._state = Constants.CustomerState.GREETING;
this._inTheOrder = true;
if (!this._currentCustomer) {
return;
}
const carPos = args[0];
const direction = args[1];
//距离是离我1.4 到 离我0.5 x的数值 左手边是-1 右手边是1
Vec3.multiplyScalar(this._startPos,direction,1.4);//向量标量乘法 缩放当前向量。
this._startPos.add(carPos);
Vec3.multiplyScalar(this._endPos,direction,0.5);
this._endPos.add(carPos);
console.log("起点"+this._startPos);
console.log("终点"+this._endPos);
//起点(0.50, 0.00, 0.00)
//终点(0.00, 0.00, 23.99)
this._currentCustomer.setWorldPosition(this._startPos);
this._currentCustomer.active = true;
//顾客朝向
if(direction.x!=0){
if(direction.x>0){
this._currentCustomer.eulerAngles = new Vec3(0,-90,0);
}else {
this._currentCustomer.eulerAngles = new Vec3(0,90,0);
}
}else{
if(direction.z>0){
this._currentCustomer.eulerAngles = new Vec3(0,180,0);
}else {
this._currentCustomer.eulerAngles = new Vec3();
}
}
const animComp = this._currentCustomer.getComponent(AnimationComponent);
animComp?.play("walk");
}
private _takingCustomer(...args: any[]) {
this._state = Constants.CustomerState.GOODBYE;
this._inTheOrder = true;
const carPos = args[0];
const direction = args[1];
Vec3.multiplyScalar(this._startPos,direction,0.5);
this._startPos.add(carPos);
Vec3.multiplyScalar(this._endPos,direction,1.4);
this._endPos.add(carPos);
this._currentCustomer?.setWorldPosition(this._startPos);
if(this._currentCustomer!=null){
this._currentCustomer.active=true;
//顾客朝向
if(direction.x!=0){
if(direction.x>0){
this._currentCustomer.eulerAngles = new Vec3(0,90,0);
}else {
this._currentCustomer.eulerAngles = new Vec3(0,-90,0);
}
}else{
if(direction.z>0){
this._currentCustomer.eulerAngles = new Vec3();
}else {
this._currentCustomer.eulerAngles = new Vec3(0,180,0);
}
}
const animComp = this._currentCustomer.getComponent(AnimationComponent);
animComp?.play("walk");
}
}
}站长微信:xiaomao0055
站长QQ:14496453